Index: third_party/WebKit/Source/core/style/ComputedStyle.cpp |
diff --git a/third_party/WebKit/Source/core/style/ComputedStyle.cpp b/third_party/WebKit/Source/core/style/ComputedStyle.cpp |
index dd686597bdff2afb4b06c8140f040842bc7f7919..5844c31af5c32c9e517147c2e883b41939b9ef62 100644 |
--- a/third_party/WebKit/Source/core/style/ComputedStyle.cpp |
+++ b/third_party/WebKit/Source/core/style/ComputedStyle.cpp |
@@ -61,6 +61,8 @@ |
namespace blink { |
+static const int kPaintOrderBitwidth = 2; |
+ |
struct SameSizeAsBorderValue { |
RGBA32 m_color; |
unsigned m_bitfield; |
@@ -785,6 +787,14 @@ bool ComputedStyle::diffNeedsFullLayoutAndPaintInvalidation( |
if (!m_rareInheritedData->quotesDataEquivalent( |
*other.m_rareInheritedData.get())) |
return true; |
+ |
+ // These properties affect the cached stroke bounding box rects. |
+ if (m_rareInheritedData->capStyle != other.m_rareInheritedData->capStyle || |
+ m_rareInheritedData->joinStyle != |
+ other.m_rareInheritedData->joinStyle || |
+ m_rareInheritedData->strokeWidth != |
+ other.m_rareInheritedData->strokeWidth) |
+ return true; |
} |
if (m_styleInheritedData->textAutosizingMultiplier != |
@@ -945,7 +955,9 @@ bool ComputedStyle::diffNeedsPaintInvalidationObject( |
m_rareInheritedData->userSelect != |
other.m_rareInheritedData->userSelect || |
m_rareInheritedData->m_imageRendering != |
- other.m_rareInheritedData->m_imageRendering) |
+ other.m_rareInheritedData->m_imageRendering || |
+ m_rareInheritedData->paintOrder != |
+ other.m_rareInheritedData->paintOrder) |
return true; |
} |
@@ -2474,6 +2486,43 @@ bool ComputedStyle::shadowListHasCurrentColor(const ShadowList* shadowList) { |
return false; |
} |
+unsigned paintOrderSequence(EPaintOrderType first, |
+ EPaintOrderType second, |
+ EPaintOrderType third) { |
+ return (((third << kPaintOrderBitwidth) | second) << kPaintOrderBitwidth) | |
+ first; |
+} |
+ |
+EPaintOrderType ComputedStyle::paintOrderType(unsigned index) const { |
+ unsigned pt = 0; |
+ DCHECK_LT(index, static_cast<unsigned>((1 << kPaintOrderBitwidth) - 1)); |
+ switch (this->paintOrder()) { |
+ case PaintOrderNormal: |
+ case PaintOrderFillStrokeMarkers: |
+ pt = paintOrderSequence(PT_FILL, PT_STROKE, PT_MARKERS); |
+ break; |
+ case PaintOrderFillMarkersStroke: |
+ pt = paintOrderSequence(PT_FILL, PT_MARKERS, PT_STROKE); |
+ break; |
+ case PaintOrderStrokeFillMarkers: |
+ pt = paintOrderSequence(PT_STROKE, PT_FILL, PT_MARKERS); |
+ break; |
+ case PaintOrderStrokeMarkersFill: |
+ pt = paintOrderSequence(PT_STROKE, PT_MARKERS, PT_FILL); |
+ break; |
+ case PaintOrderMarkersFillStroke: |
+ pt = paintOrderSequence(PT_MARKERS, PT_FILL, PT_STROKE); |
+ break; |
+ case PaintOrderMarkersStrokeFill: |
+ pt = paintOrderSequence(PT_MARKERS, PT_STROKE, PT_FILL); |
+ break; |
+ } |
+ |
+ pt = |
+ (pt >> (kPaintOrderBitwidth * index)) & ((1u << kPaintOrderBitwidth) - 1); |
+ return (EPaintOrderType)pt; |
+} |
+ |
static inline Vector<GridTrackSize> initialGridAutoTracks() { |
Vector<GridTrackSize> trackSizeList; |
trackSizeList.reserveInitialCapacity(1); |