| OLD | NEW |
| 1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/trees/layer_tree_host_common.h" | 5 #include "cc/trees/layer_tree_host_common.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <memory> | 10 #include <memory> |
| (...skipping 7068 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7079 root->AddChild(container); | 7079 root->AddChild(container); |
| 7080 container->AddChild(scroller); | 7080 container->AddChild(scroller); |
| 7081 scroller->AddChild(sticky_pos); | 7081 scroller->AddChild(sticky_pos); |
| 7082 host()->SetRootLayer(root); | 7082 host()->SetRootLayer(root); |
| 7083 scroller->SetScrollClipLayerId(container->id()); | 7083 scroller->SetScrollClipLayerId(container->id()); |
| 7084 | 7084 |
| 7085 LayerStickyPositionConstraint sticky_position; | 7085 LayerStickyPositionConstraint sticky_position; |
| 7086 sticky_position.is_sticky = true; | 7086 sticky_position.is_sticky = true; |
| 7087 sticky_position.is_anchored_top = true; | 7087 sticky_position.is_anchored_top = true; |
| 7088 sticky_position.top_offset = 10.0f; | 7088 sticky_position.top_offset = 10.0f; |
| 7089 sticky_position.parent_relative_sticky_box_offset = gfx::Point(10, 20); | 7089 sticky_position.parent_relative_sticky_box_offset = gfx::PointF(10, 20); |
| 7090 sticky_position.scroll_container_relative_sticky_box_rect = | 7090 sticky_position.scroll_container_relative_sticky_box_rect = |
| 7091 gfx::Rect(10, 20, 10, 10); | 7091 gfx::RectF(10, 20, 10, 10); |
| 7092 sticky_position.scroll_container_relative_containing_block_rect = | 7092 sticky_position.scroll_container_relative_containing_block_rect = |
| 7093 gfx::Rect(0, 0, 50, 50); | 7093 gfx::RectF(0, 0, 50, 50); |
| 7094 sticky_pos->SetStickyPositionConstraint(sticky_position); | 7094 sticky_pos->SetStickyPositionConstraint(sticky_position); |
| 7095 | 7095 |
| 7096 root->SetBounds(gfx::Size(100, 100)); | 7096 root->SetBounds(gfx::Size(100, 100)); |
| 7097 container->SetBounds(gfx::Size(100, 100)); | 7097 container->SetBounds(gfx::Size(100, 100)); |
| 7098 scroller->SetBounds(gfx::Size(1000, 1000)); | 7098 scroller->SetBounds(gfx::Size(1000, 1000)); |
| 7099 sticky_pos->SetBounds(gfx::Size(10, 10)); | 7099 sticky_pos->SetBounds(gfx::Size(10, 10)); |
| 7100 sticky_pos->SetPosition(gfx::PointF(10, 20)); | 7100 sticky_pos->SetPosition(gfx::PointF(10, 20)); |
| 7101 | 7101 |
| 7102 ExecuteCalculateDrawProperties(root.get()); | 7102 ExecuteCalculateDrawProperties(root.get()); |
| 7103 host()->host_impl()->CreatePendingTree(); | 7103 host()->host_impl()->CreatePendingTree(); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7148 scoped_refptr<Layer> container = Layer::Create(); | 7148 scoped_refptr<Layer> container = Layer::Create(); |
| 7149 scoped_refptr<Layer> scroller = Layer::Create(); | 7149 scoped_refptr<Layer> scroller = Layer::Create(); |
| 7150 scoped_refptr<Layer> sticky_pos = Layer::Create(); | 7150 scoped_refptr<Layer> sticky_pos = Layer::Create(); |
| 7151 root->AddChild(container); | 7151 root->AddChild(container); |
| 7152 container->AddChild(scroller); | 7152 container->AddChild(scroller); |
| 7153 root->AddChild(sticky_pos); | 7153 root->AddChild(sticky_pos); |
| 7154 sticky_pos->SetScrollParent(scroller.get()); | 7154 sticky_pos->SetScrollParent(scroller.get()); |
| 7155 host()->SetRootLayer(root); | 7155 host()->SetRootLayer(root); |
| 7156 scroller->SetScrollClipLayerId(container->id()); | 7156 scroller->SetScrollClipLayerId(container->id()); |
| 7157 | 7157 |
| 7158 // The sticky layer has already been scrolled on the main thread side, and has |
| 7159 // stuck. This test then checks that further changes from cc-only scrolling |
| 7160 // are handled correctly. |
| 7158 LayerStickyPositionConstraint sticky_position; | 7161 LayerStickyPositionConstraint sticky_position; |
| 7159 sticky_position.is_sticky = true; | 7162 sticky_position.is_sticky = true; |
| 7160 sticky_position.is_anchored_top = true; | 7163 sticky_position.is_anchored_top = true; |
| 7161 sticky_position.top_offset = 10.0f; | 7164 sticky_position.top_offset = 10.0f; |
| 7162 sticky_position.parent_relative_sticky_box_offset = gfx::Point(10, 20); | 7165 sticky_position.parent_relative_sticky_box_offset = gfx::PointF(10, 20); |
| 7163 sticky_position.scroll_container_relative_sticky_box_rect = | 7166 sticky_position.scroll_container_relative_sticky_box_rect = |
| 7164 gfx::Rect(10, 20, 10, 10); | 7167 gfx::RectF(10, 20, 10, 10); |
| 7165 sticky_position.scroll_container_relative_containing_block_rect = | 7168 sticky_position.scroll_container_relative_containing_block_rect = |
| 7166 gfx::Rect(0, 0, 50, 50); | 7169 gfx::RectF(0, 0, 50, 50); |
| 7167 sticky_pos->SetStickyPositionConstraint(sticky_position); | 7170 sticky_pos->SetStickyPositionConstraint(sticky_position); |
| 7168 | 7171 |
| 7169 root->SetBounds(gfx::Size(200, 200)); | 7172 root->SetBounds(gfx::Size(200, 200)); |
| 7170 container->SetBounds(gfx::Size(100, 100)); | 7173 container->SetBounds(gfx::Size(100, 100)); |
| 7171 container->SetPosition(gfx::PointF(50, 50)); | 7174 container->SetPosition(gfx::PointF(50, 50)); |
| 7172 scroller->SetBounds(gfx::Size(1000, 1000)); | 7175 scroller->SetBounds(gfx::Size(1000, 1000)); |
| 7173 sticky_pos->SetBounds(gfx::Size(10, 10)); | 7176 sticky_pos->SetBounds(gfx::Size(10, 10)); |
| 7174 sticky_pos->SetPosition(gfx::PointF(60, 70)); | 7177 sticky_pos->SetPosition(gfx::PointF(60, 70)); |
| 7175 | 7178 |
| 7176 ExecuteCalculateDrawProperties(root.get()); | 7179 ExecuteCalculateDrawProperties(root.get()); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7225 root->AddChild(container); | 7228 root->AddChild(container); |
| 7226 container->AddChild(scroller); | 7229 container->AddChild(scroller); |
| 7227 scroller->AddChild(sticky_pos); | 7230 scroller->AddChild(sticky_pos); |
| 7228 host()->SetRootLayer(root); | 7231 host()->SetRootLayer(root); |
| 7229 scroller->SetScrollClipLayerId(container->id()); | 7232 scroller->SetScrollClipLayerId(container->id()); |
| 7230 | 7233 |
| 7231 LayerStickyPositionConstraint sticky_position; | 7234 LayerStickyPositionConstraint sticky_position; |
| 7232 sticky_position.is_sticky = true; | 7235 sticky_position.is_sticky = true; |
| 7233 sticky_position.is_anchored_bottom = true; | 7236 sticky_position.is_anchored_bottom = true; |
| 7234 sticky_position.bottom_offset = 10.0f; | 7237 sticky_position.bottom_offset = 10.0f; |
| 7235 sticky_position.parent_relative_sticky_box_offset = gfx::Point(0, 200); | 7238 sticky_position.parent_relative_sticky_box_offset = gfx::PointF(0, 200); |
| 7236 sticky_position.scroll_container_relative_sticky_box_rect = | 7239 sticky_position.scroll_container_relative_sticky_box_rect = |
| 7237 gfx::Rect(0, 200, 10, 10); | 7240 gfx::RectF(0, 200, 10, 10); |
| 7238 sticky_position.scroll_container_relative_containing_block_rect = | 7241 sticky_position.scroll_container_relative_containing_block_rect = |
| 7239 gfx::Rect(0, 0, 100, 500); | 7242 gfx::RectF(0, 0, 100, 500); |
| 7240 sticky_pos->SetStickyPositionConstraint(sticky_position); | 7243 sticky_pos->SetStickyPositionConstraint(sticky_position); |
| 7241 | 7244 |
| 7242 root->SetBounds(gfx::Size(100, 100)); | 7245 root->SetBounds(gfx::Size(100, 100)); |
| 7243 container->SetBounds(gfx::Size(100, 100)); | 7246 container->SetBounds(gfx::Size(100, 100)); |
| 7244 scroller->SetBounds(gfx::Size(100, 1000)); | 7247 scroller->SetBounds(gfx::Size(100, 1000)); |
| 7245 sticky_pos->SetBounds(gfx::Size(10, 10)); | 7248 sticky_pos->SetBounds(gfx::Size(10, 10)); |
| 7246 sticky_pos->SetPosition(gfx::PointF(0, 200)); | 7249 sticky_pos->SetPosition(gfx::PointF(0, 200)); |
| 7247 | 7250 |
| 7248 ExecuteCalculateDrawProperties(root.get()); | 7251 ExecuteCalculateDrawProperties(root.get()); |
| 7249 host()->host_impl()->CreatePendingTree(); | 7252 host()->host_impl()->CreatePendingTree(); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 7271 root->AddChild(container); | 7274 root->AddChild(container); |
| 7272 container->AddChild(scroller); | 7275 container->AddChild(scroller); |
| 7273 scroller->AddChild(sticky_pos); | 7276 scroller->AddChild(sticky_pos); |
| 7274 host()->SetRootLayer(root); | 7277 host()->SetRootLayer(root); |
| 7275 scroller->SetScrollClipLayerId(container->id()); | 7278 scroller->SetScrollClipLayerId(container->id()); |
| 7276 | 7279 |
| 7277 LayerStickyPositionConstraint sticky_position; | 7280 LayerStickyPositionConstraint sticky_position; |
| 7278 sticky_position.is_sticky = true; | 7281 sticky_position.is_sticky = true; |
| 7279 sticky_position.is_anchored_bottom = true; | 7282 sticky_position.is_anchored_bottom = true; |
| 7280 sticky_position.bottom_offset = 10.0f; | 7283 sticky_position.bottom_offset = 10.0f; |
| 7281 sticky_position.parent_relative_sticky_box_offset = gfx::Point(0, 150); | 7284 sticky_position.parent_relative_sticky_box_offset = gfx::PointF(0, 150); |
| 7282 sticky_position.scroll_container_relative_sticky_box_rect = | 7285 sticky_position.scroll_container_relative_sticky_box_rect = |
| 7283 gfx::Rect(0, 150, 10, 10); | 7286 gfx::RectF(0, 150, 10, 10); |
| 7284 sticky_position.scroll_container_relative_containing_block_rect = | 7287 sticky_position.scroll_container_relative_containing_block_rect = |
| 7285 gfx::Rect(0, 100, 50, 50); | 7288 gfx::RectF(0, 100, 50, 50); |
| 7286 sticky_pos->SetStickyPositionConstraint(sticky_position); | 7289 sticky_pos->SetStickyPositionConstraint(sticky_position); |
| 7287 | 7290 |
| 7288 root->SetBounds(gfx::Size(100, 100)); | 7291 root->SetBounds(gfx::Size(100, 100)); |
| 7289 container->SetBounds(gfx::Size(100, 100)); | 7292 container->SetBounds(gfx::Size(100, 100)); |
| 7290 scroller->SetBounds(gfx::Size(1000, 1000)); | 7293 scroller->SetBounds(gfx::Size(1000, 1000)); |
| 7291 sticky_pos->SetBounds(gfx::Size(10, 10)); | 7294 sticky_pos->SetBounds(gfx::Size(10, 10)); |
| 7292 sticky_pos->SetPosition(gfx::PointF(0, 150)); | 7295 sticky_pos->SetPosition(gfx::PointF(0, 150)); |
| 7293 | 7296 |
| 7294 ExecuteCalculateDrawProperties(root.get()); | 7297 ExecuteCalculateDrawProperties(root.get()); |
| 7295 host()->host_impl()->CreatePendingTree(); | 7298 host()->host_impl()->CreatePendingTree(); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7340 root->AddChild(scroller); | 7343 root->AddChild(scroller); |
| 7341 scroller->AddChild(sticky_pos); | 7344 scroller->AddChild(sticky_pos); |
| 7342 host()->SetRootLayer(root); | 7345 host()->SetRootLayer(root); |
| 7343 scroller->SetScrollClipLayerId(root->id()); | 7346 scroller->SetScrollClipLayerId(root->id()); |
| 7344 host()->RegisterViewportLayers(nullptr, root, scroller, nullptr); | 7347 host()->RegisterViewportLayers(nullptr, root, scroller, nullptr); |
| 7345 | 7348 |
| 7346 LayerStickyPositionConstraint sticky_position; | 7349 LayerStickyPositionConstraint sticky_position; |
| 7347 sticky_position.is_sticky = true; | 7350 sticky_position.is_sticky = true; |
| 7348 sticky_position.is_anchored_bottom = true; | 7351 sticky_position.is_anchored_bottom = true; |
| 7349 sticky_position.bottom_offset = 10.0f; | 7352 sticky_position.bottom_offset = 10.0f; |
| 7350 sticky_position.parent_relative_sticky_box_offset = gfx::Point(0, 70); | 7353 sticky_position.parent_relative_sticky_box_offset = gfx::PointF(0, 70); |
| 7351 sticky_position.scroll_container_relative_sticky_box_rect = | 7354 sticky_position.scroll_container_relative_sticky_box_rect = |
| 7352 gfx::Rect(0, 70, 10, 10); | 7355 gfx::RectF(0, 70, 10, 10); |
| 7353 sticky_position.scroll_container_relative_containing_block_rect = | 7356 sticky_position.scroll_container_relative_containing_block_rect = |
| 7354 gfx::Rect(0, 60, 100, 100); | 7357 gfx::RectF(0, 60, 100, 100); |
| 7355 sticky_pos->SetStickyPositionConstraint(sticky_position); | 7358 sticky_pos->SetStickyPositionConstraint(sticky_position); |
| 7356 | 7359 |
| 7357 root->SetBounds(gfx::Size(100, 100)); | 7360 root->SetBounds(gfx::Size(100, 100)); |
| 7358 scroller->SetBounds(gfx::Size(100, 1000)); | 7361 scroller->SetBounds(gfx::Size(100, 1000)); |
| 7359 sticky_pos->SetBounds(gfx::Size(10, 10)); | 7362 sticky_pos->SetBounds(gfx::Size(10, 10)); |
| 7360 sticky_pos->SetPosition(gfx::PointF(0, 70)); | 7363 sticky_pos->SetPosition(gfx::PointF(0, 70)); |
| 7361 | 7364 |
| 7362 ExecuteCalculateDrawProperties(root.get(), 1.f, 1.f, root.get(), | 7365 ExecuteCalculateDrawProperties(root.get(), 1.f, 1.f, root.get(), |
| 7363 scroller.get(), nullptr); | 7366 scroller.get(), nullptr); |
| 7364 host()->CommitAndCreateLayerImplTree(); | 7367 host()->CommitAndCreateLayerImplTree(); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7413 outer_viewport->AddChild(sticky_pos); | 7416 outer_viewport->AddChild(sticky_pos); |
| 7414 host()->SetRootLayer(root); | 7417 host()->SetRootLayer(root); |
| 7415 scroller->SetScrollClipLayerId(root->id()); | 7418 scroller->SetScrollClipLayerId(root->id()); |
| 7416 outer_viewport->SetScrollClipLayerId(outer_clip->id()); | 7419 outer_viewport->SetScrollClipLayerId(outer_clip->id()); |
| 7417 host()->RegisterViewportLayers(nullptr, root, scroller, outer_viewport); | 7420 host()->RegisterViewportLayers(nullptr, root, scroller, outer_viewport); |
| 7418 | 7421 |
| 7419 LayerStickyPositionConstraint sticky_position; | 7422 LayerStickyPositionConstraint sticky_position; |
| 7420 sticky_position.is_sticky = true; | 7423 sticky_position.is_sticky = true; |
| 7421 sticky_position.is_anchored_bottom = true; | 7424 sticky_position.is_anchored_bottom = true; |
| 7422 sticky_position.bottom_offset = 10.0f; | 7425 sticky_position.bottom_offset = 10.0f; |
| 7423 sticky_position.parent_relative_sticky_box_offset = gfx::Point(0, 70); | 7426 sticky_position.parent_relative_sticky_box_offset = gfx::PointF(0, 70); |
| 7424 sticky_position.scroll_container_relative_sticky_box_rect = | 7427 sticky_position.scroll_container_relative_sticky_box_rect = |
| 7425 gfx::Rect(0, 70, 10, 10); | 7428 gfx::RectF(0, 70, 10, 10); |
| 7426 sticky_position.scroll_container_relative_containing_block_rect = | 7429 sticky_position.scroll_container_relative_containing_block_rect = |
| 7427 gfx::Rect(0, 60, 100, 100); | 7430 gfx::RectF(0, 60, 100, 100); |
| 7428 sticky_pos->SetStickyPositionConstraint(sticky_position); | 7431 sticky_pos->SetStickyPositionConstraint(sticky_position); |
| 7429 | 7432 |
| 7430 root->SetBounds(gfx::Size(100, 100)); | 7433 root->SetBounds(gfx::Size(100, 100)); |
| 7431 scroller->SetBounds(gfx::Size(100, 1000)); | 7434 scroller->SetBounds(gfx::Size(100, 1000)); |
| 7432 outer_clip->SetBounds(gfx::Size(100, 100)); | 7435 outer_clip->SetBounds(gfx::Size(100, 100)); |
| 7433 sticky_pos->SetBounds(gfx::Size(10, 10)); | 7436 sticky_pos->SetBounds(gfx::Size(10, 10)); |
| 7434 sticky_pos->SetPosition(gfx::PointF(0, 70)); | 7437 sticky_pos->SetPosition(gfx::PointF(0, 70)); |
| 7435 | 7438 |
| 7436 ExecuteCalculateDrawProperties(root.get(), 1.f, 1.f, root.get(), | 7439 ExecuteCalculateDrawProperties(root.get(), 1.f, 1.f, root.get(), |
| 7437 scroller.get(), outer_viewport.get()); | 7440 scroller.get(), outer_viewport.get()); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7490 scroller->AddChild(sticky_pos); | 7493 scroller->AddChild(sticky_pos); |
| 7491 host()->SetRootLayer(root); | 7494 host()->SetRootLayer(root); |
| 7492 scroller->SetScrollClipLayerId(container->id()); | 7495 scroller->SetScrollClipLayerId(container->id()); |
| 7493 | 7496 |
| 7494 LayerStickyPositionConstraint sticky_position; | 7497 LayerStickyPositionConstraint sticky_position; |
| 7495 sticky_position.is_sticky = true; | 7498 sticky_position.is_sticky = true; |
| 7496 sticky_position.is_anchored_left = true; | 7499 sticky_position.is_anchored_left = true; |
| 7497 sticky_position.is_anchored_right = true; | 7500 sticky_position.is_anchored_right = true; |
| 7498 sticky_position.left_offset = 10.f; | 7501 sticky_position.left_offset = 10.f; |
| 7499 sticky_position.right_offset = 10.f; | 7502 sticky_position.right_offset = 10.f; |
| 7500 sticky_position.parent_relative_sticky_box_offset = gfx::Point(145, 0); | 7503 sticky_position.parent_relative_sticky_box_offset = gfx::PointF(145, 0); |
| 7501 sticky_position.scroll_container_relative_sticky_box_rect = | 7504 sticky_position.scroll_container_relative_sticky_box_rect = |
| 7502 gfx::Rect(145, 0, 10, 10); | 7505 gfx::RectF(145, 0, 10, 10); |
| 7503 sticky_position.scroll_container_relative_containing_block_rect = | 7506 sticky_position.scroll_container_relative_containing_block_rect = |
| 7504 gfx::Rect(100, 0, 100, 100); | 7507 gfx::RectF(100, 0, 100, 100); |
| 7505 sticky_pos->SetStickyPositionConstraint(sticky_position); | 7508 sticky_pos->SetStickyPositionConstraint(sticky_position); |
| 7506 | 7509 |
| 7507 root->SetBounds(gfx::Size(100, 100)); | 7510 root->SetBounds(gfx::Size(100, 100)); |
| 7508 container->SetBounds(gfx::Size(100, 100)); | 7511 container->SetBounds(gfx::Size(100, 100)); |
| 7509 scroller->SetBounds(gfx::Size(1000, 1000)); | 7512 scroller->SetBounds(gfx::Size(1000, 1000)); |
| 7510 sticky_pos->SetBounds(gfx::Size(10, 10)); | 7513 sticky_pos->SetBounds(gfx::Size(10, 10)); |
| 7511 sticky_pos->SetPosition(gfx::PointF(145, 0)); | 7514 sticky_pos->SetPosition(gfx::PointF(145, 0)); |
| 7512 | 7515 |
| 7513 ExecuteCalculateDrawProperties(root.get()); | 7516 ExecuteCalculateDrawProperties(root.get()); |
| 7514 host()->host_impl()->CreatePendingTree(); | 7517 host()->host_impl()->CreatePendingTree(); |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7593 root->AddChild(container); | 7596 root->AddChild(container); |
| 7594 container->AddChild(scroller); | 7597 container->AddChild(scroller); |
| 7595 scroller->AddChild(sticky_pos); | 7598 scroller->AddChild(sticky_pos); |
| 7596 host()->SetRootLayer(root); | 7599 host()->SetRootLayer(root); |
| 7597 scroller->SetScrollClipLayerId(container->id()); | 7600 scroller->SetScrollClipLayerId(container->id()); |
| 7598 | 7601 |
| 7599 LayerStickyPositionConstraint sticky_position; | 7602 LayerStickyPositionConstraint sticky_position; |
| 7600 sticky_position.is_sticky = true; | 7603 sticky_position.is_sticky = true; |
| 7601 sticky_position.is_anchored_top = true; | 7604 sticky_position.is_anchored_top = true; |
| 7602 sticky_position.top_offset = 10.0f; | 7605 sticky_position.top_offset = 10.0f; |
| 7603 sticky_position.parent_relative_sticky_box_offset = gfx::Point(10, 20); | 7606 sticky_position.parent_relative_sticky_box_offset = gfx::PointF(10, 20); |
| 7604 sticky_position.scroll_container_relative_sticky_box_rect = | 7607 sticky_position.scroll_container_relative_sticky_box_rect = |
| 7605 gfx::Rect(10, 20, 10, 10); | 7608 gfx::RectF(10, 20, 10, 10); |
| 7606 sticky_position.scroll_container_relative_containing_block_rect = | 7609 sticky_position.scroll_container_relative_containing_block_rect = |
| 7607 gfx::Rect(0, 0, 50, 50); | 7610 gfx::RectF(0, 0, 50, 50); |
| 7608 sticky_pos->SetStickyPositionConstraint(sticky_position); | 7611 sticky_pos->SetStickyPositionConstraint(sticky_position); |
| 7609 | 7612 |
| 7610 root->SetBounds(gfx::Size(100, 100)); | 7613 root->SetBounds(gfx::Size(100, 100)); |
| 7611 container->SetBounds(gfx::Size(100, 100)); | 7614 container->SetBounds(gfx::Size(100, 100)); |
| 7612 scroller->SetBounds(gfx::Size(1000, 1000)); | 7615 scroller->SetBounds(gfx::Size(1000, 1000)); |
| 7613 sticky_pos->SetBounds(gfx::Size(10, 10)); | 7616 sticky_pos->SetBounds(gfx::Size(10, 10)); |
| 7614 sticky_pos->SetPosition(gfx::PointF(10, 20)); | 7617 sticky_pos->SetPosition(gfx::PointF(10, 20)); |
| 7615 | 7618 |
| 7616 ExecuteCalculateDrawProperties(root.get()); | 7619 ExecuteCalculateDrawProperties(root.get()); |
| 7617 host()->host_impl()->CreatePendingTree(); | 7620 host()->host_impl()->CreatePendingTree(); |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7688 host()->SetRootLayer(root); | 7691 host()->SetRootLayer(root); |
| 7689 scroller->SetScrollClipLayerId(container->id()); | 7692 scroller->SetScrollClipLayerId(container->id()); |
| 7690 | 7693 |
| 7691 LayerStickyPositionConstraint sticky_position; | 7694 LayerStickyPositionConstraint sticky_position; |
| 7692 sticky_position.is_sticky = true; | 7695 sticky_position.is_sticky = true; |
| 7693 sticky_position.is_anchored_top = true; | 7696 sticky_position.is_anchored_top = true; |
| 7694 sticky_position.top_offset = 10.0f; | 7697 sticky_position.top_offset = 10.0f; |
| 7695 // The sticky position layer is only offset by (0, 10) from its parent | 7698 // The sticky position layer is only offset by (0, 10) from its parent |
| 7696 // layer, this position is used to determine the offset applied by the main | 7699 // layer, this position is used to determine the offset applied by the main |
| 7697 // thread. | 7700 // thread. |
| 7698 sticky_position.parent_relative_sticky_box_offset = gfx::Point(0, 10); | 7701 sticky_position.parent_relative_sticky_box_offset = gfx::PointF(0, 10); |
| 7699 sticky_position.scroll_container_relative_sticky_box_rect = | 7702 sticky_position.scroll_container_relative_sticky_box_rect = |
| 7700 gfx::Rect(20, 30, 10, 10); | 7703 gfx::RectF(20, 30, 10, 10); |
| 7701 sticky_position.scroll_container_relative_containing_block_rect = | 7704 sticky_position.scroll_container_relative_containing_block_rect = |
| 7702 gfx::Rect(20, 20, 30, 30); | 7705 gfx::RectF(20, 20, 30, 30); |
| 7703 sticky_pos->SetStickyPositionConstraint(sticky_position); | 7706 sticky_pos->SetStickyPositionConstraint(sticky_position); |
| 7704 | 7707 |
| 7705 root->SetBounds(gfx::Size(100, 100)); | 7708 root->SetBounds(gfx::Size(100, 100)); |
| 7706 container->SetBounds(gfx::Size(100, 100)); | 7709 container->SetBounds(gfx::Size(100, 100)); |
| 7707 scroller->SetBounds(gfx::Size(1000, 1000)); | 7710 scroller->SetBounds(gfx::Size(1000, 1000)); |
| 7708 sticky_container->SetPosition(gfx::PointF(20, 20)); | 7711 sticky_container->SetPosition(gfx::PointF(20, 20)); |
| 7709 sticky_container->SetBounds(gfx::Size(30, 30)); | 7712 sticky_container->SetBounds(gfx::Size(30, 30)); |
| 7710 sticky_pos->SetBounds(gfx::Size(10, 10)); | 7713 sticky_pos->SetBounds(gfx::Size(10, 10)); |
| 7711 sticky_pos->SetPosition(gfx::PointF(0, 10)); | 7714 sticky_pos->SetPosition(gfx::PointF(0, 10)); |
| 7712 | 7715 |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7788 host()->SetRootLayer(root); | 7791 host()->SetRootLayer(root); |
| 7789 scroller->SetScrollClipLayerId(container->id()); | 7792 scroller->SetScrollClipLayerId(container->id()); |
| 7790 gfx::Transform t; | 7793 gfx::Transform t; |
| 7791 t.Scale(2, 2); | 7794 t.Scale(2, 2); |
| 7792 sticky_pos->SetTransform(t); | 7795 sticky_pos->SetTransform(t); |
| 7793 | 7796 |
| 7794 LayerStickyPositionConstraint sticky_position; | 7797 LayerStickyPositionConstraint sticky_position; |
| 7795 sticky_position.is_sticky = true; | 7798 sticky_position.is_sticky = true; |
| 7796 sticky_position.is_anchored_top = true; | 7799 sticky_position.is_anchored_top = true; |
| 7797 sticky_position.top_offset = 0.0f; | 7800 sticky_position.top_offset = 0.0f; |
| 7798 sticky_position.parent_relative_sticky_box_offset = gfx::Point(0, 20); | 7801 sticky_position.parent_relative_sticky_box_offset = gfx::PointF(0, 20); |
| 7799 sticky_position.scroll_container_relative_sticky_box_rect = | 7802 sticky_position.scroll_container_relative_sticky_box_rect = |
| 7800 gfx::Rect(0, 20, 10, 10); | 7803 gfx::RectF(0, 20, 10, 10); |
| 7801 sticky_position.scroll_container_relative_containing_block_rect = | 7804 sticky_position.scroll_container_relative_containing_block_rect = |
| 7802 gfx::Rect(0, 0, 50, 50); | 7805 gfx::RectF(0, 0, 50, 50); |
| 7803 sticky_pos->SetStickyPositionConstraint(sticky_position); | 7806 sticky_pos->SetStickyPositionConstraint(sticky_position); |
| 7804 | 7807 |
| 7805 root->SetBounds(gfx::Size(100, 100)); | 7808 root->SetBounds(gfx::Size(100, 100)); |
| 7806 container->SetBounds(gfx::Size(100, 100)); | 7809 container->SetBounds(gfx::Size(100, 100)); |
| 7807 scroller->SetBounds(gfx::Size(1000, 1000)); | 7810 scroller->SetBounds(gfx::Size(1000, 1000)); |
| 7808 sticky_pos->SetBounds(gfx::Size(10, 10)); | 7811 sticky_pos->SetBounds(gfx::Size(10, 10)); |
| 7809 sticky_pos->SetPosition(gfx::PointF(0, 20)); | 7812 sticky_pos->SetPosition(gfx::PointF(0, 20)); |
| 7810 | 7813 |
| 7811 ExecuteCalculateDrawProperties(root.get()); | 7814 ExecuteCalculateDrawProperties(root.get()); |
| 7812 host()->host_impl()->CreatePendingTree(); | 7815 host()->host_impl()->CreatePendingTree(); |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7867 host()->SetRootLayer(root); | 7870 host()->SetRootLayer(root); |
| 7868 scroller->SetScrollClipLayerId(container->id()); | 7871 scroller->SetScrollClipLayerId(container->id()); |
| 7869 gfx::Transform t; | 7872 gfx::Transform t; |
| 7870 t.Scale(2, 2); | 7873 t.Scale(2, 2); |
| 7871 sticky_container->SetTransform(t); | 7874 sticky_container->SetTransform(t); |
| 7872 | 7875 |
| 7873 LayerStickyPositionConstraint sticky_position; | 7876 LayerStickyPositionConstraint sticky_position; |
| 7874 sticky_position.is_sticky = true; | 7877 sticky_position.is_sticky = true; |
| 7875 sticky_position.is_anchored_top = true; | 7878 sticky_position.is_anchored_top = true; |
| 7876 sticky_position.top_offset = 0.0f; | 7879 sticky_position.top_offset = 0.0f; |
| 7877 sticky_position.parent_relative_sticky_box_offset = gfx::Point(0, 20); | 7880 sticky_position.parent_relative_sticky_box_offset = gfx::PointF(0, 20); |
| 7878 sticky_position.scroll_container_relative_sticky_box_rect = | 7881 sticky_position.scroll_container_relative_sticky_box_rect = |
| 7879 gfx::Rect(0, 20, 10, 10); | 7882 gfx::RectF(0, 20, 10, 10); |
| 7880 sticky_position.scroll_container_relative_containing_block_rect = | 7883 sticky_position.scroll_container_relative_containing_block_rect = |
| 7881 gfx::Rect(0, 0, 50, 50); | 7884 gfx::RectF(0, 0, 50, 50); |
| 7882 sticky_pos->SetStickyPositionConstraint(sticky_position); | 7885 sticky_pos->SetStickyPositionConstraint(sticky_position); |
| 7883 | 7886 |
| 7884 root->SetBounds(gfx::Size(100, 100)); | 7887 root->SetBounds(gfx::Size(100, 100)); |
| 7885 container->SetBounds(gfx::Size(100, 100)); | 7888 container->SetBounds(gfx::Size(100, 100)); |
| 7886 scroller->SetBounds(gfx::Size(1000, 1000)); | 7889 scroller->SetBounds(gfx::Size(1000, 1000)); |
| 7887 sticky_container->SetBounds(gfx::Size(50, 50)); | 7890 sticky_container->SetBounds(gfx::Size(50, 50)); |
| 7888 sticky_pos->SetBounds(gfx::Size(10, 10)); | 7891 sticky_pos->SetBounds(gfx::Size(10, 10)); |
| 7889 sticky_pos->SetPosition(gfx::PointF(0, 20)); | 7892 sticky_pos->SetPosition(gfx::PointF(0, 20)); |
| 7890 | 7893 |
| 7891 ExecuteCalculateDrawProperties(root.get()); | 7894 ExecuteCalculateDrawProperties(root.get()); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7925 sticky_pos_impl->ScreenSpaceTransform().To2dTranslation()); | 7928 sticky_pos_impl->ScreenSpaceTransform().To2dTranslation()); |
| 7926 | 7929 |
| 7927 // Scroll past the end of the sticky container. | 7930 // Scroll past the end of the sticky container. |
| 7928 SetScrollOffsetDelta(scroller_impl, gfx::Vector2dF(0.f, 50.f)); | 7931 SetScrollOffsetDelta(scroller_impl, gfx::Vector2dF(0.f, 50.f)); |
| 7929 ExecuteCalculateDrawProperties(root_impl); | 7932 ExecuteCalculateDrawProperties(root_impl); |
| 7930 EXPECT_VECTOR2DF_EQ( | 7933 EXPECT_VECTOR2DF_EQ( |
| 7931 gfx::Vector2dF(0.f, 30.f), | 7934 gfx::Vector2dF(0.f, 30.f), |
| 7932 sticky_pos_impl->ScreenSpaceTransform().To2dTranslation()); | 7935 sticky_pos_impl->ScreenSpaceTransform().To2dTranslation()); |
| 7933 } | 7936 } |
| 7934 | 7937 |
| 7938 TEST_F(LayerTreeHostCommonTest, StickyPositionNested) { |
| 7939 scoped_refptr<Layer> root = Layer::Create(); |
| 7940 scoped_refptr<Layer> container = Layer::Create(); |
| 7941 scoped_refptr<Layer> scroller = Layer::Create(); |
| 7942 scoped_refptr<Layer> outer_sticky = Layer::Create(); |
| 7943 scoped_refptr<Layer> inner_sticky = Layer::Create(); |
| 7944 |
| 7945 root->AddChild(container); |
| 7946 container->AddChild(scroller); |
| 7947 scroller->AddChild(outer_sticky); |
| 7948 outer_sticky->AddChild(inner_sticky); |
| 7949 host()->SetRootLayer(root); |
| 7950 scroller->SetScrollClipLayerId(container->id()); |
| 7951 |
| 7952 root->SetBounds(gfx::Size(100, 100)); |
| 7953 container->SetBounds(gfx::Size(100, 100)); |
| 7954 scroller->SetBounds(gfx::Size(100, 1000)); |
| 7955 outer_sticky->SetBounds(gfx::Size(10, 50)); |
| 7956 outer_sticky->SetPosition(gfx::PointF(0, 50)); |
| 7957 inner_sticky->SetBounds(gfx::Size(10, 10)); |
| 7958 inner_sticky->SetPosition(gfx::PointF(0, 0)); |
| 7959 |
| 7960 LayerStickyPositionConstraint outer_sticky_pos; |
| 7961 outer_sticky_pos.is_sticky = true; |
| 7962 outer_sticky_pos.is_anchored_top = true; |
| 7963 outer_sticky_pos.top_offset = 10.0f; |
| 7964 outer_sticky_pos.parent_relative_sticky_box_offset = gfx::PointF(0, 50); |
| 7965 outer_sticky_pos.scroll_container_relative_sticky_box_rect = |
| 7966 gfx::RectF(0, 50, 10, 50); |
| 7967 outer_sticky_pos.scroll_container_relative_containing_block_rect = |
| 7968 gfx::RectF(0, 0, 50, 400); |
| 7969 outer_sticky->SetStickyPositionConstraint(outer_sticky_pos); |
| 7970 |
| 7971 LayerStickyPositionConstraint inner_sticky_pos; |
| 7972 inner_sticky_pos.is_sticky = true; |
| 7973 inner_sticky_pos.is_anchored_top = true; |
| 7974 inner_sticky_pos.top_offset = 25.0f; |
| 7975 inner_sticky_pos.parent_relative_sticky_box_offset = gfx::PointF(0, 0); |
| 7976 inner_sticky_pos.scroll_container_relative_sticky_box_rect = |
| 7977 gfx::RectF(0, 50, 10, 10); |
| 7978 inner_sticky_pos.scroll_container_relative_containing_block_rect = |
| 7979 gfx::RectF(0, 50, 10, 50); |
| 7980 inner_sticky_pos.nearest_layer_shifting_containing_block = outer_sticky->id(); |
| 7981 inner_sticky->SetStickyPositionConstraint(inner_sticky_pos); |
| 7982 |
| 7983 ExecuteCalculateDrawProperties(root.get()); |
| 7984 host()->host_impl()->CreatePendingTree(); |
| 7985 host()->CommitAndCreatePendingTree(); |
| 7986 host()->host_impl()->ActivateSyncTree(); |
| 7987 LayerTreeImpl* layer_tree_impl = host()->host_impl()->active_tree(); |
| 7988 |
| 7989 LayerImpl* root_impl = layer_tree_impl->LayerById(root->id()); |
| 7990 LayerImpl* scroller_impl = layer_tree_impl->LayerById(scroller->id()); |
| 7991 LayerImpl* outer_sticky_impl = layer_tree_impl->LayerById(outer_sticky->id()); |
| 7992 LayerImpl* inner_sticky_impl = layer_tree_impl->LayerById(inner_sticky->id()); |
| 7993 |
| 7994 ExecuteCalculateDrawProperties(root_impl); |
| 7995 |
| 7996 // Before any scrolling is done, the sticky elements should still be at their |
| 7997 // original positions. |
| 7998 EXPECT_VECTOR2DF_EQ( |
| 7999 gfx::Vector2dF(0.f, 50.f), |
| 8000 outer_sticky_impl->ScreenSpaceTransform().To2dTranslation()); |
| 8001 EXPECT_VECTOR2DF_EQ( |
| 8002 gfx::Vector2dF(0.f, 50.f), |
| 8003 inner_sticky_impl->ScreenSpaceTransform().To2dTranslation()); |
| 8004 |
| 8005 // Scroll less than the sticking point. Both sticky elements should move with |
| 8006 // scroll as we haven't gotten to the sticky item locations yet. |
| 8007 SetScrollOffsetDelta(scroller_impl, gfx::Vector2dF(0.f, 5.f)); |
| 8008 ExecuteCalculateDrawProperties(root_impl); |
| 8009 EXPECT_VECTOR2DF_EQ( |
| 8010 gfx::Vector2dF(0.f, 45.f), |
| 8011 outer_sticky_impl->ScreenSpaceTransform().To2dTranslation()); |
| 8012 EXPECT_VECTOR2DF_EQ( |
| 8013 gfx::Vector2dF(0.f, 45.f), |
| 8014 inner_sticky_impl->ScreenSpaceTransform().To2dTranslation()); |
| 8015 |
| 8016 // Scroll such that the inner sticky should stick, but the outer one should |
| 8017 // keep going as it hasn't reached its position yet. |
| 8018 SetScrollOffsetDelta(scroller_impl, gfx::Vector2dF(0.f, 30.f)); |
| 8019 ExecuteCalculateDrawProperties(root_impl); |
| 8020 EXPECT_VECTOR2DF_EQ( |
| 8021 gfx::Vector2dF(0.f, 20.f), |
| 8022 outer_sticky_impl->ScreenSpaceTransform().To2dTranslation()); |
| 8023 EXPECT_VECTOR2DF_EQ( |
| 8024 gfx::Vector2dF(0.f, 25.f), |
| 8025 inner_sticky_impl->ScreenSpaceTransform().To2dTranslation()); |
| 8026 |
| 8027 // Keep going, both should stick. |
| 8028 SetScrollOffsetDelta(scroller_impl, gfx::Vector2dF(0.f, 100.f)); |
| 8029 ExecuteCalculateDrawProperties(root_impl); |
| 8030 EXPECT_VECTOR2DF_EQ( |
| 8031 gfx::Vector2dF(0.f, 10.f), |
| 8032 outer_sticky_impl->ScreenSpaceTransform().To2dTranslation()); |
| 8033 EXPECT_VECTOR2DF_EQ( |
| 8034 gfx::Vector2dF(0.f, 25.f), |
| 8035 inner_sticky_impl->ScreenSpaceTransform().To2dTranslation()); |
| 8036 } |
| 8037 |
| 7935 TEST_F(LayerTreeHostCommonTest, NonFlatContainerForFixedPosLayer) { | 8038 TEST_F(LayerTreeHostCommonTest, NonFlatContainerForFixedPosLayer) { |
| 7936 scoped_refptr<Layer> root = Layer::Create(); | 8039 scoped_refptr<Layer> root = Layer::Create(); |
| 7937 scoped_refptr<Layer> container = Layer::Create(); | 8040 scoped_refptr<Layer> container = Layer::Create(); |
| 7938 scoped_refptr<Layer> scroller = Layer::Create(); | 8041 scoped_refptr<Layer> scroller = Layer::Create(); |
| 7939 scoped_refptr<Layer> fixed_pos = Layer::Create(); | 8042 scoped_refptr<Layer> fixed_pos = Layer::Create(); |
| 7940 | 8043 |
| 7941 scroller->SetIsContainerForFixedPositionLayers(true); | 8044 scroller->SetIsContainerForFixedPositionLayers(true); |
| 7942 root->AddChild(container); | 8045 root->AddChild(container); |
| 7943 container->AddChild(scroller); | 8046 container->AddChild(scroller); |
| 7944 scroller->AddChild(fixed_pos); | 8047 scroller->AddChild(fixed_pos); |
| (...skipping 2845 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10790 EXPECT_EQ(scroll_child6.id, grand_child10->scroll_tree_index()); | 10893 EXPECT_EQ(scroll_child6.id, grand_child10->scroll_tree_index()); |
| 10791 EXPECT_EQ(scroll_root1.id, parent3->scroll_tree_index()); | 10894 EXPECT_EQ(scroll_root1.id, parent3->scroll_tree_index()); |
| 10792 EXPECT_EQ(scroll_child7.id, child8->scroll_tree_index()); | 10895 EXPECT_EQ(scroll_child7.id, child8->scroll_tree_index()); |
| 10793 EXPECT_EQ(scroll_root1.id, parent4->scroll_tree_index()); | 10896 EXPECT_EQ(scroll_root1.id, parent4->scroll_tree_index()); |
| 10794 EXPECT_EQ(scroll_root1.id, child9->scroll_tree_index()); | 10897 EXPECT_EQ(scroll_root1.id, child9->scroll_tree_index()); |
| 10795 EXPECT_EQ(scroll_root1.id, grand_child12->scroll_tree_index()); | 10898 EXPECT_EQ(scroll_root1.id, grand_child12->scroll_tree_index()); |
| 10796 } | 10899 } |
| 10797 | 10900 |
| 10798 } // namespace | 10901 } // namespace |
| 10799 } // namespace cc | 10902 } // namespace cc |
| OLD | NEW |