Index: cc/trees/property_tree.cc |
diff --git a/cc/trees/property_tree.cc b/cc/trees/property_tree.cc |
index 1b0b5954a547fef475042fc8985caa199747098d..735b168a6210fc4a58ae733aa8a3e5dbd02e6949 100644 |
--- a/cc/trees/property_tree.cc |
+++ b/cc/trees/property_tree.cc |
@@ -1294,16 +1294,18 @@ const gfx::ScrollOffset ScrollTree::current_scroll_offset(int layer_id) const { |
gfx::ScrollOffset ScrollTree::PullDeltaForMainThread( |
SyncedScrollOffset* scroll_offset) { |
- // TODO(flackr): We should pass the fractional scroll deltas when Blink fully |
- // supports fractional scrolls. |
- // TODO(flackr): We should ideally round the fractional scrolls in the same |
- // direction as the scroll will be snapped but for common cases this is |
- // equivalent to rounding to the nearest integer offset. |
+ // TODO(miletus): Remove all this temporary flooring machinery when |
+ // Blink fully supports fractional scrolls. |
gfx::ScrollOffset current_offset = |
scroll_offset->Current(property_trees()->is_active); |
- gfx::ScrollOffset rounded_offset = |
- gfx::ScrollOffset(roundf(current_offset.x()), roundf(current_offset.y())); |
- scroll_offset->SetCurrent(rounded_offset); |
+ gfx::ScrollOffset current_delta = property_trees()->is_active |
+ ? scroll_offset->Delta() |
+ : scroll_offset->PendingDelta().get(); |
+ gfx::ScrollOffset floored_delta(floor(current_delta.x()), |
+ floor(current_delta.y())); |
+ gfx::ScrollOffset diff_delta = floored_delta - current_delta; |
+ gfx::ScrollOffset tmp_offset = current_offset + diff_delta; |
+ scroll_offset->SetCurrent(tmp_offset); |
gfx::ScrollOffset delta = scroll_offset->PullDeltaForMainThread(); |
scroll_offset->SetCurrent(current_offset); |
return delta; |