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

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: 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 404 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698