| 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/base/math_util.h" | 10 #include "cc/base/math_util.h" |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 45 } | 45 } |
| 46 | 46 |
| 47 virtual gfx::Vector2dF GetTotalScrollOffset() OVERRIDE { | 47 virtual gfx::Vector2dF GetTotalScrollOffset() OVERRIDE { |
| 48 return layer_tree_impl_->GetDelegatedScrollOffset(layer_); | 48 return layer_tree_impl_->GetDelegatedScrollOffset(layer_); |
| 49 } | 49 } |
| 50 | 50 |
| 51 virtual bool IsExternalFlingActive() const OVERRIDE { | 51 virtual bool IsExternalFlingActive() const OVERRIDE { |
| 52 return delegate_->IsExternalFlingActive(); | 52 return delegate_->IsExternalFlingActive(); |
| 53 } | 53 } |
| 54 | 54 |
| 55 // Functions below this point are never called by LayerImpl on its | 55 // This is never called by LayerImpl on its LayerScrollOffsetDelegate, and so |
| 56 // LayerScrollOffsetDelegate, and so are not implemented. | 56 // has been left not implemented. |
| 57 virtual void SetMaxScrollOffset(const gfx::Vector2dF&) OVERRIDE { | 57 virtual void UpdateRootLayerState(const gfx::Vector2dF& total_scroll_offset, |
| 58 const gfx::Vector2dF& max_scroll_offset, |
| 59 const gfx::SizeF& scrollable_size, |
| 60 float page_scale_factor, |
| 61 float min_page_scale_factor, |
| 62 float max_page_scale_factor) OVERRIDE { |
| 58 NOTIMPLEMENTED(); | 63 NOTIMPLEMENTED(); |
| 59 } | 64 } |
| 60 | 65 |
| 61 virtual void SetTotalPageScaleFactorAndLimits(float, float, float) OVERRIDE { | |
| 62 NOTIMPLEMENTED(); | |
| 63 } | |
| 64 | |
| 65 virtual void SetScrollableSize(const gfx::SizeF& scrollable_size) OVERRIDE { | |
| 66 NOTIMPLEMENTED(); | |
| 67 } | |
| 68 | |
| 69 private: | 66 private: |
| 70 LayerImpl* layer_; | 67 LayerImpl* layer_; |
| 71 LayerScrollOffsetDelegate* delegate_; | 68 LayerScrollOffsetDelegate* delegate_; |
| 72 LayerTreeImpl* layer_tree_impl_; | 69 LayerTreeImpl* layer_tree_impl_; |
| 73 gfx::Vector2dF last_set_scroll_offset_; | 70 gfx::Vector2dF last_set_scroll_offset_; |
| 74 }; | 71 }; |
| 75 | 72 |
| 76 LayerTreeImpl::LayerTreeImpl(LayerTreeHostImpl* layer_tree_host_impl) | 73 LayerTreeImpl::LayerTreeImpl(LayerTreeHostImpl* layer_tree_host_impl) |
| 77 : layer_tree_host_impl_(layer_tree_host_impl), | 74 : layer_tree_host_impl_(layer_tree_host_impl), |
| 78 source_frame_number_(-1), | 75 source_frame_number_(-1), |
| (...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 297 if (min_page_scale_factor == min_page_scale_factor_ && | 294 if (min_page_scale_factor == min_page_scale_factor_ && |
| 298 max_page_scale_factor == max_page_scale_factor_ && | 295 max_page_scale_factor == max_page_scale_factor_ && |
| 299 page_scale_factor == page_scale_factor_) | 296 page_scale_factor == page_scale_factor_) |
| 300 return; | 297 return; |
| 301 | 298 |
| 302 min_page_scale_factor_ = min_page_scale_factor; | 299 min_page_scale_factor_ = min_page_scale_factor; |
| 303 max_page_scale_factor_ = max_page_scale_factor; | 300 max_page_scale_factor_ = max_page_scale_factor; |
| 304 page_scale_factor_ = page_scale_factor; | 301 page_scale_factor_ = page_scale_factor; |
| 305 | 302 |
| 306 if (root_layer_scroll_offset_delegate_) { | 303 if (root_layer_scroll_offset_delegate_) { |
| 307 root_layer_scroll_offset_delegate_->SetTotalPageScaleFactorAndLimits( | 304 root_layer_scroll_offset_delegate_->UpdateRootLayerState( |
| 305 TotalScrollOffset(), |
| 306 TotalMaxScrollOffset(), |
| 307 ScrollableSize(), |
| 308 total_page_scale_factor(), | 308 total_page_scale_factor(), |
| 309 this->min_page_scale_factor(), | 309 this->min_page_scale_factor(), |
| 310 this->max_page_scale_factor()); | 310 this->max_page_scale_factor()); |
| 311 } | 311 } |
| 312 | 312 |
| 313 ForceScrollbarParameterUpdateAfterScaleChange(page_scale_layer()); | 313 ForceScrollbarParameterUpdateAfterScaleChange(page_scale_layer()); |
| 314 } | 314 } |
| 315 | 315 |
| 316 void LayerTreeImpl::SetPageScaleDelta(float delta) { | 316 void LayerTreeImpl::SetPageScaleDelta(float delta) { |
| 317 // Clamp to the current min/max limits. | 317 // Clamp to the current min/max limits. |
| (...skipping 13 matching lines...) Expand all Loading... |
| 331 if (pending_tree) { | 331 if (pending_tree) { |
| 332 DCHECK_EQ(1, pending_tree->sent_page_scale_delta()); | 332 DCHECK_EQ(1, pending_tree->sent_page_scale_delta()); |
| 333 pending_tree->SetPageScaleDelta( | 333 pending_tree->SetPageScaleDelta( |
| 334 page_scale_delta_ / sent_page_scale_delta_); | 334 page_scale_delta_ / sent_page_scale_delta_); |
| 335 } | 335 } |
| 336 } | 336 } |
| 337 | 337 |
| 338 set_needs_update_draw_properties(); | 338 set_needs_update_draw_properties(); |
| 339 | 339 |
| 340 if (root_layer_scroll_offset_delegate_) { | 340 if (root_layer_scroll_offset_delegate_) { |
| 341 root_layer_scroll_offset_delegate_->SetTotalPageScaleFactorAndLimits( | 341 root_layer_scroll_offset_delegate_->UpdateRootLayerState( |
| 342 TotalScrollOffset(), |
| 343 TotalMaxScrollOffset(), |
| 344 ScrollableSize(), |
| 342 total_page_scale_factor(), | 345 total_page_scale_factor(), |
| 343 min_page_scale_factor(), | 346 min_page_scale_factor(), |
| 344 max_page_scale_factor()); | 347 max_page_scale_factor()); |
| 345 } | 348 } |
| 346 } | 349 } |
| 347 | 350 |
| 348 gfx::SizeF LayerTreeImpl::ScrollableViewportSize() const { | 351 gfx::SizeF LayerTreeImpl::ScrollableViewportSize() const { |
| 349 if (outer_viewport_scroll_layer_) | 352 if (outer_viewport_scroll_layer_) |
| 350 return layer_tree_host_impl_->UnscaledScrollableViewportSize(); | 353 return layer_tree_host_impl_->UnscaledScrollableViewportSize(); |
| 351 else | 354 else |
| (...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 756 InnerViewportScrollLayer()->SetScrollOffsetDelegate(NULL); | 759 InnerViewportScrollLayer()->SetScrollOffsetDelegate(NULL); |
| 757 if (OuterViewportScrollLayer()) | 760 if (OuterViewportScrollLayer()) |
| 758 OuterViewportScrollLayer()->SetScrollOffsetDelegate(NULL); | 761 OuterViewportScrollLayer()->SetScrollOffsetDelegate(NULL); |
| 759 inner_viewport_scroll_delegate_proxy_.reset(); | 762 inner_viewport_scroll_delegate_proxy_.reset(); |
| 760 outer_viewport_scroll_delegate_proxy_.reset(); | 763 outer_viewport_scroll_delegate_proxy_.reset(); |
| 761 } | 764 } |
| 762 | 765 |
| 763 root_layer_scroll_offset_delegate_ = root_layer_scroll_offset_delegate; | 766 root_layer_scroll_offset_delegate_ = root_layer_scroll_offset_delegate; |
| 764 | 767 |
| 765 if (root_layer_scroll_offset_delegate_) { | 768 if (root_layer_scroll_offset_delegate_) { |
| 766 root_layer_scroll_offset_delegate_->SetTotalScrollOffset( | 769 root_layer_scroll_offset_delegate_->UpdateRootLayerState( |
| 767 TotalScrollOffset()); | 770 TotalScrollOffset(), |
| 768 root_layer_scroll_offset_delegate_->SetMaxScrollOffset( | 771 TotalMaxScrollOffset(), |
| 769 TotalMaxScrollOffset()); | 772 ScrollableSize(), |
| 770 root_layer_scroll_offset_delegate_->SetScrollableSize(ScrollableSize()); | |
| 771 root_layer_scroll_offset_delegate_->SetTotalPageScaleFactorAndLimits( | |
| 772 total_page_scale_factor(), | 773 total_page_scale_factor(), |
| 773 min_page_scale_factor(), | 774 min_page_scale_factor(), |
| 774 max_page_scale_factor()); | 775 max_page_scale_factor()); |
| 775 | 776 |
| 776 if (inner_viewport_scroll_layer_) { | 777 if (inner_viewport_scroll_layer_) { |
| 777 inner_viewport_scroll_delegate_proxy_ = make_scoped_ptr( | 778 inner_viewport_scroll_delegate_proxy_ = make_scoped_ptr( |
| 778 new LayerScrollOffsetDelegateProxy(InnerViewportScrollLayer(), | 779 new LayerScrollOffsetDelegateProxy(InnerViewportScrollLayer(), |
| 779 root_layer_scroll_offset_delegate_, | 780 root_layer_scroll_offset_delegate_, |
| 780 this)); | 781 this)); |
| 781 inner_viewport_scroll_layer_->SetScrollOffsetDelegate( | 782 inner_viewport_scroll_layer_->SetScrollOffsetDelegate( |
| (...skipping 14 matching lines...) Expand all Loading... |
| 796 void LayerTreeImpl::UpdateScrollOffsetDelegate() { | 797 void LayerTreeImpl::UpdateScrollOffsetDelegate() { |
| 797 DCHECK(InnerViewportScrollLayer()); | 798 DCHECK(InnerViewportScrollLayer()); |
| 798 DCHECK(root_layer_scroll_offset_delegate_); | 799 DCHECK(root_layer_scroll_offset_delegate_); |
| 799 | 800 |
| 800 gfx::Vector2dF offset = | 801 gfx::Vector2dF offset = |
| 801 inner_viewport_scroll_delegate_proxy_->last_set_scroll_offset(); | 802 inner_viewport_scroll_delegate_proxy_->last_set_scroll_offset(); |
| 802 | 803 |
| 803 if (OuterViewportScrollLayer()) | 804 if (OuterViewportScrollLayer()) |
| 804 offset += outer_viewport_scroll_delegate_proxy_->last_set_scroll_offset(); | 805 offset += outer_viewport_scroll_delegate_proxy_->last_set_scroll_offset(); |
| 805 | 806 |
| 806 root_layer_scroll_offset_delegate_->SetTotalScrollOffset(offset); | 807 root_layer_scroll_offset_delegate_->UpdateRootLayerState( |
| 807 root_layer_scroll_offset_delegate_->SetMaxScrollOffset( | 808 offset, |
| 808 TotalMaxScrollOffset()); | 809 TotalMaxScrollOffset(), |
| 810 ScrollableSize(), |
| 811 total_page_scale_factor(), |
| 812 min_page_scale_factor(), |
| 813 max_page_scale_factor()); |
| 809 } | 814 } |
| 810 | 815 |
| 811 gfx::Vector2dF LayerTreeImpl::GetDelegatedScrollOffset(LayerImpl* layer) { | 816 gfx::Vector2dF LayerTreeImpl::GetDelegatedScrollOffset(LayerImpl* layer) { |
| 812 DCHECK(root_layer_scroll_offset_delegate_); | 817 DCHECK(root_layer_scroll_offset_delegate_); |
| 813 DCHECK(InnerViewportScrollLayer()); | 818 DCHECK(InnerViewportScrollLayer()); |
| 814 if (layer == InnerViewportScrollLayer() && !OuterViewportScrollLayer()) | 819 if (layer == InnerViewportScrollLayer() && !OuterViewportScrollLayer()) |
| 815 return root_layer_scroll_offset_delegate_->GetTotalScrollOffset(); | 820 return root_layer_scroll_offset_delegate_->GetTotalScrollOffset(); |
| 816 | 821 |
| 817 // If we get here, we have both inner/outer viewports, and need to distribute | 822 // If we get here, we have both inner/outer viewports, and need to distribute |
| 818 // the scroll offset between them. | 823 // the scroll offset between them. |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 954 const std::vector<LayerImpl*>& LayerTreeImpl::LayersWithCopyOutputRequest() | 959 const std::vector<LayerImpl*>& LayerTreeImpl::LayersWithCopyOutputRequest() |
| 955 const { | 960 const { |
| 956 // Only the active tree needs to know about layers with copy requests, as | 961 // Only the active tree needs to know about layers with copy requests, as |
| 957 // they are aborted if not serviced during draw. | 962 // they are aborted if not serviced during draw. |
| 958 DCHECK(IsActiveTree()); | 963 DCHECK(IsActiveTree()); |
| 959 | 964 |
| 960 return layers_with_copy_output_request_; | 965 return layers_with_copy_output_request_; |
| 961 } | 966 } |
| 962 | 967 |
| 963 } // namespace cc | 968 } // namespace cc |
| OLD | NEW |