| 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 |