summaryrefslogtreecommitdiffstats
path: root/cc/trees/property_tree.cc
diff options
context:
space:
mode:
authorjaydasika <jaydasika@chromium.org>2015-09-09 17:27:21 -0700
committerCommit bot <commit-bot@chromium.org>2015-09-10 00:28:00 +0000
commit96994584c0279e7732b2f39a1ae6c607ae9ed559 (patch)
treecacd2a3aaeef9e3f9808b3f209505223ec2e70ef /cc/trees/property_tree.cc
parente1fb556186d91371ae447e96b0589957c3bc647f (diff)
downloadchromium_src-96994584c0279e7732b2f39a1ae6c607ae9ed559.zip
chromium_src-96994584c0279e7732b2f39a1ae6c607ae9ed559.tar.gz
chromium_src-96994584c0279e7732b2f39a1ae6c607ae9ed559.tar.bz2
Undo scroll snap on to_parent at the start of new frame.
We need to undo the scroll snap baked into to_parent from the previous frame as we need the unsnapped to_parent to calculate the current frame screen space and draw transforms. CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel Review URL: https://codereview.chromium.org/1331453002 Cr-Commit-Position: refs/heads/master@{#348050}
Diffstat (limited to 'cc/trees/property_tree.cc')
-rw-r--r--cc/trees/property_tree.cc12
1 files changed, 11 insertions, 1 deletions
diff --git a/cc/trees/property_tree.cc b/cc/trees/property_tree.cc
index d65a142..809c158 100644
--- a/cc/trees/property_tree.cc
+++ b/cc/trees/property_tree.cc
@@ -181,6 +181,8 @@ void TransformTree::UpdateTransforms(int id) {
if (node->data.needs_local_transform_update ||
NeedsSourceToParentUpdate(node))
UpdateLocalTransform(node);
+ else
+ UndoSnapping(node);
UpdateScreenSpaceTransform(node, parent_node, target_node);
UpdateSublayerScale(node);
UpdateTargetSpaceTransform(node, target_node);
@@ -492,6 +494,14 @@ void TransformTree::UpdateAnimationProperties(TransformNode* node,
max_ancestor_scale * node->data.local_starting_animation_scale;
}
+void TransformTree::UndoSnapping(TransformNode* node) {
+ // to_parent transform has the scroll snap from previous frame baked in.
+ // We need to undo it and use the un-snapped transform to compute current
+ // target and screen space transforms.
+ node->data.to_parent.Translate(-node->data.scroll_snap.x(),
+ -node->data.scroll_snap.y());
+}
+
void TransformTree::UpdateSnapping(TransformNode* node) {
if (!node->data.scrolls || node->data.to_screen_is_animated ||
!node->data.to_target.IsScaleOrTranslation()) {
@@ -516,8 +526,8 @@ void TransformTree::UpdateSnapping(TransformNode* node) {
// Now that we have our scroll delta, we must apply it to each of our
// combined, to/from matrices.
+ node->data.to_target = rounded;
node->data.to_parent.Translate(translation.x(), translation.y());
- node->data.to_target.Translate(translation.x(), translation.y());
node->data.from_target.matrix().postTranslate(-translation.x(),
-translation.y(), 0);
node->data.to_screen.Translate(translation.x(), translation.y());