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

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: rebase 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 <limits> 7 #include <limits>
8 #include <set> 8 #include <set>
9 9
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 14 matching lines...) Expand all
25 #include "cc/trees/layer_tree_host_impl.h" 25 #include "cc/trees/layer_tree_host_impl.h"
26 #include "ui/gfx/point_conversions.h" 26 #include "ui/gfx/point_conversions.h"
27 #include "ui/gfx/size_conversions.h" 27 #include "ui/gfx/size_conversions.h"
28 #include "ui/gfx/vector2d_conversions.h" 28 #include "ui/gfx/vector2d_conversions.h"
29 29
30 namespace cc { 30 namespace cc {
31 31
32 // This class exists to split the LayerScrollOffsetDelegate between the 32 // This class exists to split the LayerScrollOffsetDelegate between the
33 // InnerViewportScrollLayer and the OuterViewportScrollLayer in a manner 33 // InnerViewportScrollLayer and the OuterViewportScrollLayer in a manner
34 // that never requires the embedder or LayerImpl to know about. 34 // that never requires the embedder or LayerImpl to know about.
35 class LayerScrollOffsetDelegateProxy : public LayerScrollOffsetDelegate { 35 class LayerScrollOffsetDelegateProxy : public LayerImpl::ScrollOffsetDelegate {
36 public: 36 public:
37 LayerScrollOffsetDelegateProxy(LayerImpl* layer, 37 LayerScrollOffsetDelegateProxy(LayerImpl* layer,
38 LayerScrollOffsetDelegate* delegate, 38 LayerScrollOffsetDelegate* delegate,
39 LayerTreeImpl* layer_tree) 39 LayerTreeImpl* layer_tree)
40 : layer_(layer), delegate_(delegate), layer_tree_impl_(layer_tree) {} 40 : layer_(layer), delegate_(delegate), layer_tree_impl_(layer_tree) {}
41 virtual ~LayerScrollOffsetDelegateProxy() {}
41 42
42 gfx::Vector2dF last_set_scroll_offset() const { 43 gfx::Vector2dF last_set_scroll_offset() const {
43 return last_set_scroll_offset_; 44 return last_set_scroll_offset_;
44 } 45 }
45 46
46 // LayerScrollOffsetDelegate implementation. 47 // LayerScrollOffsetDelegate implementation.
47
48 virtual void SetTotalScrollOffset(const gfx::Vector2dF& new_offset) OVERRIDE { 48 virtual void SetTotalScrollOffset(const gfx::Vector2dF& new_offset) OVERRIDE {
49 last_set_scroll_offset_ = new_offset; 49 last_set_scroll_offset_ = new_offset;
50 layer_tree_impl_->UpdateScrollOffsetDelegate(); 50 layer_tree_impl_->UpdateScrollOffsetDelegate();
51 } 51 }
52 52
53 virtual gfx::Vector2dF GetTotalScrollOffset() OVERRIDE { 53 virtual gfx::Vector2dF GetTotalScrollOffset() OVERRIDE {
54 return layer_tree_impl_->GetDelegatedScrollOffset(layer_); 54 return layer_tree_impl_->GetDelegatedScrollOffset(layer_);
55 } 55 }
56 56
57 virtual bool IsExternalFlingActive() const OVERRIDE { 57 virtual bool IsExternalFlingActive() const OVERRIDE {
58 return delegate_->IsExternalFlingActive(); 58 return delegate_->IsExternalFlingActive();
59 } 59 }
60 60
61 // Functions below this point are never called by LayerImpl on its
62 // LayerScrollOffsetDelegate, and so are not implemented.
63 virtual void SetMaxScrollOffset(const gfx::Vector2dF&) OVERRIDE {
64 NOTIMPLEMENTED();
65 }
66
67 virtual void SetTotalPageScaleFactorAndLimits(float, float, float) OVERRIDE {
68 NOTIMPLEMENTED();
69 }
70
71 virtual void SetScrollableSize(const gfx::SizeF& scrollable_size) OVERRIDE {
72 NOTIMPLEMENTED();
73 }
74
75 private: 61 private:
76 LayerImpl* layer_; 62 LayerImpl* layer_;
77 LayerScrollOffsetDelegate* delegate_; 63 LayerScrollOffsetDelegate* delegate_;
78 LayerTreeImpl* layer_tree_impl_; 64 LayerTreeImpl* layer_tree_impl_;
79 gfx::Vector2dF last_set_scroll_offset_; 65 gfx::Vector2dF last_set_scroll_offset_;
80 }; 66 };
81 67
82 LayerTreeImpl::LayerTreeImpl(LayerTreeHostImpl* layer_tree_host_impl) 68 LayerTreeImpl::LayerTreeImpl(LayerTreeHostImpl* layer_tree_host_impl)
83 : layer_tree_host_impl_(layer_tree_host_impl), 69 : layer_tree_host_impl_(layer_tree_host_impl),
84 source_frame_number_(-1), 70 source_frame_number_(-1),
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
313 if (min_page_scale_factor == min_page_scale_factor_ && 299 if (min_page_scale_factor == min_page_scale_factor_ &&
314 max_page_scale_factor == max_page_scale_factor_ && 300 max_page_scale_factor == max_page_scale_factor_ &&
315 page_scale_factor == page_scale_factor_) 301 page_scale_factor == page_scale_factor_)
316 return; 302 return;
317 303
318 min_page_scale_factor_ = min_page_scale_factor; 304 min_page_scale_factor_ = min_page_scale_factor;
319 max_page_scale_factor_ = max_page_scale_factor; 305 max_page_scale_factor_ = max_page_scale_factor;
320 page_scale_factor_ = page_scale_factor; 306 page_scale_factor_ = page_scale_factor;
321 307
322 if (root_layer_scroll_offset_delegate_) { 308 if (root_layer_scroll_offset_delegate_) {
323 root_layer_scroll_offset_delegate_->SetTotalPageScaleFactorAndLimits( 309 root_layer_scroll_offset_delegate_->UpdateRootLayerState(
310 TotalScrollOffset(),
311 TotalMaxScrollOffset(),
312 ScrollableSize(),
324 total_page_scale_factor(), 313 total_page_scale_factor(),
325 this->min_page_scale_factor(), 314 this->min_page_scale_factor(),
326 this->max_page_scale_factor()); 315 this->max_page_scale_factor());
327 } 316 }
328 317
329 ForceScrollbarParameterUpdateAfterScaleChange(page_scale_layer()); 318 ForceScrollbarParameterUpdateAfterScaleChange(page_scale_layer());
330 } 319 }
331 320
332 void LayerTreeImpl::SetPageScaleDelta(float delta) { 321 void LayerTreeImpl::SetPageScaleDelta(float delta) {
333 // Clamp to the current min/max limits. 322 // Clamp to the current min/max limits.
(...skipping 13 matching lines...) Expand all
347 if (pending_tree) { 336 if (pending_tree) {
348 DCHECK_EQ(1, pending_tree->sent_page_scale_delta()); 337 DCHECK_EQ(1, pending_tree->sent_page_scale_delta());
349 pending_tree->SetPageScaleDelta( 338 pending_tree->SetPageScaleDelta(
350 page_scale_delta_ / sent_page_scale_delta_); 339 page_scale_delta_ / sent_page_scale_delta_);
351 } 340 }
352 } 341 }
353 342
354 set_needs_update_draw_properties(); 343 set_needs_update_draw_properties();
355 344
356 if (root_layer_scroll_offset_delegate_) { 345 if (root_layer_scroll_offset_delegate_) {
357 root_layer_scroll_offset_delegate_->SetTotalPageScaleFactorAndLimits( 346 root_layer_scroll_offset_delegate_->UpdateRootLayerState(
347 TotalScrollOffset(),
348 TotalMaxScrollOffset(),
349 ScrollableSize(),
358 total_page_scale_factor(), 350 total_page_scale_factor(),
359 min_page_scale_factor(), 351 min_page_scale_factor(),
360 max_page_scale_factor()); 352 max_page_scale_factor());
361 } 353 }
362 } 354 }
363 355
364 gfx::SizeF LayerTreeImpl::ScrollableViewportSize() const { 356 gfx::SizeF LayerTreeImpl::ScrollableViewportSize() const {
365 if (outer_viewport_scroll_layer_) 357 if (outer_viewport_scroll_layer_)
366 return layer_tree_host_impl_->UnscaledScrollableViewportSize(); 358 return layer_tree_host_impl_->UnscaledScrollableViewportSize();
367 else 359 else
(...skipping 443 matching lines...) Expand 10 before | Expand all | Expand 10 after
811 InnerViewportScrollLayer()->SetScrollOffsetDelegate(NULL); 803 InnerViewportScrollLayer()->SetScrollOffsetDelegate(NULL);
812 if (OuterViewportScrollLayer()) 804 if (OuterViewportScrollLayer())
813 OuterViewportScrollLayer()->SetScrollOffsetDelegate(NULL); 805 OuterViewportScrollLayer()->SetScrollOffsetDelegate(NULL);
814 inner_viewport_scroll_delegate_proxy_.reset(); 806 inner_viewport_scroll_delegate_proxy_.reset();
815 outer_viewport_scroll_delegate_proxy_.reset(); 807 outer_viewport_scroll_delegate_proxy_.reset();
816 } 808 }
817 809
818 root_layer_scroll_offset_delegate_ = root_layer_scroll_offset_delegate; 810 root_layer_scroll_offset_delegate_ = root_layer_scroll_offset_delegate;
819 811
820 if (root_layer_scroll_offset_delegate_) { 812 if (root_layer_scroll_offset_delegate_) {
821 root_layer_scroll_offset_delegate_->SetTotalScrollOffset( 813 root_layer_scroll_offset_delegate_->UpdateRootLayerState(
822 TotalScrollOffset()); 814 TotalScrollOffset(),
823 root_layer_scroll_offset_delegate_->SetMaxScrollOffset( 815 TotalMaxScrollOffset(),
824 TotalMaxScrollOffset()); 816 ScrollableSize(),
825 root_layer_scroll_offset_delegate_->SetScrollableSize(ScrollableSize());
826 root_layer_scroll_offset_delegate_->SetTotalPageScaleFactorAndLimits(
827 total_page_scale_factor(), 817 total_page_scale_factor(),
828 min_page_scale_factor(), 818 min_page_scale_factor(),
829 max_page_scale_factor()); 819 max_page_scale_factor());
830 820
831 if (inner_viewport_scroll_layer_) { 821 if (inner_viewport_scroll_layer_) {
832 inner_viewport_scroll_delegate_proxy_ = make_scoped_ptr( 822 inner_viewport_scroll_delegate_proxy_ = make_scoped_ptr(
833 new LayerScrollOffsetDelegateProxy(InnerViewportScrollLayer(), 823 new LayerScrollOffsetDelegateProxy(InnerViewportScrollLayer(),
834 root_layer_scroll_offset_delegate_, 824 root_layer_scroll_offset_delegate_,
835 this)); 825 this));
836 inner_viewport_scroll_layer_->SetScrollOffsetDelegate( 826 inner_viewport_scroll_layer_->SetScrollOffsetDelegate(
(...skipping 14 matching lines...) Expand all
851 void LayerTreeImpl::UpdateScrollOffsetDelegate() { 841 void LayerTreeImpl::UpdateScrollOffsetDelegate() {
852 DCHECK(InnerViewportScrollLayer()); 842 DCHECK(InnerViewportScrollLayer());
853 DCHECK(root_layer_scroll_offset_delegate_); 843 DCHECK(root_layer_scroll_offset_delegate_);
854 844
855 gfx::Vector2dF offset = 845 gfx::Vector2dF offset =
856 inner_viewport_scroll_delegate_proxy_->last_set_scroll_offset(); 846 inner_viewport_scroll_delegate_proxy_->last_set_scroll_offset();
857 847
858 if (OuterViewportScrollLayer()) 848 if (OuterViewportScrollLayer())
859 offset += outer_viewport_scroll_delegate_proxy_->last_set_scroll_offset(); 849 offset += outer_viewport_scroll_delegate_proxy_->last_set_scroll_offset();
860 850
861 root_layer_scroll_offset_delegate_->SetTotalScrollOffset(offset); 851 root_layer_scroll_offset_delegate_->UpdateRootLayerState(
862 root_layer_scroll_offset_delegate_->SetMaxScrollOffset( 852 offset,
863 TotalMaxScrollOffset()); 853 TotalMaxScrollOffset(),
854 ScrollableSize(),
855 total_page_scale_factor(),
856 min_page_scale_factor(),
857 max_page_scale_factor());
864 } 858 }
865 859
866 gfx::Vector2dF LayerTreeImpl::GetDelegatedScrollOffset(LayerImpl* layer) { 860 gfx::Vector2dF LayerTreeImpl::GetDelegatedScrollOffset(LayerImpl* layer) {
867 DCHECK(root_layer_scroll_offset_delegate_); 861 DCHECK(root_layer_scroll_offset_delegate_);
868 DCHECK(InnerViewportScrollLayer()); 862 DCHECK(InnerViewportScrollLayer());
869 if (layer == InnerViewportScrollLayer() && !OuterViewportScrollLayer()) 863 if (layer == InnerViewportScrollLayer() && !OuterViewportScrollLayer())
870 return root_layer_scroll_offset_delegate_->GetTotalScrollOffset(); 864 return root_layer_scroll_offset_delegate_->GetTotalScrollOffset();
871 865
872 // If we get here, we have both inner/outer viewports, and need to distribute 866 // If we get here, we have both inner/outer viewports, and need to distribute
873 // the scroll offset between them. 867 // the scroll offset between them.
(...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after
1278 LayerImpl* LayerTreeImpl::FindLayerThatIsHitByPointInTouchHandlerRegion( 1272 LayerImpl* LayerTreeImpl::FindLayerThatIsHitByPointInTouchHandlerRegion(
1279 const gfx::PointF& screen_space_point) { 1273 const gfx::PointF& screen_space_point) {
1280 FindTouchEventLayerFunctor func = {screen_space_point}; 1274 FindTouchEventLayerFunctor func = {screen_space_point};
1281 FindClosestMatchingLayerDataForRecursion data_for_recursion; 1275 FindClosestMatchingLayerDataForRecursion data_for_recursion;
1282 FindClosestMatchingLayer( 1276 FindClosestMatchingLayer(
1283 screen_space_point, root_layer(), func, &data_for_recursion); 1277 screen_space_point, root_layer(), func, &data_for_recursion);
1284 return data_for_recursion.closest_match; 1278 return data_for_recursion.closest_match;
1285 } 1279 }
1286 1280
1287 } // namespace cc 1281 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_impl_unittest.cc ('k') | content/browser/android/in_process/synchronous_compositor_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698