| 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 "base/debug/trace_event.h" | 7 #include "base/debug/trace_event.h" |
| 8 #include "cc/animation/keyframed_animation_curve.h" | 8 #include "cc/animation/keyframed_animation_curve.h" |
| 9 #include "cc/animation/scrollbar_animation_controller.h" | 9 #include "cc/animation/scrollbar_animation_controller.h" |
| 10 #include "cc/animation/scrollbar_animation_controller_linear_fade.h" | 10 #include "cc/animation/scrollbar_animation_controller_linear_fade.h" |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 #include "cc/trees/layer_tree_host_common.h" | 21 #include "cc/trees/layer_tree_host_common.h" |
| 22 #include "cc/trees/layer_tree_host_impl.h" | 22 #include "cc/trees/layer_tree_host_impl.h" |
| 23 #include "ui/gfx/size_conversions.h" | 23 #include "ui/gfx/size_conversions.h" |
| 24 #include "ui/gfx/vector2d_conversions.h" | 24 #include "ui/gfx/vector2d_conversions.h" |
| 25 | 25 |
| 26 namespace cc { | 26 namespace cc { |
| 27 | 27 |
| 28 // This class exists to split the LayerScrollOffsetDelegate between the | 28 // This class exists to split the LayerScrollOffsetDelegate between the |
| 29 // InnerViewportScrollLayer and the OuterViewportScrollLayer in a manner | 29 // InnerViewportScrollLayer and the OuterViewportScrollLayer in a manner |
| 30 // that never requires the embedder or LayerImpl to know about. | 30 // that never requires the embedder or LayerImpl to know about. |
| 31 class LayerScrollOffsetDelegateProxy : public LayerScrollOffsetDelegate { | 31 class LayerScrollOffsetDelegateProxy : public LayerImpl::ScrollOffsetDelegate { |
| 32 public: | 32 public: |
| 33 LayerScrollOffsetDelegateProxy(LayerImpl* layer, | 33 LayerScrollOffsetDelegateProxy(LayerImpl* layer, |
| 34 LayerScrollOffsetDelegate* delegate, | 34 LayerScrollOffsetDelegate* delegate, |
| 35 LayerTreeImpl* layer_tree) | 35 LayerTreeImpl* layer_tree) |
| 36 : layer_(layer), delegate_(delegate), layer_tree_impl_(layer_tree) {} | 36 : layer_(layer), delegate_(delegate), layer_tree_impl_(layer_tree) {} |
| 37 virtual ~LayerScrollOffsetDelegateProxy() {} |
| 37 | 38 |
| 38 gfx::Vector2dF last_set_scroll_offset() const { | 39 gfx::Vector2dF last_set_scroll_offset() const { |
| 39 return last_set_scroll_offset_; | 40 return last_set_scroll_offset_; |
| 40 } | 41 } |
| 41 | 42 |
| 42 // LayerScrollOffsetDelegate implementation. | 43 // LayerScrollOffsetDelegate implementation. |
| 43 | |
| 44 virtual void SetTotalScrollOffset(const gfx::Vector2dF& new_offset) OVERRIDE { | 44 virtual void SetTotalScrollOffset(const gfx::Vector2dF& new_offset) OVERRIDE { |
| 45 last_set_scroll_offset_ = new_offset; | 45 last_set_scroll_offset_ = new_offset; |
| 46 layer_tree_impl_->UpdateScrollOffsetDelegate(); | 46 layer_tree_impl_->UpdateScrollOffsetDelegate(); |
| 47 } | 47 } |
| 48 | 48 |
| 49 virtual gfx::Vector2dF GetTotalScrollOffset() OVERRIDE { | 49 virtual gfx::Vector2dF GetTotalScrollOffset() OVERRIDE { |
| 50 return layer_tree_impl_->GetDelegatedScrollOffset(layer_); | 50 return layer_tree_impl_->GetDelegatedScrollOffset(layer_); |
| 51 } | 51 } |
| 52 | 52 |
| 53 virtual bool IsExternalFlingActive() const OVERRIDE { | 53 virtual bool IsExternalFlingActive() const OVERRIDE { |
| 54 return delegate_->IsExternalFlingActive(); | 54 return delegate_->IsExternalFlingActive(); |
| 55 } | 55 } |
| 56 | 56 |
| 57 // Functions below this point are never called by LayerImpl on its | |
| 58 // LayerScrollOffsetDelegate, and so are not implemented. | |
| 59 virtual void SetMaxScrollOffset(const gfx::Vector2dF&) OVERRIDE { | |
| 60 NOTIMPLEMENTED(); | |
| 61 } | |
| 62 | |
| 63 virtual void SetTotalPageScaleFactorAndLimits(float, float, float) OVERRIDE { | |
| 64 NOTIMPLEMENTED(); | |
| 65 } | |
| 66 | |
| 67 virtual void SetScrollableSize(const gfx::SizeF& scrollable_size) OVERRIDE { | |
| 68 NOTIMPLEMENTED(); | |
| 69 } | |
| 70 | |
| 71 private: | 57 private: |
| 72 LayerImpl* layer_; | 58 LayerImpl* layer_; |
| 73 LayerScrollOffsetDelegate* delegate_; | 59 LayerScrollOffsetDelegate* delegate_; |
| 74 LayerTreeImpl* layer_tree_impl_; | 60 LayerTreeImpl* layer_tree_impl_; |
| 75 gfx::Vector2dF last_set_scroll_offset_; | 61 gfx::Vector2dF last_set_scroll_offset_; |
| 76 }; | 62 }; |
| 77 | 63 |
| 78 LayerTreeImpl::LayerTreeImpl(LayerTreeHostImpl* layer_tree_host_impl) | 64 LayerTreeImpl::LayerTreeImpl(LayerTreeHostImpl* layer_tree_host_impl) |
| 79 : layer_tree_host_impl_(layer_tree_host_impl), | 65 : layer_tree_host_impl_(layer_tree_host_impl), |
| 80 source_frame_number_(-1), | 66 source_frame_number_(-1), |
| (...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 299 if (min_page_scale_factor == min_page_scale_factor_ && | 285 if (min_page_scale_factor == min_page_scale_factor_ && |
| 300 max_page_scale_factor == max_page_scale_factor_ && | 286 max_page_scale_factor == max_page_scale_factor_ && |
| 301 page_scale_factor == page_scale_factor_) | 287 page_scale_factor == page_scale_factor_) |
| 302 return; | 288 return; |
| 303 | 289 |
| 304 min_page_scale_factor_ = min_page_scale_factor; | 290 min_page_scale_factor_ = min_page_scale_factor; |
| 305 max_page_scale_factor_ = max_page_scale_factor; | 291 max_page_scale_factor_ = max_page_scale_factor; |
| 306 page_scale_factor_ = page_scale_factor; | 292 page_scale_factor_ = page_scale_factor; |
| 307 | 293 |
| 308 if (root_layer_scroll_offset_delegate_) { | 294 if (root_layer_scroll_offset_delegate_) { |
| 309 root_layer_scroll_offset_delegate_->SetTotalPageScaleFactorAndLimits( | 295 root_layer_scroll_offset_delegate_->UpdateRootLayerState( |
| 296 TotalScrollOffset(), |
| 297 TotalMaxScrollOffset(), |
| 298 ScrollableSize(), |
| 310 total_page_scale_factor(), | 299 total_page_scale_factor(), |
| 311 this->min_page_scale_factor(), | 300 this->min_page_scale_factor(), |
| 312 this->max_page_scale_factor()); | 301 this->max_page_scale_factor()); |
| 313 } | 302 } |
| 314 | 303 |
| 315 ForceScrollbarParameterUpdateAfterScaleChange(page_scale_layer()); | 304 ForceScrollbarParameterUpdateAfterScaleChange(page_scale_layer()); |
| 316 } | 305 } |
| 317 | 306 |
| 318 void LayerTreeImpl::SetPageScaleDelta(float delta) { | 307 void LayerTreeImpl::SetPageScaleDelta(float delta) { |
| 319 // Clamp to the current min/max limits. | 308 // Clamp to the current min/max limits. |
| (...skipping 13 matching lines...) Expand all Loading... |
| 333 if (pending_tree) { | 322 if (pending_tree) { |
| 334 DCHECK_EQ(1, pending_tree->sent_page_scale_delta()); | 323 DCHECK_EQ(1, pending_tree->sent_page_scale_delta()); |
| 335 pending_tree->SetPageScaleDelta( | 324 pending_tree->SetPageScaleDelta( |
| 336 page_scale_delta_ / sent_page_scale_delta_); | 325 page_scale_delta_ / sent_page_scale_delta_); |
| 337 } | 326 } |
| 338 } | 327 } |
| 339 | 328 |
| 340 set_needs_update_draw_properties(); | 329 set_needs_update_draw_properties(); |
| 341 | 330 |
| 342 if (root_layer_scroll_offset_delegate_) { | 331 if (root_layer_scroll_offset_delegate_) { |
| 343 root_layer_scroll_offset_delegate_->SetTotalPageScaleFactorAndLimits( | 332 root_layer_scroll_offset_delegate_->UpdateRootLayerState( |
| 333 TotalScrollOffset(), |
| 334 TotalMaxScrollOffset(), |
| 335 ScrollableSize(), |
| 344 total_page_scale_factor(), | 336 total_page_scale_factor(), |
| 345 min_page_scale_factor(), | 337 min_page_scale_factor(), |
| 346 max_page_scale_factor()); | 338 max_page_scale_factor()); |
| 347 } | 339 } |
| 348 } | 340 } |
| 349 | 341 |
| 350 gfx::SizeF LayerTreeImpl::ScrollableViewportSize() const { | 342 gfx::SizeF LayerTreeImpl::ScrollableViewportSize() const { |
| 351 if (outer_viewport_scroll_layer_) | 343 if (outer_viewport_scroll_layer_) |
| 352 return layer_tree_host_impl_->UnscaledScrollableViewportSize(); | 344 return layer_tree_host_impl_->UnscaledScrollableViewportSize(); |
| 353 else | 345 else |
| (...skipping 426 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 780 InnerViewportScrollLayer()->SetScrollOffsetDelegate(NULL); | 772 InnerViewportScrollLayer()->SetScrollOffsetDelegate(NULL); |
| 781 if (OuterViewportScrollLayer()) | 773 if (OuterViewportScrollLayer()) |
| 782 OuterViewportScrollLayer()->SetScrollOffsetDelegate(NULL); | 774 OuterViewportScrollLayer()->SetScrollOffsetDelegate(NULL); |
| 783 inner_viewport_scroll_delegate_proxy_.reset(); | 775 inner_viewport_scroll_delegate_proxy_.reset(); |
| 784 outer_viewport_scroll_delegate_proxy_.reset(); | 776 outer_viewport_scroll_delegate_proxy_.reset(); |
| 785 } | 777 } |
| 786 | 778 |
| 787 root_layer_scroll_offset_delegate_ = root_layer_scroll_offset_delegate; | 779 root_layer_scroll_offset_delegate_ = root_layer_scroll_offset_delegate; |
| 788 | 780 |
| 789 if (root_layer_scroll_offset_delegate_) { | 781 if (root_layer_scroll_offset_delegate_) { |
| 790 root_layer_scroll_offset_delegate_->SetTotalScrollOffset( | 782 root_layer_scroll_offset_delegate_->UpdateRootLayerState( |
| 791 TotalScrollOffset()); | 783 TotalScrollOffset(), |
| 792 root_layer_scroll_offset_delegate_->SetMaxScrollOffset( | 784 TotalMaxScrollOffset(), |
| 793 TotalMaxScrollOffset()); | 785 ScrollableSize(), |
| 794 root_layer_scroll_offset_delegate_->SetScrollableSize(ScrollableSize()); | |
| 795 root_layer_scroll_offset_delegate_->SetTotalPageScaleFactorAndLimits( | |
| 796 total_page_scale_factor(), | 786 total_page_scale_factor(), |
| 797 min_page_scale_factor(), | 787 min_page_scale_factor(), |
| 798 max_page_scale_factor()); | 788 max_page_scale_factor()); |
| 799 | 789 |
| 800 if (inner_viewport_scroll_layer_) { | 790 if (inner_viewport_scroll_layer_) { |
| 801 inner_viewport_scroll_delegate_proxy_ = make_scoped_ptr( | 791 inner_viewport_scroll_delegate_proxy_ = make_scoped_ptr( |
| 802 new LayerScrollOffsetDelegateProxy(InnerViewportScrollLayer(), | 792 new LayerScrollOffsetDelegateProxy(InnerViewportScrollLayer(), |
| 803 root_layer_scroll_offset_delegate_, | 793 root_layer_scroll_offset_delegate_, |
| 804 this)); | 794 this)); |
| 805 inner_viewport_scroll_layer_->SetScrollOffsetDelegate( | 795 inner_viewport_scroll_layer_->SetScrollOffsetDelegate( |
| (...skipping 14 matching lines...) Expand all Loading... |
| 820 void LayerTreeImpl::UpdateScrollOffsetDelegate() { | 810 void LayerTreeImpl::UpdateScrollOffsetDelegate() { |
| 821 DCHECK(InnerViewportScrollLayer()); | 811 DCHECK(InnerViewportScrollLayer()); |
| 822 DCHECK(root_layer_scroll_offset_delegate_); | 812 DCHECK(root_layer_scroll_offset_delegate_); |
| 823 | 813 |
| 824 gfx::Vector2dF offset = | 814 gfx::Vector2dF offset = |
| 825 inner_viewport_scroll_delegate_proxy_->last_set_scroll_offset(); | 815 inner_viewport_scroll_delegate_proxy_->last_set_scroll_offset(); |
| 826 | 816 |
| 827 if (OuterViewportScrollLayer()) | 817 if (OuterViewportScrollLayer()) |
| 828 offset += outer_viewport_scroll_delegate_proxy_->last_set_scroll_offset(); | 818 offset += outer_viewport_scroll_delegate_proxy_->last_set_scroll_offset(); |
| 829 | 819 |
| 830 root_layer_scroll_offset_delegate_->SetTotalScrollOffset(offset); | 820 root_layer_scroll_offset_delegate_->UpdateRootLayerState( |
| 831 root_layer_scroll_offset_delegate_->SetMaxScrollOffset( | 821 offset, |
| 832 TotalMaxScrollOffset()); | 822 TotalMaxScrollOffset(), |
| 823 ScrollableSize(), |
| 824 total_page_scale_factor(), |
| 825 min_page_scale_factor(), |
| 826 max_page_scale_factor()); |
| 833 } | 827 } |
| 834 | 828 |
| 835 gfx::Vector2dF LayerTreeImpl::GetDelegatedScrollOffset(LayerImpl* layer) { | 829 gfx::Vector2dF LayerTreeImpl::GetDelegatedScrollOffset(LayerImpl* layer) { |
| 836 DCHECK(root_layer_scroll_offset_delegate_); | 830 DCHECK(root_layer_scroll_offset_delegate_); |
| 837 DCHECK(InnerViewportScrollLayer()); | 831 DCHECK(InnerViewportScrollLayer()); |
| 838 if (layer == InnerViewportScrollLayer() && !OuterViewportScrollLayer()) | 832 if (layer == InnerViewportScrollLayer() && !OuterViewportScrollLayer()) |
| 839 return root_layer_scroll_offset_delegate_->GetTotalScrollOffset(); | 833 return root_layer_scroll_offset_delegate_->GetTotalScrollOffset(); |
| 840 | 834 |
| 841 // If we get here, we have both inner/outer viewports, and need to distribute | 835 // If we get here, we have both inner/outer viewports, and need to distribute |
| 842 // the scroll offset between them. | 836 // the scroll offset between them. |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 978 const std::vector<LayerImpl*>& LayerTreeImpl::LayersWithCopyOutputRequest() | 972 const std::vector<LayerImpl*>& LayerTreeImpl::LayersWithCopyOutputRequest() |
| 979 const { | 973 const { |
| 980 // Only the active tree needs to know about layers with copy requests, as | 974 // Only the active tree needs to know about layers with copy requests, as |
| 981 // they are aborted if not serviced during draw. | 975 // they are aborted if not serviced during draw. |
| 982 DCHECK(IsActiveTree()); | 976 DCHECK(IsActiveTree()); |
| 983 | 977 |
| 984 return layers_with_copy_output_request_; | 978 return layers_with_copy_output_request_; |
| 985 } | 979 } |
| 986 | 980 |
| 987 } // namespace cc | 981 } // namespace cc |
| OLD | NEW |