Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4)

Side by Side Diff: cc/trees/layer_tree_impl.cc

Issue 256303006: Make LayerScrollOffsetDelegate updates consistent. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix build break Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698