| 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 <limits> | 7 #include <limits> |
| 8 #include <set> | 8 #include <set> |
| 9 | 9 |
| 10 #include "base/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 LayerImpl* layer_; | 67 LayerImpl* layer_; |
| 68 LayerScrollOffsetDelegate* delegate_; | 68 LayerScrollOffsetDelegate* delegate_; |
| 69 LayerTreeImpl* layer_tree_impl_; | 69 LayerTreeImpl* layer_tree_impl_; |
| 70 gfx::ScrollOffset last_set_scroll_offset_; | 70 gfx::ScrollOffset last_set_scroll_offset_; |
| 71 }; | 71 }; |
| 72 | 72 |
| 73 LayerTreeImpl::LayerTreeImpl(LayerTreeHostImpl* layer_tree_host_impl) | 73 LayerTreeImpl::LayerTreeImpl(LayerTreeHostImpl* layer_tree_host_impl) |
| 74 : layer_tree_host_impl_(layer_tree_host_impl), | 74 : layer_tree_host_impl_(layer_tree_host_impl), |
| 75 source_frame_number_(-1), | 75 source_frame_number_(-1), |
| 76 hud_layer_(0), | 76 hud_layer_(0), |
| 77 currently_scrolling_layer_(NULL), | 77 currently_scrolling_layer_(nullptr), |
| 78 root_layer_scroll_offset_delegate_(NULL), | 78 root_layer_scroll_offset_delegate_(nullptr), |
| 79 background_color_(0), | 79 background_color_(0), |
| 80 has_transparent_background_(false), | 80 has_transparent_background_(false), |
| 81 page_scale_layer_(NULL), | 81 page_scale_layer_(nullptr), |
| 82 inner_viewport_scroll_layer_(NULL), | 82 inner_viewport_scroll_layer_(nullptr), |
| 83 outer_viewport_scroll_layer_(NULL), | 83 outer_viewport_scroll_layer_(nullptr), |
| 84 page_scale_factor_(1), | 84 page_scale_factor_(1), |
| 85 page_scale_delta_(1), | 85 page_scale_delta_(1), |
| 86 sent_page_scale_delta_(1), | 86 sent_page_scale_delta_(1), |
| 87 min_page_scale_factor_(0), | 87 min_page_scale_factor_(0), |
| 88 max_page_scale_factor_(0), | 88 max_page_scale_factor_(0), |
| 89 scrolling_layer_id_from_previous_tree_(0), | 89 scrolling_layer_id_from_previous_tree_(0), |
| 90 contents_textures_purged_(false), | 90 contents_textures_purged_(false), |
| 91 viewport_size_invalid_(false), | 91 viewport_size_invalid_(false), |
| 92 needs_update_draw_properties_(true), | 92 needs_update_draw_properties_(true), |
| 93 needs_full_tree_sync_(true), | 93 needs_full_tree_sync_(true), |
| (...skipping 19 matching lines...) Expand all Loading... |
| 113 root_layer_ = nullptr; | 113 root_layer_ = nullptr; |
| 114 } | 114 } |
| 115 | 115 |
| 116 void LayerTreeImpl::ReleaseResources() { | 116 void LayerTreeImpl::ReleaseResources() { |
| 117 if (root_layer_) | 117 if (root_layer_) |
| 118 ReleaseResourcesRecursive(root_layer_.get()); | 118 ReleaseResourcesRecursive(root_layer_.get()); |
| 119 } | 119 } |
| 120 | 120 |
| 121 void LayerTreeImpl::SetRootLayer(scoped_ptr<LayerImpl> layer) { | 121 void LayerTreeImpl::SetRootLayer(scoped_ptr<LayerImpl> layer) { |
| 122 if (inner_viewport_scroll_layer_) | 122 if (inner_viewport_scroll_layer_) |
| 123 inner_viewport_scroll_layer_->SetScrollOffsetDelegate(NULL); | 123 inner_viewport_scroll_layer_->SetScrollOffsetDelegate(nullptr); |
| 124 if (outer_viewport_scroll_layer_) | 124 if (outer_viewport_scroll_layer_) |
| 125 outer_viewport_scroll_layer_->SetScrollOffsetDelegate(NULL); | 125 outer_viewport_scroll_layer_->SetScrollOffsetDelegate(nullptr); |
| 126 inner_viewport_scroll_delegate_proxy_ = nullptr; | 126 inner_viewport_scroll_delegate_proxy_ = nullptr; |
| 127 outer_viewport_scroll_delegate_proxy_ = nullptr; | 127 outer_viewport_scroll_delegate_proxy_ = nullptr; |
| 128 | 128 |
| 129 root_layer_ = layer.Pass(); | 129 root_layer_ = layer.Pass(); |
| 130 currently_scrolling_layer_ = NULL; | 130 currently_scrolling_layer_ = nullptr; |
| 131 inner_viewport_scroll_layer_ = NULL; | 131 inner_viewport_scroll_layer_ = nullptr; |
| 132 outer_viewport_scroll_layer_ = NULL; | 132 outer_viewport_scroll_layer_ = nullptr; |
| 133 page_scale_layer_ = NULL; | 133 page_scale_layer_ = nullptr; |
| 134 | 134 |
| 135 layer_tree_host_impl_->OnCanDrawStateChangedForTree(); | 135 layer_tree_host_impl_->OnCanDrawStateChangedForTree(); |
| 136 } | 136 } |
| 137 | 137 |
| 138 LayerImpl* LayerTreeImpl::InnerViewportScrollLayer() const { | 138 LayerImpl* LayerTreeImpl::InnerViewportScrollLayer() const { |
| 139 return inner_viewport_scroll_layer_; | 139 return inner_viewport_scroll_layer_; |
| 140 } | 140 } |
| 141 | 141 |
| 142 LayerImpl* LayerTreeImpl::OuterViewportScrollLayer() const { | 142 LayerImpl* LayerTreeImpl::OuterViewportScrollLayer() const { |
| 143 return outer_viewport_scroll_layer_; | 143 return outer_viewport_scroll_layer_; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 174 delta += outer_viewport_scroll_layer_->ScrollDelta(); | 174 delta += outer_viewport_scroll_layer_->ScrollDelta(); |
| 175 | 175 |
| 176 return delta; | 176 return delta; |
| 177 } | 177 } |
| 178 | 178 |
| 179 scoped_ptr<LayerImpl> LayerTreeImpl::DetachLayerTree() { | 179 scoped_ptr<LayerImpl> LayerTreeImpl::DetachLayerTree() { |
| 180 // Clear all data structures that have direct references to the layer tree. | 180 // Clear all data structures that have direct references to the layer tree. |
| 181 scrolling_layer_id_from_previous_tree_ = | 181 scrolling_layer_id_from_previous_tree_ = |
| 182 currently_scrolling_layer_ ? currently_scrolling_layer_->id() : 0; | 182 currently_scrolling_layer_ ? currently_scrolling_layer_->id() : 0; |
| 183 if (inner_viewport_scroll_layer_) | 183 if (inner_viewport_scroll_layer_) |
| 184 inner_viewport_scroll_layer_->SetScrollOffsetDelegate(NULL); | 184 inner_viewport_scroll_layer_->SetScrollOffsetDelegate(nullptr); |
| 185 if (outer_viewport_scroll_layer_) | 185 if (outer_viewport_scroll_layer_) |
| 186 outer_viewport_scroll_layer_->SetScrollOffsetDelegate(NULL); | 186 outer_viewport_scroll_layer_->SetScrollOffsetDelegate(nullptr); |
| 187 inner_viewport_scroll_delegate_proxy_ = nullptr; | 187 inner_viewport_scroll_delegate_proxy_ = nullptr; |
| 188 outer_viewport_scroll_delegate_proxy_ = nullptr; | 188 outer_viewport_scroll_delegate_proxy_ = nullptr; |
| 189 inner_viewport_scroll_layer_ = NULL; | 189 inner_viewport_scroll_layer_ = nullptr; |
| 190 outer_viewport_scroll_layer_ = NULL; | 190 outer_viewport_scroll_layer_ = nullptr; |
| 191 page_scale_layer_ = NULL; | 191 page_scale_layer_ = nullptr; |
| 192 currently_scrolling_layer_ = NULL; | 192 currently_scrolling_layer_ = nullptr; |
| 193 | 193 |
| 194 render_surface_layer_list_.clear(); | 194 render_surface_layer_list_.clear(); |
| 195 set_needs_update_draw_properties(); | 195 set_needs_update_draw_properties(); |
| 196 return root_layer_.Pass(); | 196 return root_layer_.Pass(); |
| 197 } | 197 } |
| 198 | 198 |
| 199 void LayerTreeImpl::PushPropertiesTo(LayerTreeImpl* target_tree) { | 199 void LayerTreeImpl::PushPropertiesTo(LayerTreeImpl* target_tree) { |
| 200 // The request queue should have been processed and does not require a push. | 200 // The request queue should have been processed and does not require a push. |
| 201 DCHECK_EQ(ui_resource_request_queue_.size(), 0u); | 201 DCHECK_EQ(ui_resource_request_queue_.size(), 0u); |
| 202 | 202 |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 247 if (ViewportSizeInvalid()) | 247 if (ViewportSizeInvalid()) |
| 248 target_tree->SetViewportSizeInvalid(); | 248 target_tree->SetViewportSizeInvalid(); |
| 249 else | 249 else |
| 250 target_tree->ResetViewportSizeInvalid(); | 250 target_tree->ResetViewportSizeInvalid(); |
| 251 | 251 |
| 252 if (hud_layer()) | 252 if (hud_layer()) |
| 253 target_tree->set_hud_layer(static_cast<HeadsUpDisplayLayerImpl*>( | 253 target_tree->set_hud_layer(static_cast<HeadsUpDisplayLayerImpl*>( |
| 254 LayerTreeHostCommon::FindLayerInSubtree( | 254 LayerTreeHostCommon::FindLayerInSubtree( |
| 255 target_tree->root_layer(), hud_layer()->id()))); | 255 target_tree->root_layer(), hud_layer()->id()))); |
| 256 else | 256 else |
| 257 target_tree->set_hud_layer(NULL); | 257 target_tree->set_hud_layer(nullptr); |
| 258 | 258 |
| 259 target_tree->has_ever_been_drawn_ = false; | 259 target_tree->has_ever_been_drawn_ = false; |
| 260 } | 260 } |
| 261 | 261 |
| 262 LayerImpl* LayerTreeImpl::InnerViewportContainerLayer() const { | 262 LayerImpl* LayerTreeImpl::InnerViewportContainerLayer() const { |
| 263 return inner_viewport_scroll_layer_ | 263 return inner_viewport_scroll_layer_ |
| 264 ? inner_viewport_scroll_layer_->scroll_clip_layer() | 264 ? inner_viewport_scroll_layer_->scroll_clip_layer() |
| 265 : NULL; | 265 : nullptr; |
| 266 } | 266 } |
| 267 | 267 |
| 268 LayerImpl* LayerTreeImpl::CurrentlyScrollingLayer() const { | 268 LayerImpl* LayerTreeImpl::CurrentlyScrollingLayer() const { |
| 269 DCHECK(IsActiveTree()); | 269 DCHECK(IsActiveTree()); |
| 270 return currently_scrolling_layer_; | 270 return currently_scrolling_layer_; |
| 271 } | 271 } |
| 272 | 272 |
| 273 void LayerTreeImpl::SetCurrentlyScrollingLayer(LayerImpl* layer) { | 273 void LayerTreeImpl::SetCurrentlyScrollingLayer(LayerImpl* layer) { |
| 274 if (currently_scrolling_layer_ == layer) | 274 if (currently_scrolling_layer_ == layer) |
| 275 return; | 275 return; |
| 276 | 276 |
| 277 if (currently_scrolling_layer_ && | 277 if (currently_scrolling_layer_ && |
| 278 currently_scrolling_layer_->scrollbar_animation_controller()) | 278 currently_scrolling_layer_->scrollbar_animation_controller()) |
| 279 currently_scrolling_layer_->scrollbar_animation_controller() | 279 currently_scrolling_layer_->scrollbar_animation_controller() |
| 280 ->DidScrollEnd(); | 280 ->DidScrollEnd(); |
| 281 currently_scrolling_layer_ = layer; | 281 currently_scrolling_layer_ = layer; |
| 282 if (layer && layer->scrollbar_animation_controller()) | 282 if (layer && layer->scrollbar_animation_controller()) |
| 283 layer->scrollbar_animation_controller()->DidScrollBegin(); | 283 layer->scrollbar_animation_controller()->DidScrollBegin(); |
| 284 } | 284 } |
| 285 | 285 |
| 286 void LayerTreeImpl::ClearCurrentlyScrollingLayer() { | 286 void LayerTreeImpl::ClearCurrentlyScrollingLayer() { |
| 287 SetCurrentlyScrollingLayer(NULL); | 287 SetCurrentlyScrollingLayer(nullptr); |
| 288 scrolling_layer_id_from_previous_tree_ = 0; | 288 scrolling_layer_id_from_previous_tree_ = 0; |
| 289 } | 289 } |
| 290 | 290 |
| 291 namespace { | 291 namespace { |
| 292 | 292 |
| 293 void ForceScrollbarParameterUpdateAfterScaleChange(LayerImpl* current_layer) { | 293 void ForceScrollbarParameterUpdateAfterScaleChange(LayerImpl* current_layer) { |
| 294 if (!current_layer) | 294 if (!current_layer) |
| 295 return; | 295 return; |
| 296 | 296 |
| 297 while (current_layer) { | 297 while (current_layer) { |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 441 this)); | 441 this)); |
| 442 | 442 |
| 443 if (outer_viewport_scroll_layer_) | 443 if (outer_viewport_scroll_layer_) |
| 444 outer_viewport_scroll_delegate_proxy_ = make_scoped_ptr( | 444 outer_viewport_scroll_delegate_proxy_ = make_scoped_ptr( |
| 445 new LayerScrollOffsetDelegateProxy(outer_viewport_scroll_layer_, | 445 new LayerScrollOffsetDelegateProxy(outer_viewport_scroll_layer_, |
| 446 root_layer_scroll_offset_delegate_, | 446 root_layer_scroll_offset_delegate_, |
| 447 this)); | 447 this)); |
| 448 } | 448 } |
| 449 | 449 |
| 450 void LayerTreeImpl::ClearViewportLayers() { | 450 void LayerTreeImpl::ClearViewportLayers() { |
| 451 page_scale_layer_ = NULL; | 451 page_scale_layer_ = nullptr; |
| 452 inner_viewport_scroll_layer_ = NULL; | 452 inner_viewport_scroll_layer_ = nullptr; |
| 453 outer_viewport_scroll_layer_ = NULL; | 453 outer_viewport_scroll_layer_ = nullptr; |
| 454 } | 454 } |
| 455 | 455 |
| 456 bool LayerTreeImpl::UpdateDrawProperties() { | 456 bool LayerTreeImpl::UpdateDrawProperties() { |
| 457 if (!needs_update_draw_properties_) | 457 if (!needs_update_draw_properties_) |
| 458 return true; | 458 return true; |
| 459 | 459 |
| 460 // For max_texture_size. | 460 // For max_texture_size. |
| 461 if (!layer_tree_host_impl_->renderer()) | 461 if (!layer_tree_host_impl_->renderer()) |
| 462 return false; | 462 return false; |
| 463 | 463 |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 573 LayerImpl* root_scroll_layer = OuterViewportScrollLayer() | 573 LayerImpl* root_scroll_layer = OuterViewportScrollLayer() |
| 574 ? OuterViewportScrollLayer() | 574 ? OuterViewportScrollLayer() |
| 575 : InnerViewportScrollLayer(); | 575 : InnerViewportScrollLayer(); |
| 576 if (!root_scroll_layer || root_scroll_layer->children().empty()) | 576 if (!root_scroll_layer || root_scroll_layer->children().empty()) |
| 577 return gfx::Size(); | 577 return gfx::Size(); |
| 578 return root_scroll_layer->children()[0]->bounds(); | 578 return root_scroll_layer->children()[0]->bounds(); |
| 579 } | 579 } |
| 580 | 580 |
| 581 LayerImpl* LayerTreeImpl::LayerById(int id) { | 581 LayerImpl* LayerTreeImpl::LayerById(int id) { |
| 582 LayerIdMap::iterator iter = layer_id_map_.find(id); | 582 LayerIdMap::iterator iter = layer_id_map_.find(id); |
| 583 return iter != layer_id_map_.end() ? iter->second : NULL; | 583 return iter != layer_id_map_.end() ? iter->second : nullptr; |
| 584 } | 584 } |
| 585 | 585 |
| 586 void LayerTreeImpl::RegisterLayer(LayerImpl* layer) { | 586 void LayerTreeImpl::RegisterLayer(LayerImpl* layer) { |
| 587 DCHECK(!LayerById(layer->id())); | 587 DCHECK(!LayerById(layer->id())); |
| 588 layer_id_map_[layer->id()] = layer; | 588 layer_id_map_[layer->id()] = layer; |
| 589 } | 589 } |
| 590 | 590 |
| 591 void LayerTreeImpl::UnregisterLayer(LayerImpl* layer) { | 591 void LayerTreeImpl::UnregisterLayer(LayerImpl* layer) { |
| 592 DCHECK(LayerById(layer->id())); | 592 DCHECK(LayerById(layer->id())); |
| 593 layer_id_map_.erase(layer->id()); | 593 layer_id_map_.erase(layer->id()); |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 724 return layer_tree_host_impl_->pending_tree() == this; | 724 return layer_tree_host_impl_->pending_tree() == this; |
| 725 } | 725 } |
| 726 | 726 |
| 727 bool LayerTreeImpl::IsRecycleTree() const { | 727 bool LayerTreeImpl::IsRecycleTree() const { |
| 728 return layer_tree_host_impl_->recycle_tree() == this; | 728 return layer_tree_host_impl_->recycle_tree() == this; |
| 729 } | 729 } |
| 730 | 730 |
| 731 LayerImpl* LayerTreeImpl::FindActiveTreeLayerById(int id) { | 731 LayerImpl* LayerTreeImpl::FindActiveTreeLayerById(int id) { |
| 732 LayerTreeImpl* tree = layer_tree_host_impl_->active_tree(); | 732 LayerTreeImpl* tree = layer_tree_host_impl_->active_tree(); |
| 733 if (!tree) | 733 if (!tree) |
| 734 return NULL; | 734 return nullptr; |
| 735 return tree->LayerById(id); | 735 return tree->LayerById(id); |
| 736 } | 736 } |
| 737 | 737 |
| 738 LayerImpl* LayerTreeImpl::FindPendingTreeLayerById(int id) { | 738 LayerImpl* LayerTreeImpl::FindPendingTreeLayerById(int id) { |
| 739 LayerTreeImpl* tree = layer_tree_host_impl_->pending_tree(); | 739 LayerTreeImpl* tree = layer_tree_host_impl_->pending_tree(); |
| 740 if (!tree) | 740 if (!tree) |
| 741 return NULL; | 741 return nullptr; |
| 742 return tree->LayerById(id); | 742 return tree->LayerById(id); |
| 743 } | 743 } |
| 744 | 744 |
| 745 LayerImpl* LayerTreeImpl::FindRecycleTreeLayerById(int id) { | 745 LayerImpl* LayerTreeImpl::FindRecycleTreeLayerById(int id) { |
| 746 LayerTreeImpl* tree = layer_tree_host_impl_->recycle_tree(); | 746 LayerTreeImpl* tree = layer_tree_host_impl_->recycle_tree(); |
| 747 if (!tree) | 747 if (!tree) |
| 748 return NULL; | 748 return nullptr; |
| 749 return tree->LayerById(id); | 749 return tree->LayerById(id); |
| 750 } | 750 } |
| 751 | 751 |
| 752 bool LayerTreeImpl::PinchGestureActive() const { | 752 bool LayerTreeImpl::PinchGestureActive() const { |
| 753 return layer_tree_host_impl_->pinch_gesture_active(); | 753 return layer_tree_host_impl_->pinch_gesture_active(); |
| 754 } | 754 } |
| 755 | 755 |
| 756 BeginFrameArgs LayerTreeImpl::CurrentBeginFrameArgs() const { | 756 BeginFrameArgs LayerTreeImpl::CurrentBeginFrameArgs() const { |
| 757 return layer_tree_host_impl_->CurrentBeginFrameArgs(); | 757 return layer_tree_host_impl_->CurrentBeginFrameArgs(); |
| 758 } | 758 } |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 883 | 883 |
| 884 void LayerTreeImpl::SetRootLayerScrollOffsetDelegate( | 884 void LayerTreeImpl::SetRootLayerScrollOffsetDelegate( |
| 885 LayerScrollOffsetDelegate* root_layer_scroll_offset_delegate) { | 885 LayerScrollOffsetDelegate* root_layer_scroll_offset_delegate) { |
| 886 if (root_layer_scroll_offset_delegate_ == root_layer_scroll_offset_delegate) | 886 if (root_layer_scroll_offset_delegate_ == root_layer_scroll_offset_delegate) |
| 887 return; | 887 return; |
| 888 | 888 |
| 889 if (!root_layer_scroll_offset_delegate) { | 889 if (!root_layer_scroll_offset_delegate) { |
| 890 // Make sure we remove the proxies from their layers before | 890 // Make sure we remove the proxies from their layers before |
| 891 // releasing them. | 891 // releasing them. |
| 892 if (InnerViewportScrollLayer()) | 892 if (InnerViewportScrollLayer()) |
| 893 InnerViewportScrollLayer()->SetScrollOffsetDelegate(NULL); | 893 InnerViewportScrollLayer()->SetScrollOffsetDelegate(nullptr); |
| 894 if (OuterViewportScrollLayer()) | 894 if (OuterViewportScrollLayer()) |
| 895 OuterViewportScrollLayer()->SetScrollOffsetDelegate(NULL); | 895 OuterViewportScrollLayer()->SetScrollOffsetDelegate(nullptr); |
| 896 inner_viewport_scroll_delegate_proxy_ = nullptr; | 896 inner_viewport_scroll_delegate_proxy_ = nullptr; |
| 897 outer_viewport_scroll_delegate_proxy_ = nullptr; | 897 outer_viewport_scroll_delegate_proxy_ = nullptr; |
| 898 } | 898 } |
| 899 | 899 |
| 900 root_layer_scroll_offset_delegate_ = root_layer_scroll_offset_delegate; | 900 root_layer_scroll_offset_delegate_ = root_layer_scroll_offset_delegate; |
| 901 | 901 |
| 902 if (root_layer_scroll_offset_delegate_) { | 902 if (root_layer_scroll_offset_delegate_) { |
| 903 root_layer_scroll_offset_delegate_->UpdateRootLayerState( | 903 root_layer_scroll_offset_delegate_->UpdateRootLayerState( |
| 904 TotalScrollOffset(), | 904 TotalScrollOffset(), |
| 905 TotalMaxScrollOffset(), | 905 TotalMaxScrollOffset(), |
| (...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1197 static bool PointIsClippedBySurfaceOrClipRect( | 1197 static bool PointIsClippedBySurfaceOrClipRect( |
| 1198 const gfx::PointF& screen_space_point, | 1198 const gfx::PointF& screen_space_point, |
| 1199 const LayerImpl* layer) { | 1199 const LayerImpl* layer) { |
| 1200 // Walk up the layer tree and hit-test any render_surfaces and any layer | 1200 // Walk up the layer tree and hit-test any render_surfaces and any layer |
| 1201 // clip rects that are active. | 1201 // clip rects that are active. |
| 1202 for (; layer; layer = GetNextClippingLayer(layer)) { | 1202 for (; layer; layer = GetNextClippingLayer(layer)) { |
| 1203 if (layer->render_surface() && | 1203 if (layer->render_surface() && |
| 1204 !PointHitsRect(screen_space_point, | 1204 !PointHitsRect(screen_space_point, |
| 1205 layer->render_surface()->screen_space_transform(), | 1205 layer->render_surface()->screen_space_transform(), |
| 1206 layer->render_surface()->content_rect(), | 1206 layer->render_surface()->content_rect(), |
| 1207 NULL)) | 1207 nullptr)) |
| 1208 return true; | 1208 return true; |
| 1209 | 1209 |
| 1210 if (LayerClipsSubtree(layer) && | 1210 if (LayerClipsSubtree(layer) && |
| 1211 !PointHitsRect(screen_space_point, | 1211 !PointHitsRect(screen_space_point, |
| 1212 layer->screen_space_transform(), | 1212 layer->screen_space_transform(), |
| 1213 gfx::Rect(layer->content_bounds()), | 1213 gfx::Rect(layer->content_bounds()), |
| 1214 NULL)) | 1214 nullptr)) |
| 1215 return true; | 1215 return true; |
| 1216 } | 1216 } |
| 1217 | 1217 |
| 1218 // If we have finished walking all ancestors without having already exited, | 1218 // If we have finished walking all ancestors without having already exited, |
| 1219 // then the point is not clipped by any ancestors. | 1219 // then the point is not clipped by any ancestors. |
| 1220 return false; | 1220 return false; |
| 1221 } | 1221 } |
| 1222 | 1222 |
| 1223 static bool PointHitsLayer(const LayerImpl* layer, | 1223 static bool PointHitsLayer(const LayerImpl* layer, |
| 1224 const gfx::PointF& screen_space_point, | 1224 const gfx::PointF& screen_space_point, |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1238 | 1238 |
| 1239 // Skip the HUD layer. | 1239 // Skip the HUD layer. |
| 1240 if (layer == layer->layer_tree_impl()->hud_layer()) | 1240 if (layer == layer->layer_tree_impl()->hud_layer()) |
| 1241 return false; | 1241 return false; |
| 1242 | 1242 |
| 1243 return true; | 1243 return true; |
| 1244 } | 1244 } |
| 1245 | 1245 |
| 1246 struct FindClosestMatchingLayerDataForRecursion { | 1246 struct FindClosestMatchingLayerDataForRecursion { |
| 1247 FindClosestMatchingLayerDataForRecursion() | 1247 FindClosestMatchingLayerDataForRecursion() |
| 1248 : closest_match(NULL), | 1248 : closest_match(nullptr), |
| 1249 closest_distance(-std::numeric_limits<float>::infinity()) {} | 1249 closest_distance(-std::numeric_limits<float>::infinity()) {} |
| 1250 LayerImpl* closest_match; | 1250 LayerImpl* closest_match; |
| 1251 // Note that the positive z-axis points towards the camera, so bigger means | 1251 // Note that the positive z-axis points towards the camera, so bigger means |
| 1252 // closer in this case, counterintuitively. | 1252 // closer in this case, counterintuitively. |
| 1253 float closest_distance; | 1253 float closest_distance; |
| 1254 }; | 1254 }; |
| 1255 | 1255 |
| 1256 template <typename Functor> | 1256 template <typename Functor> |
| 1257 static void FindClosestMatchingLayer( | 1257 static void FindClosestMatchingLayer( |
| 1258 const gfx::PointF& screen_space_point, | 1258 const gfx::PointF& screen_space_point, |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1312 return layer->IsDrawnRenderSurfaceLayerListMember() || | 1312 return layer->IsDrawnRenderSurfaceLayerListMember() || |
| 1313 ScrollsAnyDrawnRenderSurfaceLayerListMember(layer) || | 1313 ScrollsAnyDrawnRenderSurfaceLayerListMember(layer) || |
| 1314 !layer->touch_event_handler_region().IsEmpty() || | 1314 !layer->touch_event_handler_region().IsEmpty() || |
| 1315 layer->have_wheel_event_handlers(); | 1315 layer->have_wheel_event_handlers(); |
| 1316 } | 1316 } |
| 1317 }; | 1317 }; |
| 1318 | 1318 |
| 1319 LayerImpl* LayerTreeImpl::FindLayerThatIsHitByPoint( | 1319 LayerImpl* LayerTreeImpl::FindLayerThatIsHitByPoint( |
| 1320 const gfx::PointF& screen_space_point) { | 1320 const gfx::PointF& screen_space_point) { |
| 1321 if (!root_layer()) | 1321 if (!root_layer()) |
| 1322 return NULL; | 1322 return nullptr; |
| 1323 if (!UpdateDrawProperties()) | 1323 if (!UpdateDrawProperties()) |
| 1324 return NULL; | 1324 return nullptr; |
| 1325 FindClosestMatchingLayerDataForRecursion data_for_recursion; | 1325 FindClosestMatchingLayerDataForRecursion data_for_recursion; |
| 1326 FindClosestMatchingLayer(screen_space_point, | 1326 FindClosestMatchingLayer(screen_space_point, |
| 1327 root_layer(), | 1327 root_layer(), |
| 1328 HitTestVisibleScrollableOrTouchableFunctor(), | 1328 HitTestVisibleScrollableOrTouchableFunctor(), |
| 1329 &data_for_recursion); | 1329 &data_for_recursion); |
| 1330 return data_for_recursion.closest_match; | 1330 return data_for_recursion.closest_match; |
| 1331 } | 1331 } |
| 1332 | 1332 |
| 1333 static bool LayerHasTouchEventHandlersAt(const gfx::PointF& screen_space_point, | 1333 static bool LayerHasTouchEventHandlersAt(const gfx::PointF& screen_space_point, |
| 1334 LayerImpl* layer_impl) { | 1334 LayerImpl* layer_impl) { |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1355 struct FindTouchEventLayerFunctor { | 1355 struct FindTouchEventLayerFunctor { |
| 1356 bool operator()(LayerImpl* layer) const { | 1356 bool operator()(LayerImpl* layer) const { |
| 1357 return LayerHasTouchEventHandlersAt(screen_space_point, layer); | 1357 return LayerHasTouchEventHandlersAt(screen_space_point, layer); |
| 1358 } | 1358 } |
| 1359 const gfx::PointF screen_space_point; | 1359 const gfx::PointF screen_space_point; |
| 1360 }; | 1360 }; |
| 1361 | 1361 |
| 1362 LayerImpl* LayerTreeImpl::FindLayerThatIsHitByPointInTouchHandlerRegion( | 1362 LayerImpl* LayerTreeImpl::FindLayerThatIsHitByPointInTouchHandlerRegion( |
| 1363 const gfx::PointF& screen_space_point) { | 1363 const gfx::PointF& screen_space_point) { |
| 1364 if (!root_layer()) | 1364 if (!root_layer()) |
| 1365 return NULL; | 1365 return nullptr; |
| 1366 if (!UpdateDrawProperties()) | 1366 if (!UpdateDrawProperties()) |
| 1367 return NULL; | 1367 return nullptr; |
| 1368 FindTouchEventLayerFunctor func = {screen_space_point}; | 1368 FindTouchEventLayerFunctor func = {screen_space_point}; |
| 1369 FindClosestMatchingLayerDataForRecursion data_for_recursion; | 1369 FindClosestMatchingLayerDataForRecursion data_for_recursion; |
| 1370 FindClosestMatchingLayer( | 1370 FindClosestMatchingLayer( |
| 1371 screen_space_point, root_layer(), func, &data_for_recursion); | 1371 screen_space_point, root_layer(), func, &data_for_recursion); |
| 1372 return data_for_recursion.closest_match; | 1372 return data_for_recursion.closest_match; |
| 1373 } | 1373 } |
| 1374 | 1374 |
| 1375 void LayerTreeImpl::RegisterSelection(const LayerSelectionBound& start, | 1375 void LayerTreeImpl::RegisterSelection(const LayerSelectionBound& start, |
| 1376 const LayerSelectionBound& end) { | 1376 const LayerSelectionBound& end) { |
| 1377 selection_start_ = start; | 1377 selection_start_ = start; |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1425 return viewport_bound; | 1425 return viewport_bound; |
| 1426 } | 1426 } |
| 1427 | 1427 |
| 1428 void LayerTreeImpl::GetViewportSelection(ViewportSelectionBound* start, | 1428 void LayerTreeImpl::GetViewportSelection(ViewportSelectionBound* start, |
| 1429 ViewportSelectionBound* end) { | 1429 ViewportSelectionBound* end) { |
| 1430 DCHECK(start); | 1430 DCHECK(start); |
| 1431 DCHECK(end); | 1431 DCHECK(end); |
| 1432 | 1432 |
| 1433 *start = ComputeViewportSelection( | 1433 *start = ComputeViewportSelection( |
| 1434 selection_start_, | 1434 selection_start_, |
| 1435 selection_start_.layer_id ? LayerById(selection_start_.layer_id) : NULL, | 1435 selection_start_.layer_id ? LayerById(selection_start_.layer_id) : nullptr
, |
| 1436 device_scale_factor()); | 1436 device_scale_factor()); |
| 1437 if (start->type == SELECTION_BOUND_CENTER || | 1437 if (start->type == SELECTION_BOUND_CENTER || |
| 1438 start->type == SELECTION_BOUND_EMPTY) { | 1438 start->type == SELECTION_BOUND_EMPTY) { |
| 1439 *end = *start; | 1439 *end = *start; |
| 1440 } else { | 1440 } else { |
| 1441 *end = ComputeViewportSelection( | 1441 *end = ComputeViewportSelection( |
| 1442 selection_end_, | 1442 selection_end_, |
| 1443 selection_end_.layer_id ? LayerById(selection_end_.layer_id) : NULL, | 1443 selection_end_.layer_id ? LayerById(selection_end_.layer_id) : nullptr, |
| 1444 device_scale_factor()); | 1444 device_scale_factor()); |
| 1445 } | 1445 } |
| 1446 } | 1446 } |
| 1447 | 1447 |
| 1448 void LayerTreeImpl::RegisterPictureLayerImpl(PictureLayerImpl* layer) { | 1448 void LayerTreeImpl::RegisterPictureLayerImpl(PictureLayerImpl* layer) { |
| 1449 layer_tree_host_impl_->RegisterPictureLayerImpl(layer); | 1449 layer_tree_host_impl_->RegisterPictureLayerImpl(layer); |
| 1450 } | 1450 } |
| 1451 | 1451 |
| 1452 void LayerTreeImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { | 1452 void LayerTreeImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { |
| 1453 layer_tree_host_impl_->UnregisterPictureLayerImpl(layer); | 1453 layer_tree_host_impl_->UnregisterPictureLayerImpl(layer); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1496 page_scale, | 1496 page_scale, |
| 1497 duration.InSecondsF()); | 1497 duration.InSecondsF()); |
| 1498 } | 1498 } |
| 1499 } | 1499 } |
| 1500 | 1500 |
| 1501 scoped_ptr<PageScaleAnimation> LayerTreeImpl::TakePageScaleAnimation() { | 1501 scoped_ptr<PageScaleAnimation> LayerTreeImpl::TakePageScaleAnimation() { |
| 1502 return page_scale_animation_.Pass(); | 1502 return page_scale_animation_.Pass(); |
| 1503 } | 1503 } |
| 1504 | 1504 |
| 1505 } // namespace cc | 1505 } // namespace cc |
| OLD | NEW |