Snap pinch zoom gestures near the screen edge.
commit499dd0841ce733af38260996a893e7f04dfcd450
authorbokan <bokan@chromium.org>
Wed, 24 Jun 2015 15:35:19 +0000 (24 08:35 -0700)
committerCommit bot <commit-bot@chromium.org>
Wed, 24 Jun 2015 15:35:47 +0000 (24 15:35 +0000)
tree9a8b1c98b2aa2aaf8918d3c7d4c755d67f63a914
parentca2eecb014058605c7df8ba83b44a293bd8c3677
Snap pinch zoom gestures near the screen edge.

Pinch zooming in on elements near at the screen edges is difficult with pinch-
zoom since the gesture will never be exactly on the edge. This is especially
problematic when trying to pinch-zoom in on position:fixed elements.

This patch adds a margin around the screen, currently 100px. If the first pinch-
zoom gesture's center falls within the margin, we save the distance from the
edge as the "anchor adjustment" and add it to all pinch updates for this
gesture. The effect is that the pinch will behave as if the user created the
gesture exactly over the edge, however, still allows movement away from the
edge during the gesture.

This patch also fixes the Viewport::Pan method not to use
LTHI::ScrollLayerWithViewportSpaceDelta since it takes a screen-space delta and
converts it to a local delta using the layer's transform. This transform is
computed in CalcDrawProps and since we change the page_scale and immediately
pan, the new scale isn't reflected in the transform.

BUG=426138
CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel

Review URL: https://codereview.chromium.org/1207573002

Cr-Commit-Position: refs/heads/master@{#335925}
cc/layers/viewport.cc
cc/layers/viewport.h
cc/trees/layer_tree_host_impl.cc
cc/trees/layer_tree_host_impl.h
cc/trees/layer_tree_host_impl_unittest.cc