Index: Source/core/rendering/RenderObject.cpp |
diff --git a/Source/core/rendering/RenderObject.cpp b/Source/core/rendering/RenderObject.cpp |
index 3c67d938d7e0ea3c3051fbeddc0cb52c6dd3cdfe..d957e61d7ebb4b230aa475476d1a75f2a7a08038 100644 |
--- a/Source/core/rendering/RenderObject.cpp |
+++ b/Source/core/rendering/RenderObject.cpp |
@@ -1518,9 +1518,9 @@ bool RenderObject::repaintAfterLayoutIfNeeded(const RenderLayerModelObject* repa |
fullRepaint = true; |
} |
- // If there is no intersection between the old and the new bounds, invalidating |
- // the difference is more expensive than just doing a full repaint. |
- if (!fullRepaint && !newBounds.intersects(oldBounds)) |
+ // If we shifted, we don't know the exact reason so we are conservative and trigger a full invalidation. Shifting could |
+ // be caused by some layout property (left / top) or some in-flow renderer inserted / removed before us in the tree. |
+ if (!fullRepaint && newBounds.location() != oldBounds.location()) |
fullRepaint = true; |
if (!repaintContainer) |