Index: Source/core/rendering/RenderLayerScrollableArea.cpp |
diff --git a/Source/core/rendering/RenderLayerScrollableArea.cpp b/Source/core/rendering/RenderLayerScrollableArea.cpp |
index 8684edbff0995ea22ffbacbb97e92502b678692c..8119a1d16cbafda5921c481787833ff0374ee3b6 100644 |
--- a/Source/core/rendering/RenderLayerScrollableArea.cpp |
+++ b/Source/core/rendering/RenderLayerScrollableArea.cpp |
@@ -329,6 +329,8 @@ int RenderLayerScrollableArea::scrollSize(ScrollbarOrientation orientation) cons |
void RenderLayerScrollableArea::setScrollOffset(const IntPoint& newScrollOffset) |
{ |
+ LayoutRectRecorder recorder(*m_box); |
+ |
if (!m_box->isMarquee()) { |
// Ensure that the dimensions will be computed if they need to be (for overflow:hidden blocks). |
if (m_scrollDimensionsDirty) |
@@ -365,7 +367,12 @@ void RenderLayerScrollableArea::setScrollOffset(const IntPoint& newScrollOffset) |
// The caret rect needs to be invalidated after scrolling |
frame->selection().setCaretRectNeedsUpdate(); |
- FloatQuad quadForFakeMouseMoveEvent = FloatQuad(layer()->repainter().repaintRect()); |
+ FloatQuad quadForFakeMouseMoveEvent; |
+ if (RuntimeEnabledFeatures::repaintAfterLayoutEnabled()) |
+ quadForFakeMouseMoveEvent = FloatQuad(layer()->renderer()->newRepaintRect()); |
+ else |
+ quadForFakeMouseMoveEvent = FloatQuad(layer()->repainter().repaintRect()); |
+ |
if (repaintContainer) |
quadForFakeMouseMoveEvent = repaintContainer->localToAbsoluteQuad(quadForFakeMouseMoveEvent); |
frame->eventHandler().dispatchFakeMouseMoveEventSoonInQuad(quadForFakeMouseMoveEvent); |
@@ -385,10 +392,14 @@ void RenderLayerScrollableArea::setScrollOffset(const IntPoint& newScrollOffset) |
// Just schedule a full repaint of our object. |
if (requiresRepaint) { |
- if (RuntimeEnabledFeatures::repaintAfterLayoutEnabled() && m_box->frameView()->isInPerformLayout()) |
- m_box->setShouldDoFullRepaintAfterLayout(true); |
- else |
+ if (RuntimeEnabledFeatures::repaintAfterLayoutEnabled()) { |
+ if (m_box->frameView()->isInPerformLayout()) |
Julien - ping for review
2014/03/04 18:22:10
Why do we need to check isInPerformLayout() and wh
dsinclair
2014/03/04 19:21:52
This code can be executed outside of layout. As fa
|
+ m_box->setShouldDoFullRepaintAfterLayout(true); |
+ else |
+ m_box->repaintUsingContainer(repaintContainer, pixelSnappedIntRect(layer()->renderer()->newRepaintRect())); |
+ } else { |
m_box->repaintUsingContainer(repaintContainer, pixelSnappedIntRect(layer()->repainter().repaintRect())); |
+ } |
} |
// Schedule the scroll DOM event. |