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

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: less jni 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/base/math_util.h" 10 #include "cc/base/math_util.h"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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 400 matching lines...) Expand 10 before | Expand all | Expand 10 after
752 InnerViewportScrollLayer()->SetScrollOffsetDelegate(NULL); 755 InnerViewportScrollLayer()->SetScrollOffsetDelegate(NULL);
753 if (OuterViewportScrollLayer()) 756 if (OuterViewportScrollLayer())
754 OuterViewportScrollLayer()->SetScrollOffsetDelegate(NULL); 757 OuterViewportScrollLayer()->SetScrollOffsetDelegate(NULL);
755 inner_viewport_scroll_delegate_proxy_.reset(); 758 inner_viewport_scroll_delegate_proxy_.reset();
756 outer_viewport_scroll_delegate_proxy_.reset(); 759 outer_viewport_scroll_delegate_proxy_.reset();
757 } 760 }
758 761
759 root_layer_scroll_offset_delegate_ = root_layer_scroll_offset_delegate; 762 root_layer_scroll_offset_delegate_ = root_layer_scroll_offset_delegate;
760 763
761 if (root_layer_scroll_offset_delegate_) { 764 if (root_layer_scroll_offset_delegate_) {
762 root_layer_scroll_offset_delegate_->SetTotalScrollOffset( 765 root_layer_scroll_offset_delegate_->UpdateRootLayerState(
763 TotalScrollOffset()); 766 TotalScrollOffset(),
764 root_layer_scroll_offset_delegate_->SetMaxScrollOffset( 767 TotalMaxScrollOffset(),
765 TotalMaxScrollOffset()); 768 ScrollableSize(),
766 root_layer_scroll_offset_delegate_->SetScrollableSize(ScrollableSize());
767 root_layer_scroll_offset_delegate_->SetTotalPageScaleFactorAndLimits(
768 total_page_scale_factor(), 769 total_page_scale_factor(),
769 min_page_scale_factor(), 770 min_page_scale_factor(),
770 max_page_scale_factor()); 771 max_page_scale_factor());
771 772
772 if (inner_viewport_scroll_layer_) { 773 if (inner_viewport_scroll_layer_) {
773 inner_viewport_scroll_delegate_proxy_ = make_scoped_ptr( 774 inner_viewport_scroll_delegate_proxy_ = make_scoped_ptr(
774 new LayerScrollOffsetDelegateProxy(InnerViewportScrollLayer(), 775 new LayerScrollOffsetDelegateProxy(InnerViewportScrollLayer(),
775 root_layer_scroll_offset_delegate_, 776 root_layer_scroll_offset_delegate_,
776 this)); 777 this));
777 inner_viewport_scroll_layer_->SetScrollOffsetDelegate( 778 inner_viewport_scroll_layer_->SetScrollOffsetDelegate(
(...skipping 14 matching lines...) Expand all
792 void LayerTreeImpl::UpdateScrollOffsetDelegate() { 793 void LayerTreeImpl::UpdateScrollOffsetDelegate() {
793 DCHECK(InnerViewportScrollLayer()); 794 DCHECK(InnerViewportScrollLayer());
794 DCHECK(root_layer_scroll_offset_delegate_); 795 DCHECK(root_layer_scroll_offset_delegate_);
795 796
796 gfx::Vector2dF offset = 797 gfx::Vector2dF offset =
797 inner_viewport_scroll_delegate_proxy_->last_set_scroll_offset(); 798 inner_viewport_scroll_delegate_proxy_->last_set_scroll_offset();
798 799
799 if (OuterViewportScrollLayer()) 800 if (OuterViewportScrollLayer())
800 offset += outer_viewport_scroll_delegate_proxy_->last_set_scroll_offset(); 801 offset += outer_viewport_scroll_delegate_proxy_->last_set_scroll_offset();
801 802
802 root_layer_scroll_offset_delegate_->SetTotalScrollOffset(offset); 803 root_layer_scroll_offset_delegate_->UpdateRootLayerState(
803 root_layer_scroll_offset_delegate_->SetMaxScrollOffset( 804 offset,
804 TotalMaxScrollOffset()); 805 TotalMaxScrollOffset(),
806 ScrollableSize(),
807 total_page_scale_factor(),
808 min_page_scale_factor(),
809 max_page_scale_factor());
805 } 810 }
806 811
807 gfx::Vector2dF LayerTreeImpl::GetDelegatedScrollOffset(LayerImpl* layer) { 812 gfx::Vector2dF LayerTreeImpl::GetDelegatedScrollOffset(LayerImpl* layer) {
808 DCHECK(root_layer_scroll_offset_delegate_); 813 DCHECK(root_layer_scroll_offset_delegate_);
809 DCHECK(InnerViewportScrollLayer()); 814 DCHECK(InnerViewportScrollLayer());
810 if (layer == InnerViewportScrollLayer() && !OuterViewportScrollLayer()) 815 if (layer == InnerViewportScrollLayer() && !OuterViewportScrollLayer())
811 return root_layer_scroll_offset_delegate_->GetTotalScrollOffset(); 816 return root_layer_scroll_offset_delegate_->GetTotalScrollOffset();
812 817
813 // If we get here, we have both inner/outer viewports, and need to distribute 818 // If we get here, we have both inner/outer viewports, and need to distribute
814 // the scroll offset between them. 819 // the scroll offset between them.
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
950 const std::vector<LayerImpl*>& LayerTreeImpl::LayersWithCopyOutputRequest() 955 const std::vector<LayerImpl*>& LayerTreeImpl::LayersWithCopyOutputRequest()
951 const { 956 const {
952 // Only the active tree needs to know about layers with copy requests, as 957 // Only the active tree needs to know about layers with copy requests, as
953 // they are aborted if not serviced during draw. 958 // they are aborted if not serviced during draw.
954 DCHECK(IsActiveTree()); 959 DCHECK(IsActiveTree());
955 960
956 return layers_with_copy_output_request_; 961 return layers_with_copy_output_request_;
957 } 962 }
958 963
959 } // namespace cc 964 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698