| 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 14 matching lines...) Expand all Loading... |
| 25 #include "cc/trees/layer_tree_host_impl.h" | 25 #include "cc/trees/layer_tree_host_impl.h" |
| 26 #include "ui/gfx/point_conversions.h" | 26 #include "ui/gfx/point_conversions.h" |
| 27 #include "ui/gfx/size_conversions.h" | 27 #include "ui/gfx/size_conversions.h" |
| 28 #include "ui/gfx/vector2d_conversions.h" | 28 #include "ui/gfx/vector2d_conversions.h" |
| 29 | 29 |
| 30 namespace cc { | 30 namespace cc { |
| 31 | 31 |
| 32 // This class exists to split the LayerScrollOffsetDelegate between the | 32 // This class exists to split the LayerScrollOffsetDelegate between the |
| 33 // InnerViewportScrollLayer and the OuterViewportScrollLayer in a manner | 33 // InnerViewportScrollLayer and the OuterViewportScrollLayer in a manner |
| 34 // that never requires the embedder or LayerImpl to know about. | 34 // that never requires the embedder or LayerImpl to know about. |
| 35 class LayerScrollOffsetDelegateProxy : public LayerScrollOffsetDelegate { | 35 class LayerScrollOffsetDelegateProxy : public LayerImpl::ScrollOffsetDelegate { |
| 36 public: | 36 public: |
| 37 LayerScrollOffsetDelegateProxy(LayerImpl* layer, | 37 LayerScrollOffsetDelegateProxy(LayerImpl* layer, |
| 38 LayerScrollOffsetDelegate* delegate, | 38 LayerScrollOffsetDelegate* delegate, |
| 39 LayerTreeImpl* layer_tree) | 39 LayerTreeImpl* layer_tree) |
| 40 : layer_(layer), delegate_(delegate), layer_tree_impl_(layer_tree) {} | 40 : layer_(layer), delegate_(delegate), layer_tree_impl_(layer_tree) {} |
| 41 virtual ~LayerScrollOffsetDelegateProxy() {} |
| 41 | 42 |
| 42 gfx::Vector2dF last_set_scroll_offset() const { | 43 gfx::Vector2dF last_set_scroll_offset() const { |
| 43 return last_set_scroll_offset_; | 44 return last_set_scroll_offset_; |
| 44 } | 45 } |
| 45 | 46 |
| 46 // LayerScrollOffsetDelegate implementation. | 47 // LayerScrollOffsetDelegate implementation. |
| 47 | |
| 48 virtual void SetTotalScrollOffset(const gfx::Vector2dF& new_offset) OVERRIDE { | 48 virtual void SetTotalScrollOffset(const gfx::Vector2dF& new_offset) OVERRIDE { |
| 49 last_set_scroll_offset_ = new_offset; | 49 last_set_scroll_offset_ = new_offset; |
| 50 layer_tree_impl_->UpdateScrollOffsetDelegate(); | 50 layer_tree_impl_->UpdateScrollOffsetDelegate(); |
| 51 } | 51 } |
| 52 | 52 |
| 53 virtual gfx::Vector2dF GetTotalScrollOffset() OVERRIDE { | 53 virtual gfx::Vector2dF GetTotalScrollOffset() OVERRIDE { |
| 54 return layer_tree_impl_->GetDelegatedScrollOffset(layer_); | 54 return layer_tree_impl_->GetDelegatedScrollOffset(layer_); |
| 55 } | 55 } |
| 56 | 56 |
| 57 virtual bool IsExternalFlingActive() const OVERRIDE { | 57 virtual bool IsExternalFlingActive() const OVERRIDE { |
| 58 return delegate_->IsExternalFlingActive(); | 58 return delegate_->IsExternalFlingActive(); |
| 59 } | 59 } |
| 60 | 60 |
| 61 // Functions below this point are never called by LayerImpl on its | |
| 62 // LayerScrollOffsetDelegate, and so are not implemented. | |
| 63 virtual void SetMaxScrollOffset(const gfx::Vector2dF&) OVERRIDE { | |
| 64 NOTIMPLEMENTED(); | |
| 65 } | |
| 66 | |
| 67 virtual void SetTotalPageScaleFactorAndLimits(float, float, float) OVERRIDE { | |
| 68 NOTIMPLEMENTED(); | |
| 69 } | |
| 70 | |
| 71 virtual void SetScrollableSize(const gfx::SizeF& scrollable_size) OVERRIDE { | |
| 72 NOTIMPLEMENTED(); | |
| 73 } | |
| 74 | |
| 75 private: | 61 private: |
| 76 LayerImpl* layer_; | 62 LayerImpl* layer_; |
| 77 LayerScrollOffsetDelegate* delegate_; | 63 LayerScrollOffsetDelegate* delegate_; |
| 78 LayerTreeImpl* layer_tree_impl_; | 64 LayerTreeImpl* layer_tree_impl_; |
| 79 gfx::Vector2dF last_set_scroll_offset_; | 65 gfx::Vector2dF last_set_scroll_offset_; |
| 80 }; | 66 }; |
| 81 | 67 |
| 82 LayerTreeImpl::LayerTreeImpl(LayerTreeHostImpl* layer_tree_host_impl) | 68 LayerTreeImpl::LayerTreeImpl(LayerTreeHostImpl* layer_tree_host_impl) |
| 83 : layer_tree_host_impl_(layer_tree_host_impl), | 69 : layer_tree_host_impl_(layer_tree_host_impl), |
| 84 source_frame_number_(-1), | 70 source_frame_number_(-1), |
| (...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 313 if (min_page_scale_factor == min_page_scale_factor_ && | 299 if (min_page_scale_factor == min_page_scale_factor_ && |
| 314 max_page_scale_factor == max_page_scale_factor_ && | 300 max_page_scale_factor == max_page_scale_factor_ && |
| 315 page_scale_factor == page_scale_factor_) | 301 page_scale_factor == page_scale_factor_) |
| 316 return; | 302 return; |
| 317 | 303 |
| 318 min_page_scale_factor_ = min_page_scale_factor; | 304 min_page_scale_factor_ = min_page_scale_factor; |
| 319 max_page_scale_factor_ = max_page_scale_factor; | 305 max_page_scale_factor_ = max_page_scale_factor; |
| 320 page_scale_factor_ = page_scale_factor; | 306 page_scale_factor_ = page_scale_factor; |
| 321 | 307 |
| 322 if (root_layer_scroll_offset_delegate_) { | 308 if (root_layer_scroll_offset_delegate_) { |
| 323 root_layer_scroll_offset_delegate_->SetTotalPageScaleFactorAndLimits( | 309 root_layer_scroll_offset_delegate_->UpdateRootLayerState( |
| 310 TotalScrollOffset(), |
| 311 TotalMaxScrollOffset(), |
| 312 ScrollableSize(), |
| 324 total_page_scale_factor(), | 313 total_page_scale_factor(), |
| 325 this->min_page_scale_factor(), | 314 this->min_page_scale_factor(), |
| 326 this->max_page_scale_factor()); | 315 this->max_page_scale_factor()); |
| 327 } | 316 } |
| 328 | 317 |
| 329 ForceScrollbarParameterUpdateAfterScaleChange(page_scale_layer()); | 318 ForceScrollbarParameterUpdateAfterScaleChange(page_scale_layer()); |
| 330 } | 319 } |
| 331 | 320 |
| 332 void LayerTreeImpl::SetPageScaleDelta(float delta) { | 321 void LayerTreeImpl::SetPageScaleDelta(float delta) { |
| 333 // Clamp to the current min/max limits. | 322 // Clamp to the current min/max limits. |
| (...skipping 13 matching lines...) Expand all Loading... |
| 347 if (pending_tree) { | 336 if (pending_tree) { |
| 348 DCHECK_EQ(1, pending_tree->sent_page_scale_delta()); | 337 DCHECK_EQ(1, pending_tree->sent_page_scale_delta()); |
| 349 pending_tree->SetPageScaleDelta( | 338 pending_tree->SetPageScaleDelta( |
| 350 page_scale_delta_ / sent_page_scale_delta_); | 339 page_scale_delta_ / sent_page_scale_delta_); |
| 351 } | 340 } |
| 352 } | 341 } |
| 353 | 342 |
| 354 set_needs_update_draw_properties(); | 343 set_needs_update_draw_properties(); |
| 355 | 344 |
| 356 if (root_layer_scroll_offset_delegate_) { | 345 if (root_layer_scroll_offset_delegate_) { |
| 357 root_layer_scroll_offset_delegate_->SetTotalPageScaleFactorAndLimits( | 346 root_layer_scroll_offset_delegate_->UpdateRootLayerState( |
| 347 TotalScrollOffset(), |
| 348 TotalMaxScrollOffset(), |
| 349 ScrollableSize(), |
| 358 total_page_scale_factor(), | 350 total_page_scale_factor(), |
| 359 min_page_scale_factor(), | 351 min_page_scale_factor(), |
| 360 max_page_scale_factor()); | 352 max_page_scale_factor()); |
| 361 } | 353 } |
| 362 } | 354 } |
| 363 | 355 |
| 364 gfx::SizeF LayerTreeImpl::ScrollableViewportSize() const { | 356 gfx::SizeF LayerTreeImpl::ScrollableViewportSize() const { |
| 365 if (outer_viewport_scroll_layer_) | 357 if (outer_viewport_scroll_layer_) |
| 366 return layer_tree_host_impl_->UnscaledScrollableViewportSize(); | 358 return layer_tree_host_impl_->UnscaledScrollableViewportSize(); |
| 367 else | 359 else |
| (...skipping 443 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 811 InnerViewportScrollLayer()->SetScrollOffsetDelegate(NULL); | 803 InnerViewportScrollLayer()->SetScrollOffsetDelegate(NULL); |
| 812 if (OuterViewportScrollLayer()) | 804 if (OuterViewportScrollLayer()) |
| 813 OuterViewportScrollLayer()->SetScrollOffsetDelegate(NULL); | 805 OuterViewportScrollLayer()->SetScrollOffsetDelegate(NULL); |
| 814 inner_viewport_scroll_delegate_proxy_.reset(); | 806 inner_viewport_scroll_delegate_proxy_.reset(); |
| 815 outer_viewport_scroll_delegate_proxy_.reset(); | 807 outer_viewport_scroll_delegate_proxy_.reset(); |
| 816 } | 808 } |
| 817 | 809 |
| 818 root_layer_scroll_offset_delegate_ = root_layer_scroll_offset_delegate; | 810 root_layer_scroll_offset_delegate_ = root_layer_scroll_offset_delegate; |
| 819 | 811 |
| 820 if (root_layer_scroll_offset_delegate_) { | 812 if (root_layer_scroll_offset_delegate_) { |
| 821 root_layer_scroll_offset_delegate_->SetTotalScrollOffset( | 813 root_layer_scroll_offset_delegate_->UpdateRootLayerState( |
| 822 TotalScrollOffset()); | 814 TotalScrollOffset(), |
| 823 root_layer_scroll_offset_delegate_->SetMaxScrollOffset( | 815 TotalMaxScrollOffset(), |
| 824 TotalMaxScrollOffset()); | 816 ScrollableSize(), |
| 825 root_layer_scroll_offset_delegate_->SetScrollableSize(ScrollableSize()); | |
| 826 root_layer_scroll_offset_delegate_->SetTotalPageScaleFactorAndLimits( | |
| 827 total_page_scale_factor(), | 817 total_page_scale_factor(), |
| 828 min_page_scale_factor(), | 818 min_page_scale_factor(), |
| 829 max_page_scale_factor()); | 819 max_page_scale_factor()); |
| 830 | 820 |
| 831 if (inner_viewport_scroll_layer_) { | 821 if (inner_viewport_scroll_layer_) { |
| 832 inner_viewport_scroll_delegate_proxy_ = make_scoped_ptr( | 822 inner_viewport_scroll_delegate_proxy_ = make_scoped_ptr( |
| 833 new LayerScrollOffsetDelegateProxy(InnerViewportScrollLayer(), | 823 new LayerScrollOffsetDelegateProxy(InnerViewportScrollLayer(), |
| 834 root_layer_scroll_offset_delegate_, | 824 root_layer_scroll_offset_delegate_, |
| 835 this)); | 825 this)); |
| 836 inner_viewport_scroll_layer_->SetScrollOffsetDelegate( | 826 inner_viewport_scroll_layer_->SetScrollOffsetDelegate( |
| (...skipping 14 matching lines...) Expand all Loading... |
| 851 void LayerTreeImpl::UpdateScrollOffsetDelegate() { | 841 void LayerTreeImpl::UpdateScrollOffsetDelegate() { |
| 852 DCHECK(InnerViewportScrollLayer()); | 842 DCHECK(InnerViewportScrollLayer()); |
| 853 DCHECK(root_layer_scroll_offset_delegate_); | 843 DCHECK(root_layer_scroll_offset_delegate_); |
| 854 | 844 |
| 855 gfx::Vector2dF offset = | 845 gfx::Vector2dF offset = |
| 856 inner_viewport_scroll_delegate_proxy_->last_set_scroll_offset(); | 846 inner_viewport_scroll_delegate_proxy_->last_set_scroll_offset(); |
| 857 | 847 |
| 858 if (OuterViewportScrollLayer()) | 848 if (OuterViewportScrollLayer()) |
| 859 offset += outer_viewport_scroll_delegate_proxy_->last_set_scroll_offset(); | 849 offset += outer_viewport_scroll_delegate_proxy_->last_set_scroll_offset(); |
| 860 | 850 |
| 861 root_layer_scroll_offset_delegate_->SetTotalScrollOffset(offset); | 851 root_layer_scroll_offset_delegate_->UpdateRootLayerState( |
| 862 root_layer_scroll_offset_delegate_->SetMaxScrollOffset( | 852 offset, |
| 863 TotalMaxScrollOffset()); | 853 TotalMaxScrollOffset(), |
| 854 ScrollableSize(), |
| 855 total_page_scale_factor(), |
| 856 min_page_scale_factor(), |
| 857 max_page_scale_factor()); |
| 864 } | 858 } |
| 865 | 859 |
| 866 gfx::Vector2dF LayerTreeImpl::GetDelegatedScrollOffset(LayerImpl* layer) { | 860 gfx::Vector2dF LayerTreeImpl::GetDelegatedScrollOffset(LayerImpl* layer) { |
| 867 DCHECK(root_layer_scroll_offset_delegate_); | 861 DCHECK(root_layer_scroll_offset_delegate_); |
| 868 DCHECK(InnerViewportScrollLayer()); | 862 DCHECK(InnerViewportScrollLayer()); |
| 869 if (layer == InnerViewportScrollLayer() && !OuterViewportScrollLayer()) | 863 if (layer == InnerViewportScrollLayer() && !OuterViewportScrollLayer()) |
| 870 return root_layer_scroll_offset_delegate_->GetTotalScrollOffset(); | 864 return root_layer_scroll_offset_delegate_->GetTotalScrollOffset(); |
| 871 | 865 |
| 872 // If we get here, we have both inner/outer viewports, and need to distribute | 866 // If we get here, we have both inner/outer viewports, and need to distribute |
| 873 // the scroll offset between them. | 867 // the scroll offset between them. |
| (...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1278 LayerImpl* LayerTreeImpl::FindLayerThatIsHitByPointInTouchHandlerRegion( | 1272 LayerImpl* LayerTreeImpl::FindLayerThatIsHitByPointInTouchHandlerRegion( |
| 1279 const gfx::PointF& screen_space_point) { | 1273 const gfx::PointF& screen_space_point) { |
| 1280 FindTouchEventLayerFunctor func = {screen_space_point}; | 1274 FindTouchEventLayerFunctor func = {screen_space_point}; |
| 1281 FindClosestMatchingLayerDataForRecursion data_for_recursion; | 1275 FindClosestMatchingLayerDataForRecursion data_for_recursion; |
| 1282 FindClosestMatchingLayer( | 1276 FindClosestMatchingLayer( |
| 1283 screen_space_point, root_layer(), func, &data_for_recursion); | 1277 screen_space_point, root_layer(), func, &data_for_recursion); |
| 1284 return data_for_recursion.closest_match; | 1278 return data_for_recursion.closest_match; |
| 1285 } | 1279 } |
| 1286 | 1280 |
| 1287 } // namespace cc | 1281 } // namespace cc |
| OLD | NEW |