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

Unified Diff: cc/trees/property_tree_builder.cc

Issue 2451183002: Add sticky nodes affected by inner and outer viewport bounds deltas. (Closed)
Patch Set: Merge with master. Created 4 years, 2 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 57f5aa00ba58a1d3ffceccb3d0a36e61e87d8fec..b672b556fdc68ca392cc80e4db1490d0f2f8c3a5 100644
--- a/cc/trees/property_tree_builder.cc
+++ b/cc/trees/property_tree_builder.cc
@@ -669,22 +669,22 @@ bool AddTransformNodeIfNeeded(
if (is_fixed) {
if (data_from_ancestor.affected_by_inner_viewport_bounds_delta) {
- node->affected_by_inner_viewport_bounds_delta_x =
+ node->moved_by_inner_viewport_bounds_delta_x =
PositionConstraint(layer).is_fixed_to_right_edge();
- node->affected_by_inner_viewport_bounds_delta_y =
+ node->moved_by_inner_viewport_bounds_delta_y =
PositionConstraint(layer).is_fixed_to_bottom_edge();
- if (node->affected_by_inner_viewport_bounds_delta_x ||
- node->affected_by_inner_viewport_bounds_delta_y) {
+ if (node->moved_by_inner_viewport_bounds_delta_x ||
+ node->moved_by_inner_viewport_bounds_delta_y) {
data_for_children->property_trees->transform_tree
.AddNodeAffectedByInnerViewportBoundsDelta(node->id);
}
} else if (data_from_ancestor.affected_by_outer_viewport_bounds_delta) {
- node->affected_by_outer_viewport_bounds_delta_x =
+ node->moved_by_outer_viewport_bounds_delta_x =
PositionConstraint(layer).is_fixed_to_right_edge();
- node->affected_by_outer_viewport_bounds_delta_y =
+ node->moved_by_outer_viewport_bounds_delta_y =
PositionConstraint(layer).is_fixed_to_bottom_edge();
- if (node->affected_by_outer_viewport_bounds_delta_x ||
- node->affected_by_outer_viewport_bounds_delta_y) {
+ if (node->moved_by_outer_viewport_bounds_delta_x ||
+ node->moved_by_outer_viewport_bounds_delta_y) {
data_for_children->property_trees->transform_tree
.AddNodeAffectedByOuterViewportBoundsDelta(node->id);
}
@@ -703,9 +703,19 @@ bool AddTransformNodeIfNeeded(
ScrollNode* scroll_ancestor =
data_for_children->property_trees->scroll_tree.Node(
sticky_data->scroll_ancestor);
- if (scroll_ancestor->is_inner_viewport_scroll_layer) {
- data_for_children->property_trees->transform_tree
- .AddNodeAffectedByInnerViewportBoundsDelta(node->id);
+ if (sticky_data->constraints.is_anchored_right ||
+ sticky_data->constraints.is_anchored_bottom) {
+ // Sticky nodes whose ancestor scroller is the inner / outer viewport
+ // need to have their local transform updated when the inner / outer
+ // viewport bounds change, but do not unconditionally move by that delta
+ // like fixed position nodes.
+ if (scroll_ancestor->is_inner_viewport_scroll_layer) {
+ data_for_children->property_trees->transform_tree
+ .AddNodeAffectedByInnerViewportBoundsDelta(node->id);
+ } else if (scroll_ancestor->is_outer_viewport_scroll_layer) {
+ data_for_children->property_trees->transform_tree
+ .AddNodeAffectedByOuterViewportBoundsDelta(node->id);
+ }
}
sticky_data->main_thread_offset =
layer->position().OffsetFromOrigin() -
« 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