Chromium Code Reviews| 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 7056 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 7067 root->AddChild(container); | 7067 root->AddChild(container); |
| 7068 container->AddChild(scroller); | 7068 container->AddChild(scroller); |
| 7069 scroller->AddChild(sticky_pos); | 7069 scroller->AddChild(sticky_pos); |
| 7070 host()->SetRootLayer(root); | 7070 host()->SetRootLayer(root); |
| 7071 scroller->SetScrollClipLayerId(container->id()); | 7071 scroller->SetScrollClipLayerId(container->id()); |
| 7072 | 7072 |
| 7073 LayerStickyPositionConstraint sticky_position; | 7073 LayerStickyPositionConstraint sticky_position; |
| 7074 sticky_position.is_sticky = true; | 7074 sticky_position.is_sticky = true; |
| 7075 sticky_position.is_anchored_top = true; | 7075 sticky_position.is_anchored_top = true; |
| 7076 sticky_position.top_offset = 10.0f; | 7076 sticky_position.top_offset = 10.0f; |
| 7077 sticky_position.parent_relative_sticky_box_offset = gfx::Point(10, 20); | 7077 sticky_position.parent_relative_sticky_box_offset = gfx::PointF(10, 20); |
| 7078 sticky_position.scroll_container_relative_sticky_box_rect = | 7078 sticky_position.scroll_container_relative_sticky_box_rect = |
| 7079 gfx::Rect(10, 20, 10, 10); | 7079 gfx::RectF(10, 20, 10, 10); |
| 7080 sticky_position.scroll_container_relative_containing_block_rect = | 7080 sticky_position.scroll_container_relative_containing_block_rect = |
| 7081 gfx::Rect(0, 0, 50, 50); | 7081 gfx::RectF(0, 0, 50, 50); |
| 7082 sticky_pos->SetStickyPositionConstraint(sticky_position); | 7082 sticky_pos->SetStickyPositionConstraint(sticky_position); |
| 7083 | 7083 |
| 7084 root->SetBounds(gfx::Size(100, 100)); | 7084 root->SetBounds(gfx::Size(100, 100)); |
| 7085 container->SetBounds(gfx::Size(100, 100)); | 7085 container->SetBounds(gfx::Size(100, 100)); |
| 7086 scroller->SetBounds(gfx::Size(1000, 1000)); | 7086 scroller->SetBounds(gfx::Size(1000, 1000)); |
| 7087 sticky_pos->SetBounds(gfx::Size(10, 10)); | 7087 sticky_pos->SetBounds(gfx::Size(10, 10)); |
| 7088 sticky_pos->SetPosition(gfx::PointF(10, 20)); | 7088 sticky_pos->SetPosition(gfx::PointF(10, 20)); |
| 7089 | 7089 |
| 7090 ExecuteCalculateDrawProperties(root.get()); | 7090 ExecuteCalculateDrawProperties(root.get()); |
| 7091 host()->host_impl()->CreatePendingTree(); | 7091 host()->host_impl()->CreatePendingTree(); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 7136 scoped_refptr<Layer> container = Layer::Create(); | 7136 scoped_refptr<Layer> container = Layer::Create(); |
| 7137 scoped_refptr<Layer> scroller = Layer::Create(); | 7137 scoped_refptr<Layer> scroller = Layer::Create(); |
| 7138 scoped_refptr<Layer> sticky_pos = Layer::Create(); | 7138 scoped_refptr<Layer> sticky_pos = Layer::Create(); |
| 7139 root->AddChild(container); | 7139 root->AddChild(container); |
| 7140 container->AddChild(scroller); | 7140 container->AddChild(scroller); |
| 7141 root->AddChild(sticky_pos); | 7141 root->AddChild(sticky_pos); |
| 7142 sticky_pos->SetScrollParent(scroller.get()); | 7142 sticky_pos->SetScrollParent(scroller.get()); |
| 7143 host()->SetRootLayer(root); | 7143 host()->SetRootLayer(root); |
| 7144 scroller->SetScrollClipLayerId(container->id()); | 7144 scroller->SetScrollClipLayerId(container->id()); |
| 7145 | 7145 |
| 7146 // The sticky layer has already been scrolled on the main thread side, and has | |
| 7147 // stuck. This test then checks that further changes from cc-only scrolling | |
| 7148 // are handled correctly. | |
| 7146 LayerStickyPositionConstraint sticky_position; | 7149 LayerStickyPositionConstraint sticky_position; |
| 7147 sticky_position.is_sticky = true; | 7150 sticky_position.is_sticky = true; |
| 7148 sticky_position.is_anchored_top = true; | 7151 sticky_position.is_anchored_top = true; |
| 7149 sticky_position.top_offset = 10.0f; | 7152 sticky_position.top_offset = 10.0f; |
| 7150 sticky_position.parent_relative_sticky_box_offset = gfx::Point(10, 20); | 7153 sticky_position.parent_relative_sticky_box_offset = gfx::PointF(10, 20); |
| 7151 sticky_position.scroll_container_relative_sticky_box_rect = | 7154 sticky_position.scroll_container_relative_sticky_box_rect = |
| 7152 gfx::Rect(10, 20, 10, 10); | 7155 gfx::RectF(10, 20, 10, 10); |
| 7153 sticky_position.scroll_container_relative_containing_block_rect = | 7156 sticky_position.scroll_container_relative_containing_block_rect = |
| 7154 gfx::Rect(0, 0, 50, 50); | 7157 gfx::RectF(0, 0, 50, 50); |
| 7155 sticky_pos->SetStickyPositionConstraint(sticky_position); | 7158 sticky_pos->SetStickyPositionConstraint(sticky_position); |
| 7156 | 7159 |
| 7157 root->SetBounds(gfx::Size(200, 200)); | 7160 root->SetBounds(gfx::Size(200, 200)); |
| 7158 container->SetBounds(gfx::Size(100, 100)); | 7161 container->SetBounds(gfx::Size(100, 100)); |
| 7159 container->SetPosition(gfx::PointF(50, 50)); | 7162 container->SetPosition(gfx::PointF(50, 50)); |
| 7160 scroller->SetBounds(gfx::Size(1000, 1000)); | 7163 scroller->SetBounds(gfx::Size(1000, 1000)); |
| 7161 sticky_pos->SetBounds(gfx::Size(10, 10)); | 7164 sticky_pos->SetBounds(gfx::Size(10, 10)); |
| 7162 sticky_pos->SetPosition(gfx::PointF(60, 70)); | 7165 sticky_pos->SetPosition(gfx::PointF(60, 70)); |
| 7163 | 7166 |
| 7164 ExecuteCalculateDrawProperties(root.get()); | 7167 ExecuteCalculateDrawProperties(root.get()); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 7213 root->AddChild(container); | 7216 root->AddChild(container); |
| 7214 container->AddChild(scroller); | 7217 container->AddChild(scroller); |
| 7215 scroller->AddChild(sticky_pos); | 7218 scroller->AddChild(sticky_pos); |
| 7216 host()->SetRootLayer(root); | 7219 host()->SetRootLayer(root); |
| 7217 scroller->SetScrollClipLayerId(container->id()); | 7220 scroller->SetScrollClipLayerId(container->id()); |
| 7218 | 7221 |
| 7219 LayerStickyPositionConstraint sticky_position; | 7222 LayerStickyPositionConstraint sticky_position; |
| 7220 sticky_position.is_sticky = true; | 7223 sticky_position.is_sticky = true; |
| 7221 sticky_position.is_anchored_bottom = true; | 7224 sticky_position.is_anchored_bottom = true; |
| 7222 sticky_position.bottom_offset = 10.0f; | 7225 sticky_position.bottom_offset = 10.0f; |
| 7223 sticky_position.parent_relative_sticky_box_offset = gfx::Point(0, 200); | 7226 sticky_position.parent_relative_sticky_box_offset = gfx::PointF(0, 200); |
| 7224 sticky_position.scroll_container_relative_sticky_box_rect = | 7227 sticky_position.scroll_container_relative_sticky_box_rect = |
| 7225 gfx::Rect(0, 200, 10, 10); | 7228 gfx::RectF(0, 200, 10, 10); |
| 7226 sticky_position.scroll_container_relative_containing_block_rect = | 7229 sticky_position.scroll_container_relative_containing_block_rect = |
| 7227 gfx::Rect(0, 0, 100, 500); | 7230 gfx::RectF(0, 0, 100, 500); |
| 7228 sticky_pos->SetStickyPositionConstraint(sticky_position); | 7231 sticky_pos->SetStickyPositionConstraint(sticky_position); |
| 7229 | 7232 |
| 7230 root->SetBounds(gfx::Size(100, 100)); | 7233 root->SetBounds(gfx::Size(100, 100)); |
| 7231 container->SetBounds(gfx::Size(100, 100)); | 7234 container->SetBounds(gfx::Size(100, 100)); |
| 7232 scroller->SetBounds(gfx::Size(100, 1000)); | 7235 scroller->SetBounds(gfx::Size(100, 1000)); |
| 7233 sticky_pos->SetBounds(gfx::Size(10, 10)); | 7236 sticky_pos->SetBounds(gfx::Size(10, 10)); |
| 7234 sticky_pos->SetPosition(gfx::PointF(0, 200)); | 7237 sticky_pos->SetPosition(gfx::PointF(0, 200)); |
| 7235 | 7238 |
| 7236 ExecuteCalculateDrawProperties(root.get()); | 7239 ExecuteCalculateDrawProperties(root.get()); |
| 7237 host()->host_impl()->CreatePendingTree(); | 7240 host()->host_impl()->CreatePendingTree(); |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 7259 root->AddChild(container); | 7262 root->AddChild(container); |
| 7260 container->AddChild(scroller); | 7263 container->AddChild(scroller); |
| 7261 scroller->AddChild(sticky_pos); | 7264 scroller->AddChild(sticky_pos); |
| 7262 host()->SetRootLayer(root); | 7265 host()->SetRootLayer(root); |
| 7263 scroller->SetScrollClipLayerId(container->id()); | 7266 scroller->SetScrollClipLayerId(container->id()); |
| 7264 | 7267 |
| 7265 LayerStickyPositionConstraint sticky_position; | 7268 LayerStickyPositionConstraint sticky_position; |
| 7266 sticky_position.is_sticky = true; | 7269 sticky_position.is_sticky = true; |
| 7267 sticky_position.is_anchored_bottom = true; | 7270 sticky_position.is_anchored_bottom = true; |
| 7268 sticky_position.bottom_offset = 10.0f; | 7271 sticky_position.bottom_offset = 10.0f; |
| 7269 sticky_position.parent_relative_sticky_box_offset = gfx::Point(0, 150); | 7272 sticky_position.parent_relative_sticky_box_offset = gfx::PointF(0, 150); |
| 7270 sticky_position.scroll_container_relative_sticky_box_rect = | 7273 sticky_position.scroll_container_relative_sticky_box_rect = |
| 7271 gfx::Rect(0, 150, 10, 10); | 7274 gfx::RectF(0, 150, 10, 10); |
| 7272 sticky_position.scroll_container_relative_containing_block_rect = | 7275 sticky_position.scroll_container_relative_containing_block_rect = |
| 7273 gfx::Rect(0, 100, 50, 50); | 7276 gfx::RectF(0, 100, 50, 50); |
| 7274 sticky_pos->SetStickyPositionConstraint(sticky_position); | 7277 sticky_pos->SetStickyPositionConstraint(sticky_position); |
| 7275 | 7278 |
| 7276 root->SetBounds(gfx::Size(100, 100)); | 7279 root->SetBounds(gfx::Size(100, 100)); |
| 7277 container->SetBounds(gfx::Size(100, 100)); | 7280 container->SetBounds(gfx::Size(100, 100)); |
| 7278 scroller->SetBounds(gfx::Size(1000, 1000)); | 7281 scroller->SetBounds(gfx::Size(1000, 1000)); |
| 7279 sticky_pos->SetBounds(gfx::Size(10, 10)); | 7282 sticky_pos->SetBounds(gfx::Size(10, 10)); |
| 7280 sticky_pos->SetPosition(gfx::PointF(0, 150)); | 7283 sticky_pos->SetPosition(gfx::PointF(0, 150)); |
| 7281 | 7284 |
| 7282 ExecuteCalculateDrawProperties(root.get()); | 7285 ExecuteCalculateDrawProperties(root.get()); |
| 7283 host()->host_impl()->CreatePendingTree(); | 7286 host()->host_impl()->CreatePendingTree(); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 7328 root->AddChild(scroller); | 7331 root->AddChild(scroller); |
| 7329 scroller->AddChild(sticky_pos); | 7332 scroller->AddChild(sticky_pos); |
| 7330 host()->SetRootLayer(root); | 7333 host()->SetRootLayer(root); |
| 7331 scroller->SetScrollClipLayerId(root->id()); | 7334 scroller->SetScrollClipLayerId(root->id()); |
| 7332 host()->RegisterViewportLayers(nullptr, root, scroller, nullptr); | 7335 host()->RegisterViewportLayers(nullptr, root, scroller, nullptr); |
| 7333 | 7336 |
| 7334 LayerStickyPositionConstraint sticky_position; | 7337 LayerStickyPositionConstraint sticky_position; |
| 7335 sticky_position.is_sticky = true; | 7338 sticky_position.is_sticky = true; |
| 7336 sticky_position.is_anchored_bottom = true; | 7339 sticky_position.is_anchored_bottom = true; |
| 7337 sticky_position.bottom_offset = 10.0f; | 7340 sticky_position.bottom_offset = 10.0f; |
| 7338 sticky_position.parent_relative_sticky_box_offset = gfx::Point(0, 70); | 7341 sticky_position.parent_relative_sticky_box_offset = gfx::PointF(0, 70); |
| 7339 sticky_position.scroll_container_relative_sticky_box_rect = | 7342 sticky_position.scroll_container_relative_sticky_box_rect = |
| 7340 gfx::Rect(0, 70, 10, 10); | 7343 gfx::RectF(0, 70, 10, 10); |
| 7341 sticky_position.scroll_container_relative_containing_block_rect = | 7344 sticky_position.scroll_container_relative_containing_block_rect = |
| 7342 gfx::Rect(0, 60, 100, 100); | 7345 gfx::RectF(0, 60, 100, 100); |
| 7343 sticky_pos->SetStickyPositionConstraint(sticky_position); | 7346 sticky_pos->SetStickyPositionConstraint(sticky_position); |
| 7344 | 7347 |
| 7345 root->SetBounds(gfx::Size(100, 100)); | 7348 root->SetBounds(gfx::Size(100, 100)); |
| 7346 scroller->SetBounds(gfx::Size(100, 1000)); | 7349 scroller->SetBounds(gfx::Size(100, 1000)); |
| 7347 sticky_pos->SetBounds(gfx::Size(10, 10)); | 7350 sticky_pos->SetBounds(gfx::Size(10, 10)); |
| 7348 sticky_pos->SetPosition(gfx::PointF(0, 70)); | 7351 sticky_pos->SetPosition(gfx::PointF(0, 70)); |
| 7349 | 7352 |
| 7350 ExecuteCalculateDrawProperties(root.get(), 1.f, 1.f, root.get(), | 7353 ExecuteCalculateDrawProperties(root.get(), 1.f, 1.f, root.get(), |
| 7351 scroller.get(), nullptr); | 7354 scroller.get(), nullptr); |
| 7352 host()->CommitAndCreateLayerImplTree(); | 7355 host()->CommitAndCreateLayerImplTree(); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 7401 outer_viewport->AddChild(sticky_pos); | 7404 outer_viewport->AddChild(sticky_pos); |
| 7402 host()->SetRootLayer(root); | 7405 host()->SetRootLayer(root); |
| 7403 scroller->SetScrollClipLayerId(root->id()); | 7406 scroller->SetScrollClipLayerId(root->id()); |
| 7404 outer_viewport->SetScrollClipLayerId(outer_clip->id()); | 7407 outer_viewport->SetScrollClipLayerId(outer_clip->id()); |
| 7405 host()->RegisterViewportLayers(nullptr, root, scroller, outer_viewport); | 7408 host()->RegisterViewportLayers(nullptr, root, scroller, outer_viewport); |
| 7406 | 7409 |
| 7407 LayerStickyPositionConstraint sticky_position; | 7410 LayerStickyPositionConstraint sticky_position; |
| 7408 sticky_position.is_sticky = true; | 7411 sticky_position.is_sticky = true; |
| 7409 sticky_position.is_anchored_bottom = true; | 7412 sticky_position.is_anchored_bottom = true; |
| 7410 sticky_position.bottom_offset = 10.0f; | 7413 sticky_position.bottom_offset = 10.0f; |
| 7411 sticky_position.parent_relative_sticky_box_offset = gfx::Point(0, 70); | 7414 sticky_position.parent_relative_sticky_box_offset = gfx::PointF(0, 70); |
| 7412 sticky_position.scroll_container_relative_sticky_box_rect = | 7415 sticky_position.scroll_container_relative_sticky_box_rect = |
| 7413 gfx::Rect(0, 70, 10, 10); | 7416 gfx::RectF(0, 70, 10, 10); |
| 7414 sticky_position.scroll_container_relative_containing_block_rect = | 7417 sticky_position.scroll_container_relative_containing_block_rect = |
| 7415 gfx::Rect(0, 60, 100, 100); | 7418 gfx::RectF(0, 60, 100, 100); |
| 7416 sticky_pos->SetStickyPositionConstraint(sticky_position); | 7419 sticky_pos->SetStickyPositionConstraint(sticky_position); |
| 7417 | 7420 |
| 7418 root->SetBounds(gfx::Size(100, 100)); | 7421 root->SetBounds(gfx::Size(100, 100)); |
| 7419 scroller->SetBounds(gfx::Size(100, 1000)); | 7422 scroller->SetBounds(gfx::Size(100, 1000)); |
| 7420 outer_clip->SetBounds(gfx::Size(100, 100)); | 7423 outer_clip->SetBounds(gfx::Size(100, 100)); |
| 7421 sticky_pos->SetBounds(gfx::Size(10, 10)); | 7424 sticky_pos->SetBounds(gfx::Size(10, 10)); |
| 7422 sticky_pos->SetPosition(gfx::PointF(0, 70)); | 7425 sticky_pos->SetPosition(gfx::PointF(0, 70)); |
| 7423 | 7426 |
| 7424 ExecuteCalculateDrawProperties(root.get(), 1.f, 1.f, root.get(), | 7427 ExecuteCalculateDrawProperties(root.get(), 1.f, 1.f, root.get(), |
| 7425 scroller.get(), outer_viewport.get()); | 7428 scroller.get(), outer_viewport.get()); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 7478 scroller->AddChild(sticky_pos); | 7481 scroller->AddChild(sticky_pos); |
| 7479 host()->SetRootLayer(root); | 7482 host()->SetRootLayer(root); |
| 7480 scroller->SetScrollClipLayerId(container->id()); | 7483 scroller->SetScrollClipLayerId(container->id()); |
| 7481 | 7484 |
| 7482 LayerStickyPositionConstraint sticky_position; | 7485 LayerStickyPositionConstraint sticky_position; |
| 7483 sticky_position.is_sticky = true; | 7486 sticky_position.is_sticky = true; |
| 7484 sticky_position.is_anchored_left = true; | 7487 sticky_position.is_anchored_left = true; |
| 7485 sticky_position.is_anchored_right = true; | 7488 sticky_position.is_anchored_right = true; |
| 7486 sticky_position.left_offset = 10.f; | 7489 sticky_position.left_offset = 10.f; |
| 7487 sticky_position.right_offset = 10.f; | 7490 sticky_position.right_offset = 10.f; |
| 7488 sticky_position.parent_relative_sticky_box_offset = gfx::Point(145, 0); | 7491 sticky_position.parent_relative_sticky_box_offset = gfx::PointF(145, 0); |
| 7489 sticky_position.scroll_container_relative_sticky_box_rect = | 7492 sticky_position.scroll_container_relative_sticky_box_rect = |
| 7490 gfx::Rect(145, 0, 10, 10); | 7493 gfx::RectF(145, 0, 10, 10); |
| 7491 sticky_position.scroll_container_relative_containing_block_rect = | 7494 sticky_position.scroll_container_relative_containing_block_rect = |
| 7492 gfx::Rect(100, 0, 100, 100); | 7495 gfx::RectF(100, 0, 100, 100); |
| 7493 sticky_pos->SetStickyPositionConstraint(sticky_position); | 7496 sticky_pos->SetStickyPositionConstraint(sticky_position); |
| 7494 | 7497 |
| 7495 root->SetBounds(gfx::Size(100, 100)); | 7498 root->SetBounds(gfx::Size(100, 100)); |
| 7496 container->SetBounds(gfx::Size(100, 100)); | 7499 container->SetBounds(gfx::Size(100, 100)); |
| 7497 scroller->SetBounds(gfx::Size(1000, 1000)); | 7500 scroller->SetBounds(gfx::Size(1000, 1000)); |
| 7498 sticky_pos->SetBounds(gfx::Size(10, 10)); | 7501 sticky_pos->SetBounds(gfx::Size(10, 10)); |
| 7499 sticky_pos->SetPosition(gfx::PointF(145, 0)); | 7502 sticky_pos->SetPosition(gfx::PointF(145, 0)); |
| 7500 | 7503 |
| 7501 ExecuteCalculateDrawProperties(root.get()); | 7504 ExecuteCalculateDrawProperties(root.get()); |
| 7502 host()->host_impl()->CreatePendingTree(); | 7505 host()->host_impl()->CreatePendingTree(); |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 7581 root->AddChild(container); | 7584 root->AddChild(container); |
| 7582 container->AddChild(scroller); | 7585 container->AddChild(scroller); |
| 7583 scroller->AddChild(sticky_pos); | 7586 scroller->AddChild(sticky_pos); |
| 7584 host()->SetRootLayer(root); | 7587 host()->SetRootLayer(root); |
| 7585 scroller->SetScrollClipLayerId(container->id()); | 7588 scroller->SetScrollClipLayerId(container->id()); |
| 7586 | 7589 |
| 7587 LayerStickyPositionConstraint sticky_position; | 7590 LayerStickyPositionConstraint sticky_position; |
| 7588 sticky_position.is_sticky = true; | 7591 sticky_position.is_sticky = true; |
| 7589 sticky_position.is_anchored_top = true; | 7592 sticky_position.is_anchored_top = true; |
| 7590 sticky_position.top_offset = 10.0f; | 7593 sticky_position.top_offset = 10.0f; |
| 7591 sticky_position.parent_relative_sticky_box_offset = gfx::Point(10, 20); | 7594 sticky_position.parent_relative_sticky_box_offset = gfx::PointF(10, 20); |
| 7592 sticky_position.scroll_container_relative_sticky_box_rect = | 7595 sticky_position.scroll_container_relative_sticky_box_rect = |
| 7593 gfx::Rect(10, 20, 10, 10); | 7596 gfx::RectF(10, 20, 10, 10); |
| 7594 sticky_position.scroll_container_relative_containing_block_rect = | 7597 sticky_position.scroll_container_relative_containing_block_rect = |
| 7595 gfx::Rect(0, 0, 50, 50); | 7598 gfx::RectF(0, 0, 50, 50); |
| 7596 sticky_pos->SetStickyPositionConstraint(sticky_position); | 7599 sticky_pos->SetStickyPositionConstraint(sticky_position); |
| 7597 | 7600 |
| 7598 root->SetBounds(gfx::Size(100, 100)); | 7601 root->SetBounds(gfx::Size(100, 100)); |
| 7599 container->SetBounds(gfx::Size(100, 100)); | 7602 container->SetBounds(gfx::Size(100, 100)); |
| 7600 scroller->SetBounds(gfx::Size(1000, 1000)); | 7603 scroller->SetBounds(gfx::Size(1000, 1000)); |
| 7601 sticky_pos->SetBounds(gfx::Size(10, 10)); | 7604 sticky_pos->SetBounds(gfx::Size(10, 10)); |
| 7602 sticky_pos->SetPosition(gfx::PointF(10, 20)); | 7605 sticky_pos->SetPosition(gfx::PointF(10, 20)); |
| 7603 | 7606 |
| 7604 ExecuteCalculateDrawProperties(root.get()); | 7607 ExecuteCalculateDrawProperties(root.get()); |
| 7605 host()->host_impl()->CreatePendingTree(); | 7608 host()->host_impl()->CreatePendingTree(); |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 7676 host()->SetRootLayer(root); | 7679 host()->SetRootLayer(root); |
| 7677 scroller->SetScrollClipLayerId(container->id()); | 7680 scroller->SetScrollClipLayerId(container->id()); |
| 7678 | 7681 |
| 7679 LayerStickyPositionConstraint sticky_position; | 7682 LayerStickyPositionConstraint sticky_position; |
| 7680 sticky_position.is_sticky = true; | 7683 sticky_position.is_sticky = true; |
| 7681 sticky_position.is_anchored_top = true; | 7684 sticky_position.is_anchored_top = true; |
| 7682 sticky_position.top_offset = 10.0f; | 7685 sticky_position.top_offset = 10.0f; |
| 7683 // The sticky position layer is only offset by (0, 10) from its parent | 7686 // The sticky position layer is only offset by (0, 10) from its parent |
| 7684 // layer, this position is used to determine the offset applied by the main | 7687 // layer, this position is used to determine the offset applied by the main |
| 7685 // thread. | 7688 // thread. |
| 7686 sticky_position.parent_relative_sticky_box_offset = gfx::Point(0, 10); | 7689 sticky_position.parent_relative_sticky_box_offset = gfx::PointF(0, 10); |
| 7687 sticky_position.scroll_container_relative_sticky_box_rect = | 7690 sticky_position.scroll_container_relative_sticky_box_rect = |
| 7688 gfx::Rect(20, 30, 10, 10); | 7691 gfx::RectF(20, 30, 10, 10); |
| 7689 sticky_position.scroll_container_relative_containing_block_rect = | 7692 sticky_position.scroll_container_relative_containing_block_rect = |
| 7690 gfx::Rect(20, 20, 30, 30); | 7693 gfx::RectF(20, 20, 30, 30); |
| 7691 sticky_pos->SetStickyPositionConstraint(sticky_position); | 7694 sticky_pos->SetStickyPositionConstraint(sticky_position); |
| 7692 | 7695 |
| 7693 root->SetBounds(gfx::Size(100, 100)); | 7696 root->SetBounds(gfx::Size(100, 100)); |
| 7694 container->SetBounds(gfx::Size(100, 100)); | 7697 container->SetBounds(gfx::Size(100, 100)); |
| 7695 scroller->SetBounds(gfx::Size(1000, 1000)); | 7698 scroller->SetBounds(gfx::Size(1000, 1000)); |
| 7696 sticky_container->SetPosition(gfx::PointF(20, 20)); | 7699 sticky_container->SetPosition(gfx::PointF(20, 20)); |
| 7697 sticky_container->SetBounds(gfx::Size(30, 30)); | 7700 sticky_container->SetBounds(gfx::Size(30, 30)); |
| 7698 sticky_pos->SetBounds(gfx::Size(10, 10)); | 7701 sticky_pos->SetBounds(gfx::Size(10, 10)); |
| 7699 sticky_pos->SetPosition(gfx::PointF(0, 10)); | 7702 sticky_pos->SetPosition(gfx::PointF(0, 10)); |
| 7700 | 7703 |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 7776 host()->SetRootLayer(root); | 7779 host()->SetRootLayer(root); |
| 7777 scroller->SetScrollClipLayerId(container->id()); | 7780 scroller->SetScrollClipLayerId(container->id()); |
| 7778 gfx::Transform t; | 7781 gfx::Transform t; |
| 7779 t.Scale(2, 2); | 7782 t.Scale(2, 2); |
| 7780 sticky_pos->SetTransform(t); | 7783 sticky_pos->SetTransform(t); |
| 7781 | 7784 |
| 7782 LayerStickyPositionConstraint sticky_position; | 7785 LayerStickyPositionConstraint sticky_position; |
| 7783 sticky_position.is_sticky = true; | 7786 sticky_position.is_sticky = true; |
| 7784 sticky_position.is_anchored_top = true; | 7787 sticky_position.is_anchored_top = true; |
| 7785 sticky_position.top_offset = 0.0f; | 7788 sticky_position.top_offset = 0.0f; |
| 7786 sticky_position.parent_relative_sticky_box_offset = gfx::Point(0, 20); | 7789 sticky_position.parent_relative_sticky_box_offset = gfx::PointF(0, 20); |
| 7787 sticky_position.scroll_container_relative_sticky_box_rect = | 7790 sticky_position.scroll_container_relative_sticky_box_rect = |
| 7788 gfx::Rect(0, 20, 10, 10); | 7791 gfx::RectF(0, 20, 10, 10); |
| 7789 sticky_position.scroll_container_relative_containing_block_rect = | 7792 sticky_position.scroll_container_relative_containing_block_rect = |
| 7790 gfx::Rect(0, 0, 50, 50); | 7793 gfx::RectF(0, 0, 50, 50); |
| 7791 sticky_pos->SetStickyPositionConstraint(sticky_position); | 7794 sticky_pos->SetStickyPositionConstraint(sticky_position); |
| 7792 | 7795 |
| 7793 root->SetBounds(gfx::Size(100, 100)); | 7796 root->SetBounds(gfx::Size(100, 100)); |
| 7794 container->SetBounds(gfx::Size(100, 100)); | 7797 container->SetBounds(gfx::Size(100, 100)); |
| 7795 scroller->SetBounds(gfx::Size(1000, 1000)); | 7798 scroller->SetBounds(gfx::Size(1000, 1000)); |
| 7796 sticky_pos->SetBounds(gfx::Size(10, 10)); | 7799 sticky_pos->SetBounds(gfx::Size(10, 10)); |
| 7797 sticky_pos->SetPosition(gfx::PointF(0, 20)); | 7800 sticky_pos->SetPosition(gfx::PointF(0, 20)); |
| 7798 | 7801 |
| 7799 ExecuteCalculateDrawProperties(root.get()); | 7802 ExecuteCalculateDrawProperties(root.get()); |
| 7800 host()->host_impl()->CreatePendingTree(); | 7803 host()->host_impl()->CreatePendingTree(); |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 7855 host()->SetRootLayer(root); | 7858 host()->SetRootLayer(root); |
| 7856 scroller->SetScrollClipLayerId(container->id()); | 7859 scroller->SetScrollClipLayerId(container->id()); |
| 7857 gfx::Transform t; | 7860 gfx::Transform t; |
| 7858 t.Scale(2, 2); | 7861 t.Scale(2, 2); |
| 7859 sticky_container->SetTransform(t); | 7862 sticky_container->SetTransform(t); |
| 7860 | 7863 |
| 7861 LayerStickyPositionConstraint sticky_position; | 7864 LayerStickyPositionConstraint sticky_position; |
| 7862 sticky_position.is_sticky = true; | 7865 sticky_position.is_sticky = true; |
| 7863 sticky_position.is_anchored_top = true; | 7866 sticky_position.is_anchored_top = true; |
| 7864 sticky_position.top_offset = 0.0f; | 7867 sticky_position.top_offset = 0.0f; |
| 7865 sticky_position.parent_relative_sticky_box_offset = gfx::Point(0, 20); | 7868 sticky_position.parent_relative_sticky_box_offset = gfx::PointF(0, 20); |
| 7866 sticky_position.scroll_container_relative_sticky_box_rect = | 7869 sticky_position.scroll_container_relative_sticky_box_rect = |
| 7867 gfx::Rect(0, 20, 10, 10); | 7870 gfx::RectF(0, 20, 10, 10); |
| 7868 sticky_position.scroll_container_relative_containing_block_rect = | 7871 sticky_position.scroll_container_relative_containing_block_rect = |
| 7869 gfx::Rect(0, 0, 50, 50); | 7872 gfx::RectF(0, 0, 50, 50); |
| 7870 sticky_pos->SetStickyPositionConstraint(sticky_position); | 7873 sticky_pos->SetStickyPositionConstraint(sticky_position); |
| 7871 | 7874 |
| 7872 root->SetBounds(gfx::Size(100, 100)); | 7875 root->SetBounds(gfx::Size(100, 100)); |
| 7873 container->SetBounds(gfx::Size(100, 100)); | 7876 container->SetBounds(gfx::Size(100, 100)); |
| 7874 scroller->SetBounds(gfx::Size(1000, 1000)); | 7877 scroller->SetBounds(gfx::Size(1000, 1000)); |
| 7875 sticky_container->SetBounds(gfx::Size(50, 50)); | 7878 sticky_container->SetBounds(gfx::Size(50, 50)); |
| 7876 sticky_pos->SetBounds(gfx::Size(10, 10)); | 7879 sticky_pos->SetBounds(gfx::Size(10, 10)); |
| 7877 sticky_pos->SetPosition(gfx::PointF(0, 20)); | 7880 sticky_pos->SetPosition(gfx::PointF(0, 20)); |
| 7878 | 7881 |
| 7879 ExecuteCalculateDrawProperties(root.get()); | 7882 ExecuteCalculateDrawProperties(root.get()); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 7913 sticky_pos_impl->ScreenSpaceTransform().To2dTranslation()); | 7916 sticky_pos_impl->ScreenSpaceTransform().To2dTranslation()); |
| 7914 | 7917 |
| 7915 // Scroll past the end of the sticky container. | 7918 // Scroll past the end of the sticky container. |
| 7916 SetScrollOffsetDelta(scroller_impl, gfx::Vector2dF(0.f, 50.f)); | 7919 SetScrollOffsetDelta(scroller_impl, gfx::Vector2dF(0.f, 50.f)); |
| 7917 ExecuteCalculateDrawProperties(root_impl); | 7920 ExecuteCalculateDrawProperties(root_impl); |
| 7918 EXPECT_VECTOR2DF_EQ( | 7921 EXPECT_VECTOR2DF_EQ( |
| 7919 gfx::Vector2dF(0.f, 30.f), | 7922 gfx::Vector2dF(0.f, 30.f), |
| 7920 sticky_pos_impl->ScreenSpaceTransform().To2dTranslation()); | 7923 sticky_pos_impl->ScreenSpaceTransform().To2dTranslation()); |
| 7921 } | 7924 } |
| 7922 | 7925 |
| 7926 TEST_F(LayerTreeHostCommonTest, StickyPositionNested) { | |
| 7927 scoped_refptr<Layer> root = Layer::Create(); | |
| 7928 scoped_refptr<Layer> container = Layer::Create(); | |
| 7929 scoped_refptr<Layer> scroller = Layer::Create(); | |
| 7930 scoped_refptr<Layer> outer_sticky = Layer::Create(); | |
| 7931 scoped_refptr<Layer> inner_sticky = Layer::Create(); | |
| 7932 | |
| 7933 root->AddChild(container); | |
| 7934 container->AddChild(scroller); | |
| 7935 scroller->AddChild(outer_sticky); | |
| 7936 outer_sticky->AddChild(inner_sticky); | |
| 7937 host()->SetRootLayer(root); | |
| 7938 scroller->SetScrollClipLayerId(container->id()); | |
| 7939 | |
| 7940 root->SetBounds(gfx::Size(100, 100)); | |
| 7941 container->SetBounds(gfx::Size(100, 100)); | |
| 7942 scroller->SetBounds(gfx::Size(100, 1000)); | |
| 7943 outer_sticky->SetBounds(gfx::Size(10, 50)); | |
| 7944 outer_sticky->SetPosition(gfx::PointF(0, 50)); | |
| 7945 inner_sticky->SetBounds(gfx::Size(10, 10)); | |
| 7946 inner_sticky->SetPosition(gfx::PointF(0, 0)); | |
| 7947 | |
| 7948 LayerStickyPositionConstraint outer_sticky_pos; | |
| 7949 outer_sticky_pos.is_sticky = true; | |
| 7950 outer_sticky_pos.is_anchored_top = true; | |
| 7951 outer_sticky_pos.top_offset = 10.0f; | |
| 7952 outer_sticky_pos.parent_relative_sticky_box_offset = gfx::PointF(0, 50); | |
| 7953 outer_sticky_pos.scroll_container_relative_sticky_box_rect = | |
| 7954 gfx::RectF(0, 50, 10, 50); | |
| 7955 outer_sticky_pos.scroll_container_relative_containing_block_rect = | |
| 7956 gfx::RectF(0, 0, 50, 400); | |
| 7957 outer_sticky->SetStickyPositionConstraint(outer_sticky_pos); | |
| 7958 | |
| 7959 LayerStickyPositionConstraint inner_sticky_pos; | |
| 7960 inner_sticky_pos.is_sticky = true; | |
| 7961 inner_sticky_pos.is_anchored_top = true; | |
| 7962 inner_sticky_pos.top_offset = 25.0f; | |
| 7963 inner_sticky_pos.parent_relative_sticky_box_offset = gfx::PointF(0, 0); | |
| 7964 inner_sticky_pos.scroll_container_relative_sticky_box_rect = | |
| 7965 gfx::RectF(0, 50, 10, 10); | |
| 7966 inner_sticky_pos.scroll_container_relative_containing_block_rect = | |
| 7967 gfx::RectF(0, 50, 10, 50); | |
| 7968 inner_sticky_pos.nearest_layer_shifting_containing_block = outer_sticky->id(); | |
| 7969 inner_sticky->SetStickyPositionConstraint(inner_sticky_pos); | |
| 7970 | |
| 7971 ExecuteCalculateDrawProperties(root.get()); | |
| 7972 host()->host_impl()->CreatePendingTree(); | |
| 7973 host()->CommitAndCreatePendingTree(); | |
| 7974 host()->host_impl()->ActivateSyncTree(); | |
| 7975 LayerTreeImpl* layer_tree_impl = host()->host_impl()->active_tree(); | |
| 7976 | |
| 7977 LayerImpl* root_impl = layer_tree_impl->LayerById(root->id()); | |
| 7978 LayerImpl* scroller_impl = layer_tree_impl->LayerById(scroller->id()); | |
| 7979 LayerImpl* outer_sticky_impl = layer_tree_impl->LayerById(outer_sticky->id()); | |
| 7980 LayerImpl* inner_sticky_impl = layer_tree_impl->LayerById(inner_sticky->id()); | |
| 7981 | |
| 7982 ExecuteCalculateDrawProperties(root_impl); | |
| 7983 | |
| 7984 // Before any scrolling is done, the sticky elements should still be at their | |
| 7985 // original positions. | |
| 7986 EXPECT_VECTOR2DF_EQ( | |
| 7987 gfx::Vector2dF(0.f, 50.f), | |
| 7988 outer_sticky_impl->ScreenSpaceTransform().To2dTranslation()); | |
| 7989 EXPECT_VECTOR2DF_EQ( | |
| 7990 gfx::Vector2dF(0.f, 50.f), | |
| 7991 inner_sticky_impl->ScreenSpaceTransform().To2dTranslation()); | |
| 7992 | |
| 7993 // Scroll less than the sticking point. Both sticky elements should move with | |
| 7994 // scroll as we haven't gotten to the sticky item locations yet. | |
| 7995 SetScrollOffsetDelta(scroller_impl, gfx::Vector2dF(0.f, 5.f)); | |
| 7996 ExecuteCalculateDrawProperties(root_impl); | |
| 7997 EXPECT_VECTOR2DF_EQ( | |
| 7998 gfx::Vector2dF(0.f, 45.f), | |
| 7999 outer_sticky_impl->ScreenSpaceTransform().To2dTranslation()); | |
| 8000 EXPECT_VECTOR2DF_EQ( | |
| 8001 gfx::Vector2dF(0.f, 45.f), | |
| 8002 inner_sticky_impl->ScreenSpaceTransform().To2dTranslation()); | |
| 8003 | |
| 8004 // Scroll such that the inner sticky should stick, but the outer one should | |
| 8005 // keep going as it hasnt reached its position yet. | |
|
ajuma
2017/03/17 23:59:52
hasn't
smcgruer
2017/03/20 13:36:29
Done.
| |
| 8006 SetScrollOffsetDelta(scroller_impl, gfx::Vector2dF(0.f, 30.f)); | |
| 8007 ExecuteCalculateDrawProperties(root_impl); | |
| 8008 EXPECT_VECTOR2DF_EQ( | |
| 8009 gfx::Vector2dF(0.f, 20.f), | |
| 8010 outer_sticky_impl->ScreenSpaceTransform().To2dTranslation()); | |
| 8011 EXPECT_VECTOR2DF_EQ( | |
| 8012 gfx::Vector2dF(0.f, 25.f), | |
| 8013 inner_sticky_impl->ScreenSpaceTransform().To2dTranslation()); | |
| 8014 | |
| 8015 // Keep going, both should stick. | |
| 8016 SetScrollOffsetDelta(scroller_impl, gfx::Vector2dF(0.f, 100.f)); | |
| 8017 ExecuteCalculateDrawProperties(root_impl); | |
| 8018 EXPECT_VECTOR2DF_EQ( | |
| 8019 gfx::Vector2dF(0.f, 10.f), | |
| 8020 outer_sticky_impl->ScreenSpaceTransform().To2dTranslation()); | |
| 8021 EXPECT_VECTOR2DF_EQ( | |
| 8022 gfx::Vector2dF(0.f, 25.f), | |
| 8023 inner_sticky_impl->ScreenSpaceTransform().To2dTranslation()); | |
| 8024 } | |
| 8025 | |
| 7923 TEST_F(LayerTreeHostCommonTest, NonFlatContainerForFixedPosLayer) { | 8026 TEST_F(LayerTreeHostCommonTest, NonFlatContainerForFixedPosLayer) { |
| 7924 scoped_refptr<Layer> root = Layer::Create(); | 8027 scoped_refptr<Layer> root = Layer::Create(); |
| 7925 scoped_refptr<Layer> container = Layer::Create(); | 8028 scoped_refptr<Layer> container = Layer::Create(); |
| 7926 scoped_refptr<Layer> scroller = Layer::Create(); | 8029 scoped_refptr<Layer> scroller = Layer::Create(); |
| 7927 scoped_refptr<Layer> fixed_pos = Layer::Create(); | 8030 scoped_refptr<Layer> fixed_pos = Layer::Create(); |
| 7928 | 8031 |
| 7929 scroller->SetIsContainerForFixedPositionLayers(true); | 8032 scroller->SetIsContainerForFixedPositionLayers(true); |
| 7930 root->AddChild(container); | 8033 root->AddChild(container); |
| 7931 container->AddChild(scroller); | 8034 container->AddChild(scroller); |
| 7932 scroller->AddChild(fixed_pos); | 8035 scroller->AddChild(fixed_pos); |
| (...skipping 2833 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 10766 EXPECT_EQ(scroll_child6.id, grand_child10->scroll_tree_index()); | 10869 EXPECT_EQ(scroll_child6.id, grand_child10->scroll_tree_index()); |
| 10767 EXPECT_EQ(scroll_root1.id, parent3->scroll_tree_index()); | 10870 EXPECT_EQ(scroll_root1.id, parent3->scroll_tree_index()); |
| 10768 EXPECT_EQ(scroll_child7.id, child8->scroll_tree_index()); | 10871 EXPECT_EQ(scroll_child7.id, child8->scroll_tree_index()); |
| 10769 EXPECT_EQ(scroll_root1.id, parent4->scroll_tree_index()); | 10872 EXPECT_EQ(scroll_root1.id, parent4->scroll_tree_index()); |
| 10770 EXPECT_EQ(scroll_root1.id, child9->scroll_tree_index()); | 10873 EXPECT_EQ(scroll_root1.id, child9->scroll_tree_index()); |
| 10771 EXPECT_EQ(scroll_root1.id, grand_child12->scroll_tree_index()); | 10874 EXPECT_EQ(scroll_root1.id, grand_child12->scroll_tree_index()); |
| 10772 } | 10875 } |
| 10773 | 10876 |
| 10774 } // namespace | 10877 } // namespace |
| 10775 } // namespace cc | 10878 } // namespace cc |
| OLD | NEW |