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_impl.h" | 5 #include "cc/trees/layer_tree_impl.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <algorithm> | 10 #include <algorithm> |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
153 // If pending tree topology changed and we still want to notify the pending | 153 // If pending tree topology changed and we still want to notify the pending |
154 // tree about scroll offset in the active tree, we may not find the | 154 // tree about scroll offset in the active tree, we may not find the |
155 // corresponding pending layer. | 155 // corresponding pending layer. |
156 if (LayerById(layer_id)) { | 156 if (LayerById(layer_id)) { |
157 transform_id = LayerById(layer_id)->transform_tree_index(); | 157 transform_id = LayerById(layer_id)->transform_tree_index(); |
158 } else { | 158 } else { |
159 DCHECK(!IsActiveTree()); | 159 DCHECK(!IsActiveTree()); |
160 return; | 160 return; |
161 } | 161 } |
162 | 162 |
163 if (transform_id != -1) { | 163 if (transform_id != TransformTree::kInvalidNodeId) { |
164 TransformNode* node = transform_tree.Node(transform_id); | 164 TransformNode* node = transform_tree.Node(transform_id); |
165 if (node->scroll_offset != scroll_tree.current_scroll_offset(layer_id)) { | 165 if (node->scroll_offset != scroll_tree.current_scroll_offset(layer_id)) { |
166 node->scroll_offset = scroll_tree.current_scroll_offset(layer_id); | 166 node->scroll_offset = scroll_tree.current_scroll_offset(layer_id); |
167 node->needs_local_transform_update = true; | 167 node->needs_local_transform_update = true; |
168 transform_tree.set_needs_update(true); | 168 transform_tree.set_needs_update(true); |
169 } | 169 } |
170 node->transform_changed = true; | 170 node->transform_changed = true; |
171 property_trees()->changed = true; | 171 property_trees()->changed = true; |
172 set_needs_update_draw_properties(); | 172 set_needs_update_draw_properties(); |
173 } | 173 } |
(...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
569 | 569 |
570 int LayerTreeImpl::LastScrolledLayerId() const { | 570 int LayerTreeImpl::LastScrolledLayerId() const { |
571 return last_scrolled_layer_id_; | 571 return last_scrolled_layer_id_; |
572 } | 572 } |
573 | 573 |
574 void LayerTreeImpl::SetCurrentlyScrollingLayer(LayerImpl* layer) { | 574 void LayerTreeImpl::SetCurrentlyScrollingLayer(LayerImpl* layer) { |
575 ScrollTree& scroll_tree = property_trees()->scroll_tree; | 575 ScrollTree& scroll_tree = property_trees()->scroll_tree; |
576 ScrollNode* scroll_node = scroll_tree.CurrentlyScrollingNode(); | 576 ScrollNode* scroll_node = scroll_tree.CurrentlyScrollingNode(); |
577 int old_id = scroll_node ? scroll_node->owner_id : Layer::INVALID_ID; | 577 int old_id = scroll_node ? scroll_node->owner_id : Layer::INVALID_ID; |
578 int new_id = layer ? layer->id() : Layer::INVALID_ID; | 578 int new_id = layer ? layer->id() : Layer::INVALID_ID; |
579 int new_scroll_node_id = layer ? layer->scroll_tree_index() : -1; | 579 int new_scroll_node_id = |
| 580 layer ? layer->scroll_tree_index() : ScrollTree::kInvalidNodeId; |
580 if (layer) | 581 if (layer) |
581 last_scrolled_layer_id_ = new_id; | 582 last_scrolled_layer_id_ = new_id; |
582 | 583 |
583 if (old_id == new_id) | 584 if (old_id == new_id) |
584 return; | 585 return; |
585 | 586 |
586 ScrollbarAnimationController* old_animation_controller = | 587 ScrollbarAnimationController* old_animation_controller = |
587 layer_tree_host_impl_->ScrollbarAnimationControllerForId(old_id); | 588 layer_tree_host_impl_->ScrollbarAnimationControllerForId(old_id); |
588 ScrollbarAnimationController* new_animation_controller = | 589 ScrollbarAnimationController* new_animation_controller = |
589 layer_tree_host_impl_->ScrollbarAnimationControllerForId(new_id); | 590 layer_tree_host_impl_->ScrollbarAnimationControllerForId(new_id); |
(...skipping 1064 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1654 const ClipTree& clip_tree, | 1655 const ClipTree& clip_tree, |
1655 const TransformTree& transform_tree) { | 1656 const TransformTree& transform_tree) { |
1656 // We need to visit all ancestor clip nodes to check this. Checking with just | 1657 // We need to visit all ancestor clip nodes to check this. Checking with just |
1657 // the combined clip stored at a clip node is not enough because parent | 1658 // the combined clip stored at a clip node is not enough because parent |
1658 // combined clip can sometimes be smaller than current combined clip. This can | 1659 // combined clip can sometimes be smaller than current combined clip. This can |
1659 // happen when we have transforms like rotation that inflate the combined | 1660 // happen when we have transforms like rotation that inflate the combined |
1660 // clip's bounds. Also, the point can be clipped by the content rect of an | 1661 // clip's bounds. Also, the point can be clipped by the content rect of an |
1661 // ancestor render surface. | 1662 // ancestor render surface. |
1662 | 1663 |
1663 // We first check if the point is clipped by viewport. | 1664 // We first check if the point is clipped by viewport. |
1664 const ClipNode* clip_node = clip_tree.Node(1); | 1665 const ClipNode* clip_node = clip_tree.Node(ClipTree::kViewportNodeId); |
1665 gfx::Rect combined_clip_in_target_space = | 1666 gfx::Rect combined_clip_in_target_space = |
1666 gfx::ToEnclosingRect(clip_node->combined_clip_in_target_space); | 1667 gfx::ToEnclosingRect(clip_node->combined_clip_in_target_space); |
1667 if (!PointHitsRect(screen_space_point, gfx::Transform(), | 1668 if (!PointHitsRect(screen_space_point, gfx::Transform(), |
1668 combined_clip_in_target_space, NULL)) | 1669 combined_clip_in_target_space, NULL)) |
1669 return true; | 1670 return true; |
1670 | 1671 |
1671 for (const ClipNode* clip_node = clip_tree.Node(layer->clip_tree_index()); | 1672 for (const ClipNode* clip_node = clip_tree.Node(layer->clip_tree_index()); |
1672 clip_node->id > 1; clip_node = clip_tree.parent(clip_node)) { | 1673 clip_node->id > ClipTree::kViewportNodeId; |
| 1674 clip_node = clip_tree.parent(clip_node)) { |
1673 if (clip_node->applies_local_clip) { | 1675 if (clip_node->applies_local_clip) { |
1674 const TransformNode* transform_node = | 1676 const TransformNode* transform_node = |
1675 transform_tree.Node(clip_node->target_transform_id); | 1677 transform_tree.Node(clip_node->target_transform_id); |
1676 gfx::Rect combined_clip_in_target_space = | 1678 gfx::Rect combined_clip_in_target_space = |
1677 gfx::ToEnclosingRect(clip_node->combined_clip_in_target_space); | 1679 gfx::ToEnclosingRect(clip_node->combined_clip_in_target_space); |
1678 | 1680 |
1679 const LayerImpl* target_layer = | 1681 const LayerImpl* target_layer = |
1680 layer->layer_tree_impl()->LayerById(transform_node->owner_id); | 1682 layer->layer_tree_impl()->LayerById(transform_node->owner_id); |
1681 DCHECK(transform_node->id == 0 || target_layer->render_surface() || | 1683 DCHECK(transform_node->id == TransformTree::kDeviceNodeId || |
| 1684 target_layer->render_surface() || |
1682 layer->layer_tree_impl()->is_in_resourceless_software_draw_mode()); | 1685 layer->layer_tree_impl()->is_in_resourceless_software_draw_mode()); |
1683 gfx::Transform surface_screen_space_transform = | 1686 gfx::Transform surface_screen_space_transform = |
1684 transform_node->id == 0 || | 1687 transform_node->id == TransformTree::kDeviceNodeId || |
1685 (layer->layer_tree_impl() | 1688 (layer->layer_tree_impl() |
1686 ->is_in_resourceless_software_draw_mode()) | 1689 ->is_in_resourceless_software_draw_mode()) |
1687 ? gfx::Transform() | 1690 ? gfx::Transform() |
1688 : SurfaceScreenSpaceTransform(target_layer, transform_tree); | 1691 : SurfaceScreenSpaceTransform(target_layer, transform_tree); |
1689 if (!PointHitsRect(screen_space_point, surface_screen_space_transform, | 1692 if (!PointHitsRect(screen_space_point, surface_screen_space_transform, |
1690 combined_clip_in_target_space, NULL)) { | 1693 combined_clip_in_target_space, NULL)) { |
1691 return true; | 1694 return true; |
1692 } | 1695 } |
1693 } | 1696 } |
1694 const LayerImpl* clip_node_owner = | 1697 const LayerImpl* clip_node_owner = |
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1992 | 1995 |
1993 void LayerTreeImpl::ResetAllChangeTracking() { | 1996 void LayerTreeImpl::ResetAllChangeTracking() { |
1994 layers_that_should_push_properties_.clear(); | 1997 layers_that_should_push_properties_.clear(); |
1995 // Iterate over all layers, including masks and replicas. | 1998 // Iterate over all layers, including masks and replicas. |
1996 for (auto& layer : *layers_) | 1999 for (auto& layer : *layers_) |
1997 layer->ResetChangeTracking(); | 2000 layer->ResetChangeTracking(); |
1998 property_trees_.ResetAllChangeTracking(); | 2001 property_trees_.ResetAllChangeTracking(); |
1999 } | 2002 } |
2000 | 2003 |
2001 } // namespace cc | 2004 } // namespace cc |
OLD | NEW |