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 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
138 // If pending tree topology changed and we still want to notify the pending | 138 // If pending tree topology changed and we still want to notify the pending |
139 // tree about scroll offset in the active tree, we may not find the | 139 // tree about scroll offset in the active tree, we may not find the |
140 // corresponding pending layer. | 140 // corresponding pending layer. |
141 if (LayerById(layer_id)) { | 141 if (LayerById(layer_id)) { |
142 transform_id = LayerById(layer_id)->transform_tree_index(); | 142 transform_id = LayerById(layer_id)->transform_tree_index(); |
143 } else { | 143 } else { |
144 DCHECK(!IsActiveTree()); | 144 DCHECK(!IsActiveTree()); |
145 return; | 145 return; |
146 } | 146 } |
147 | 147 |
148 if (transform_id != -1) { | 148 if (transform_id != TransformTree::kInvalidNodeId) { |
149 TransformNode* node = transform_tree.Node(transform_id); | 149 TransformNode* node = transform_tree.Node(transform_id); |
150 if (node->data.scroll_offset != | 150 if (node->data.scroll_offset != |
151 scroll_tree.current_scroll_offset(layer_id)) { | 151 scroll_tree.current_scroll_offset(layer_id)) { |
152 node->data.scroll_offset = scroll_tree.current_scroll_offset(layer_id); | 152 node->data.scroll_offset = scroll_tree.current_scroll_offset(layer_id); |
153 node->data.needs_local_transform_update = true; | 153 node->data.needs_local_transform_update = true; |
154 transform_tree.set_needs_update(true); | 154 transform_tree.set_needs_update(true); |
155 } | 155 } |
156 node->data.transform_changed = true; | 156 node->data.transform_changed = true; |
157 property_trees()->changed = true; | 157 property_trees()->changed = true; |
158 set_needs_update_draw_properties(); | 158 set_needs_update_draw_properties(); |
(...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
550 | 550 |
551 int LayerTreeImpl::LastScrolledLayerId() const { | 551 int LayerTreeImpl::LastScrolledLayerId() const { |
552 return last_scrolled_layer_id_; | 552 return last_scrolled_layer_id_; |
553 } | 553 } |
554 | 554 |
555 void LayerTreeImpl::SetCurrentlyScrollingLayer(LayerImpl* layer) { | 555 void LayerTreeImpl::SetCurrentlyScrollingLayer(LayerImpl* layer) { |
556 ScrollTree& scroll_tree = property_trees()->scroll_tree; | 556 ScrollTree& scroll_tree = property_trees()->scroll_tree; |
557 ScrollNode* scroll_node = scroll_tree.CurrentlyScrollingNode(); | 557 ScrollNode* scroll_node = scroll_tree.CurrentlyScrollingNode(); |
558 int old_id = scroll_node ? scroll_node->owner_id : Layer::INVALID_ID; | 558 int old_id = scroll_node ? scroll_node->owner_id : Layer::INVALID_ID; |
559 int new_id = layer ? layer->id() : Layer::INVALID_ID; | 559 int new_id = layer ? layer->id() : Layer::INVALID_ID; |
560 int new_scroll_node_id = layer ? layer->scroll_tree_index() : -1; | 560 int new_scroll_node_id = |
| 561 layer ? layer->scroll_tree_index() : ScrollTree::kInvalidNodeId; |
561 if (layer) | 562 if (layer) |
562 last_scrolled_layer_id_ = new_id; | 563 last_scrolled_layer_id_ = new_id; |
563 | 564 |
564 if (old_id == new_id) | 565 if (old_id == new_id) |
565 return; | 566 return; |
566 | 567 |
567 ScrollbarAnimationController* old_animation_controller = | 568 ScrollbarAnimationController* old_animation_controller = |
568 layer_tree_host_impl_->ScrollbarAnimationControllerForId(old_id); | 569 layer_tree_host_impl_->ScrollbarAnimationControllerForId(old_id); |
569 ScrollbarAnimationController* new_animation_controller = | 570 ScrollbarAnimationController* new_animation_controller = |
570 layer_tree_host_impl_->ScrollbarAnimationControllerForId(new_id); | 571 layer_tree_host_impl_->ScrollbarAnimationControllerForId(new_id); |
(...skipping 1046 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1617 const ClipTree& clip_tree, | 1618 const ClipTree& clip_tree, |
1618 const TransformTree& transform_tree) { | 1619 const TransformTree& transform_tree) { |
1619 // We need to visit all ancestor clip nodes to check this. Checking with just | 1620 // We need to visit all ancestor clip nodes to check this. Checking with just |
1620 // the combined clip stored at a clip node is not enough because parent | 1621 // the combined clip stored at a clip node is not enough because parent |
1621 // combined clip can sometimes be smaller than current combined clip. This can | 1622 // combined clip can sometimes be smaller than current combined clip. This can |
1622 // happen when we have transforms like rotation that inflate the combined | 1623 // happen when we have transforms like rotation that inflate the combined |
1623 // clip's bounds. Also, the point can be clipped by the content rect of an | 1624 // clip's bounds. Also, the point can be clipped by the content rect of an |
1624 // ancestor render surface. | 1625 // ancestor render surface. |
1625 | 1626 |
1626 // We first check if the point is clipped by viewport. | 1627 // We first check if the point is clipped by viewport. |
1627 const ClipNode* clip_node = clip_tree.Node(1); | 1628 const ClipNode* clip_node = clip_tree.Node(ClipTree::kViewportNodeId); |
1628 gfx::Rect combined_clip_in_target_space = | 1629 gfx::Rect combined_clip_in_target_space = |
1629 gfx::ToEnclosingRect(clip_node->data.combined_clip_in_target_space); | 1630 gfx::ToEnclosingRect(clip_node->data.combined_clip_in_target_space); |
1630 if (!PointHitsRect(screen_space_point, gfx::Transform(), | 1631 if (!PointHitsRect(screen_space_point, gfx::Transform(), |
1631 combined_clip_in_target_space, NULL)) | 1632 combined_clip_in_target_space, NULL)) |
1632 return true; | 1633 return true; |
1633 | 1634 |
1634 for (const ClipNode* clip_node = clip_tree.Node(layer->clip_tree_index()); | 1635 for (const ClipNode* clip_node = clip_tree.Node(layer->clip_tree_index()); |
1635 clip_node->id > 1; clip_node = clip_tree.parent(clip_node)) { | 1636 clip_node->id > ClipTree::kViewportNodeId; |
| 1637 clip_node = clip_tree.parent(clip_node)) { |
1636 if (clip_node->data.applies_local_clip) { | 1638 if (clip_node->data.applies_local_clip) { |
1637 const TransformNode* transform_node = | 1639 const TransformNode* transform_node = |
1638 transform_tree.Node(clip_node->data.target_id); | 1640 transform_tree.Node(clip_node->data.target_id); |
1639 gfx::Rect combined_clip_in_target_space = | 1641 gfx::Rect combined_clip_in_target_space = |
1640 gfx::ToEnclosingRect(clip_node->data.combined_clip_in_target_space); | 1642 gfx::ToEnclosingRect(clip_node->data.combined_clip_in_target_space); |
1641 | 1643 |
1642 const LayerImpl* target_layer = | 1644 const LayerImpl* target_layer = |
1643 layer->layer_tree_impl()->LayerById(transform_node->owner_id); | 1645 layer->layer_tree_impl()->LayerById(transform_node->owner_id); |
1644 DCHECK(transform_node->id == 0 || target_layer->render_surface() || | 1646 DCHECK(transform_node->id == TransformTree::kDeviceNodeId || |
| 1647 target_layer->render_surface() || |
1645 layer->layer_tree_impl()->is_in_resourceless_software_draw_mode()); | 1648 layer->layer_tree_impl()->is_in_resourceless_software_draw_mode()); |
1646 gfx::Transform surface_screen_space_transform = | 1649 gfx::Transform surface_screen_space_transform = |
1647 transform_node->id == 0 || | 1650 transform_node->id == TransformTree::kDeviceNodeId || |
1648 (layer->layer_tree_impl() | 1651 (layer->layer_tree_impl() |
1649 ->is_in_resourceless_software_draw_mode()) | 1652 ->is_in_resourceless_software_draw_mode()) |
1650 ? gfx::Transform() | 1653 ? gfx::Transform() |
1651 : SurfaceScreenSpaceTransform(target_layer, transform_tree); | 1654 : SurfaceScreenSpaceTransform(target_layer, transform_tree); |
1652 if (!PointHitsRect(screen_space_point, surface_screen_space_transform, | 1655 if (!PointHitsRect(screen_space_point, surface_screen_space_transform, |
1653 combined_clip_in_target_space, NULL)) { | 1656 combined_clip_in_target_space, NULL)) { |
1654 return true; | 1657 return true; |
1655 } | 1658 } |
1656 } | 1659 } |
1657 const LayerImpl* clip_node_owner = | 1660 const LayerImpl* clip_node_owner = |
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2078 | 2081 |
2079 void LayerTreeImpl::ResetAllChangeTracking() { | 2082 void LayerTreeImpl::ResetAllChangeTracking() { |
2080 layers_that_should_push_properties_.clear(); | 2083 layers_that_should_push_properties_.clear(); |
2081 // Iterate over all layers, including masks and replicas. | 2084 // Iterate over all layers, including masks and replicas. |
2082 for (auto& layer : *layers_) | 2085 for (auto& layer : *layers_) |
2083 layer->ResetChangeTracking(); | 2086 layer->ResetChangeTracking(); |
2084 property_trees_.ResetAllChangeTracking(); | 2087 property_trees_.ResetAllChangeTracking(); |
2085 } | 2088 } |
2086 | 2089 |
2087 } // namespace cc | 2090 } // namespace cc |
OLD | NEW |