| Index: cc/trees/property_tree.cc
|
| diff --git a/cc/trees/property_tree.cc b/cc/trees/property_tree.cc
|
| index ac8b60bb2b9184761af6a0461fbb4afffb5b3256..933b065302906b5b70709c56e2ca04c8a223929e 100644
|
| --- a/cc/trees/property_tree.cc
|
| +++ b/cc/trees/property_tree.cc
|
| @@ -145,6 +145,7 @@ TransformNodeData::TransformNodeData()
|
| affected_by_outer_viewport_bounds_delta_x(false),
|
| affected_by_outer_viewport_bounds_delta_y(false),
|
| in_subtree_of_page_scale_layer(false),
|
| + transform_changed(false),
|
| post_local_scale_factor(1.0f),
|
| local_maximum_animation_target_scale(0.f),
|
| local_starting_animation_scale(0.f),
|
| @@ -187,6 +188,7 @@ bool TransformNodeData::operator==(const TransformNodeData& other) const {
|
| other.affected_by_outer_viewport_bounds_delta_y &&
|
| in_subtree_of_page_scale_layer ==
|
| other.in_subtree_of_page_scale_layer &&
|
| + transform_changed == other.transform_changed &&
|
| post_local_scale_factor == other.post_local_scale_factor &&
|
| local_maximum_animation_target_scale ==
|
| other.local_maximum_animation_target_scale &&
|
| @@ -270,6 +272,7 @@ void TransformNodeData::ToProtobuf(proto::TreeNode* proto) const {
|
| affected_by_outer_viewport_bounds_delta_y);
|
|
|
| data->set_in_subtree_of_page_scale_layer(in_subtree_of_page_scale_layer);
|
| + data->set_transform_changed(transform_changed);
|
| data->set_post_local_scale_factor(post_local_scale_factor);
|
| data->set_local_maximum_animation_target_scale(
|
| local_maximum_animation_target_scale);
|
| @@ -335,6 +338,7 @@ void TransformNodeData::FromProtobuf(const proto::TreeNode& proto) {
|
| data.affected_by_outer_viewport_bounds_delta_y();
|
|
|
| in_subtree_of_page_scale_layer = data.in_subtree_of_page_scale_layer();
|
| + transform_changed = data.transform_changed();
|
| post_local_scale_factor = data.post_local_scale_factor();
|
| local_maximum_animation_target_scale =
|
| data.local_maximum_animation_target_scale();
|
| @@ -594,10 +598,18 @@ bool TransformTree::NeedsSourceToParentUpdate(TransformNode* node) {
|
| node->parent_id != node->data.source_node_id);
|
| }
|
|
|
| +void TransformTree::ResetChangeTracking() {
|
| + for (int id = 1; id < static_cast<int>(size()); ++id) {
|
| + TransformNode* node = Node(id);
|
| + node->data.transform_changed = false;
|
| + }
|
| +}
|
| +
|
| void TransformTree::UpdateTransforms(int id) {
|
| TransformNode* node = Node(id);
|
| TransformNode* parent_node = parent(node);
|
| TransformNode* target_node = Node(node->data.target_id);
|
| + TransformNode* source_node = Node(node->data.source_node_id);
|
| if (node->data.needs_local_transform_update ||
|
| NeedsSourceToParentUpdate(node))
|
| UpdateLocalTransform(node);
|
| @@ -609,6 +621,7 @@ void TransformTree::UpdateTransforms(int id) {
|
| UpdateAnimationProperties(node, parent_node);
|
| UpdateSnapping(node);
|
| UpdateNodeAndAncestorsHaveIntegerTranslations(node, parent_node);
|
| + UpdateTransformChanged(node, parent_node, source_node);
|
| }
|
|
|
| bool TransformTree::IsDescendant(int desc_id, int source_id) const {
|
| @@ -968,6 +981,19 @@ void TransformTree::UpdateSnapping(TransformNode* node) {
|
| node->data.scroll_snap = translation;
|
| }
|
|
|
| +void TransformTree::UpdateTransformChanged(TransformNode* node,
|
| + TransformNode* parent_node,
|
| + TransformNode* source_node) {
|
| + if (parent_node && parent_node->data.transform_changed) {
|
| + node->data.transform_changed = true;
|
| + return;
|
| + }
|
| +
|
| + if (source_node && source_node->id != parent_node->id &&
|
| + source_to_parent_updates_allowed_ && source_node->data.transform_changed)
|
| + node->data.transform_changed = true;
|
| +}
|
| +
|
| void TransformTree::SetDeviceTransform(const gfx::Transform& transform,
|
| gfx::PointF root_position) {
|
| gfx::Transform root_post_local = transform;
|
|
|