Chromium Code Reviews| 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. |