Index: Source/core/rendering/RenderObject.h |
diff --git a/Source/core/rendering/RenderObject.h b/Source/core/rendering/RenderObject.h |
index bd27cc85d31a91811bfb79949d3c105b1ab14e10..d7259c6419385cff97368a749477514bfe7bdc72 100644 |
--- a/Source/core/rendering/RenderObject.h |
+++ b/Source/core/rendering/RenderObject.h |
@@ -994,11 +994,22 @@ public: |
void setOldOutlineRect(const LayoutRect&); |
bool shouldDoFullRepaintAfterLayout() const { return m_bitfields.shouldDoFullRepaintAfterLayout(); } |
- void setShouldDoFullRepaintAfterLayout(bool b) { m_bitfields.setShouldDoFullRepaintAfterLayout(b); } |
+ void setShouldDoFullRepaintAfterLayout(bool b) |
+ { |
+ m_bitfields.setShouldDoFullRepaintAfterLayout(b); |
+ if (b) |
+ setMayNeedInvalidation(true); |
+ } |
+ |
bool shouldRepaintOverflow() const { return m_bitfields.shouldRepaintOverflow(); } |
bool shouldDoFullRepaintIfSelfPaintingLayer() const { return m_bitfields.shouldDoFullRepaintIfSelfPaintingLayer(); } |
- void setShouldDoFullRepaintIfSelfPaintingLayer(bool b) { m_bitfields.setShouldDoFullRepaintIfSelfPaintingLayer(b); } |
+ void setShouldDoFullRepaintIfSelfPaintingLayer(bool b) |
+ { |
+ m_bitfields.setShouldDoFullRepaintIfSelfPaintingLayer(b); |
+ if (b) |
+ setMayNeedInvalidation(true); |
+ } |
bool onlyNeededPositionedMovementLayout() const { return m_bitfields.onlyNeededPositionedMovementLayout(); } |
void setOnlyNeededPositionedMovementLayout(bool b) { m_bitfields.setOnlyNeededPositionedMovementLayout(b); } |
@@ -1010,6 +1021,16 @@ public: |
bool layoutDidGetCalled() { return m_bitfields.layoutDidGetCalled(); } |
void setLayoutDidGetCalled(bool b) { m_bitfields.setLayoutDidGetCalled(b); } |
+ bool mayNeedInvalidation() { return m_bitfields.mayNeedInvalidation(); } |
+ void setMayNeedInvalidation(bool b) |
+ { |
+ m_bitfields.setMayNeedInvalidation(b); |
+ |
+ // Make sure our parent is marked as needing invalidation. |
+ if (b && parent() && !parent()->mayNeedInvalidation()) |
+ parent()->setMayNeedInvalidation(b); |
+ } |
+ |
bool shouldDisableLayoutState() const { return hasColumns() || hasTransform() || hasReflection() || style()->isFlippedBlocksWritingMode(); } |
void setNeedsOverflowRecalcAfterStyleChange(); |
@@ -1125,6 +1146,7 @@ private: |
, m_shouldDoFullRepaintAfterLayout(false) |
, m_shouldRepaintOverflow(false) |
, m_shouldDoFullRepaintIfSelfPaintingLayer(false) |
+ , m_mayNeedInvalidation(false) |
, m_onlyNeededPositionedMovementLayout(false) |
, m_needsPositionedMovementLayout(false) |
, m_normalChildNeedsLayout(false) |
@@ -1159,11 +1181,12 @@ private: |
{ |
} |
- // 32 bits have been used in the first word, and 5 in the second. |
+ // 32 bits have been used in the first word, and 6 in the second. |
ADD_BOOLEAN_BITFIELD(selfNeedsLayout, SelfNeedsLayout); |
ADD_BOOLEAN_BITFIELD(shouldDoFullRepaintAfterLayout, ShouldDoFullRepaintAfterLayout); |
ADD_BOOLEAN_BITFIELD(shouldRepaintOverflow, ShouldRepaintOverflow); |
ADD_BOOLEAN_BITFIELD(shouldDoFullRepaintIfSelfPaintingLayer, ShouldDoFullRepaintIfSelfPaintingLayer); |
+ ADD_BOOLEAN_BITFIELD(mayNeedInvalidation, MayNeedInvalidation); |
ADD_BOOLEAN_BITFIELD(onlyNeededPositionedMovementLayout, OnlyNeededPositionedMovementLayout); |
ADD_BOOLEAN_BITFIELD(needsPositionedMovementLayout, NeedsPositionedMovementLayout); |
ADD_BOOLEAN_BITFIELD(normalChildNeedsLayout, NormalChildNeedsLayout); |