Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2736)

Unified Diff: cc/trees/property_tree_builder.cc

Issue 1106013002: cc: Fix property tree position updates when rebuilding is skipped (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add test Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/trees/property_tree.cc ('k') | cc/trees/property_tree_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/trees/property_tree_builder.cc
diff --git a/cc/trees/property_tree_builder.cc b/cc/trees/property_tree_builder.cc
index 269a71e9a56b77700385705b84bb774e92e9d494..064a0944c4162f5a7ac2e3e40795c09aec21b198 100644
--- a/cc/trees/property_tree_builder.cc
+++ b/cc/trees/property_tree_builder.cc
@@ -185,33 +185,29 @@ bool AddTransformNodeIfNeeded(
LayerType* transform_parent = GetTransformParent(data_from_ancestor, layer);
- gfx::Vector2dF parent_offset;
+ int parent_index = 0;
+ if (transform_parent)
+ parent_index = transform_parent->transform_tree_index();
+
+ int source_index = parent_index;
+
+ gfx::Vector2dF source_offset;
if (transform_parent) {
if (layer->scroll_parent()) {
- gfx::Transform to_parent;
LayerType* source = layer->parent();
- parent_offset += source->offset_to_transform_parent();
- data_from_ancestor.transform_tree->ComputeTransform(
- source->transform_tree_index(),
- transform_parent->transform_tree_index(), &to_parent);
- parent_offset += to_parent.To2dTranslation();
+ source_offset += source->offset_to_transform_parent();
+ source_index = source->transform_tree_index();
} else if (!is_fixed) {
- parent_offset = transform_parent->offset_to_transform_parent();
+ source_offset = transform_parent->offset_to_transform_parent();
} else {
if (data_from_ancestor.transform_tree_parent !=
data_from_ancestor.transform_fixed_parent) {
- gfx::Vector2dF fixed_offset = data_from_ancestor.transform_tree_parent
- ->offset_to_transform_parent();
- gfx::Transform parent_to_parent;
- data_from_ancestor.transform_tree->ComputeTransform(
- data_from_ancestor.transform_tree_parent->transform_tree_index(),
- data_from_ancestor.transform_fixed_parent->transform_tree_index(),
- &parent_to_parent);
-
- fixed_offset += parent_to_parent.To2dTranslation();
- parent_offset += fixed_offset;
+ source_offset = data_from_ancestor.transform_tree_parent
+ ->offset_to_transform_parent();
+ source_index =
+ data_from_ancestor.transform_tree_parent->transform_tree_index();
}
- parent_offset += data_from_ancestor.scroll_compensation_adjustment;
+ source_offset += data_from_ancestor.scroll_compensation_adjustment;
}
}
@@ -226,17 +222,21 @@ bool AddTransformNodeIfNeeded(
data_for_children->should_flatten |= layer->should_flatten_transform();
gfx::Vector2dF local_offset = layer->position().OffsetFromOrigin() +
layer->transform().To2dTranslation();
- layer->set_offset_to_transform_parent(parent_offset + local_offset);
+ gfx::Vector2dF source_to_parent;
+ if (source_index != parent_index) {
+ gfx::Transform to_parent;
+ data_from_ancestor.transform_tree->ComputeTransform(
+ source_index, parent_index, &to_parent);
+ source_to_parent = to_parent.To2dTranslation();
+ }
+ layer->set_offset_to_transform_parent(source_offset + source_to_parent +
+ local_offset);
layer->set_should_flatten_transform_from_property_tree(
data_from_ancestor.should_flatten);
- layer->set_transform_tree_index(transform_parent->transform_tree_index());
+ layer->set_transform_tree_index(parent_index);
return false;
}
- int parent_index = 0;
- if (transform_parent)
- parent_index = transform_parent->transform_tree_index();
-
data_for_children->transform_tree->Insert(TransformNode(), parent_index);
TransformNode* node = data_for_children->transform_tree->back();
@@ -276,7 +276,8 @@ bool AddTransformNodeIfNeeded(
post_local_scale_factor);
} else {
node->data.post_local_scale_factor = post_local_scale_factor;
- node->data.parent_offset = parent_offset;
+ node->data.source_offset = source_offset;
+ node->data.source_node_id = source_index;
node->data.update_post_local_transform(layer->position(),
layer->transform_origin());
}
« no previous file with comments | « cc/trees/property_tree.cc ('k') | cc/trees/property_tree_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698