Index: Source/platform/graphics/paint/DisplayItem.h |
diff --git a/Source/platform/graphics/paint/DisplayItem.h b/Source/platform/graphics/paint/DisplayItem.h |
index c5cecd6d1c20a05f2f85466716919f60768c1eef..d3efa09053b7eefcdac06b62c2530cae3e53a8ff 100644 |
--- a/Source/platform/graphics/paint/DisplayItem.h |
+++ b/Source/platform/graphics/paint/DisplayItem.h |
@@ -91,6 +91,12 @@ public: |
SelectionGap, |
SelectionTint, |
TableCellBackgroundFromSelfPaintingRow, // FIXME: To be deprecated. |
+ // Table collapsed borders can be painted together (e.g., left & top) but there are at most 4 phases of collapsed |
+ // border painting for a single cell. To disambiguate these phases of collapsed border painting, a mask is used. |
+ // TableCollapsedBorderBase can be larger than TableCollapsedBorderUnalignedBase to ensure the base lower bits are 0's. |
+ TableCollapsedBorderUnalignedBase, |
+ TableCollapsedBorderBase = (((TableCollapsedBorderUnalignedBase - 1) >> 4) + 1) << 4, |
+ TableCollapsedBorderLast = TableCollapsedBorderBase + 0x0f, |
VideoBitmap, |
WebPlugin, |
WebFont, |
@@ -178,6 +184,16 @@ public: |
TypeLast = UninitializedType |
}; |
+ static_assert(TableCollapsedBorderBase >= TableCollapsedBorderUnalignedBase, "TableCollapsedBorder types overlap with other types"); |
+ static_assert((TableCollapsedBorderBase & 0xf) == 0, "The lowest 4 bits of TableCollapsedBorderBase should be zero"); |
+ // Bits or'ed onto TableCollapsedBorderBase to generate a real table collapsed border type. |
+ enum TableCollspaedBorderSides { |
+ TableCollapsedBorderTop = 1 << 0, |
+ TableCollapsedBorderRight = 1 << 1, |
+ TableCollapsedBorderBottom = 1 << 2, |
+ TableCollapsedBorderLeft = 1 << 3, |
+ }; |
+ |
DisplayItem(const DisplayItemClientWrapper& client, Type type, size_t derivedSize) |
: m_client(client.displayItemClient()) |
, m_scope(0) |
@@ -219,19 +235,19 @@ public: |
}; |
// Convert cached type to non-cached type (e.g., Type::CachedSVGImage -> Type::SVGImage). |
- Type nonCachedType() const |
+ static Type nonCachedType(Type type) |
{ |
- if (isCachedDrawingType(m_type)) |
- return cachedDrawingTypeToDrawingType(m_type); |
- if (isCachedSubtreeType(m_type)) |
- return cachedSubtreeTypeToBeginSubtreeType(m_type); |
- return m_type; |
+ if (isCachedDrawingType(type)) |
+ return cachedDrawingTypeToDrawingType(type); |
+ if (isCachedSubtreeType(type)) |
+ return cachedSubtreeTypeToBeginSubtreeType(type); |
+ return type; |
} |
// Return the Id with cached type converted to non-cached type. |
Id nonCachedId() const |
{ |
- return Id(m_client, nonCachedType(), m_scope); |
+ return Id(m_client, nonCachedType(m_type), m_scope); |
} |
virtual void replay(GraphicsContext&) { } |