Chromium Code Reviews| Index: Source/core/page/scrolling/ScrollingCoordinator.cpp |
| diff --git a/Source/core/page/scrolling/ScrollingCoordinator.cpp b/Source/core/page/scrolling/ScrollingCoordinator.cpp |
| index 9ef7d6404d86bb4d5e07d3449ddab67b5d2d70c6..0298446ffbbea595f0d6fa5a1203055e738cf312 100644 |
| --- a/Source/core/page/scrolling/ScrollingCoordinator.cpp |
| +++ b/Source/core/page/scrolling/ScrollingCoordinator.cpp |
| @@ -390,10 +390,20 @@ bool ScrollingCoordinator::scrollableAreaScrollLayerDidChange(ScrollableArea* sc |
| // to set the WebLayer's scroll position at fractional precision otherwise the |
| // WebLayer's position after snapping to device pixel can be off with regard to |
| // fixed position elements. |
| - if (m_lastMainThreadScrollingReasons & ScrollingCoordinator::HasNonLayerViewportConstrainedObjects) |
| + if (m_lastMainThreadScrollingReasons & ScrollingCoordinator::HasNonLayerViewportConstrainedObjects) { |
| webLayer->setScrollPositionDouble(DoublePoint(scrollableArea->scrollPosition() - scrollableArea->minimumScrollPosition())); |
| - else |
| - webLayer->setScrollPositionDouble(DoublePoint(scrollableArea->scrollPositionDouble() - scrollableArea->minimumScrollPosition())); |
| + } else { |
| + // Blink can only use the integer part of the scroll offset to position elements. |
| + // So it sends the fractional part of the scroll offset to CC separately to be |
| + // clear that CC needs to take special care of the fractional part, e.g. |
| + // compensating for fixed-position layer's position. Once Blink can fully position |
| + // elements at fractional boundary, we can get rid of this call. |
| + DoublePoint scrollPosition(scrollableArea->scrollPositionDouble() - scrollableArea->minimumScrollPosition()); |
| + IntPoint flooredScrollPosition(flooredIntPoint(scrollPosition)); |
| + DoublePoint fractionalPart(scrollPosition.x() - flooredScrollPosition.x(), scrollPosition.y() - flooredScrollPosition.y()); |
| + webLayer->setScrollPositionDouble(scrollPosition); |
|
Rick Byers
2015/01/29 20:53:13
You don't want flooredScrollPosition here? If the
|
| + webLayer->setScrollPositionFractionalPart(fractionalPart); |
| + } |
| webLayer->setBounds(scrollableArea->contentsSize()); |
| bool canScrollX = scrollableArea->userInputScrollable(HorizontalScrollbar); |