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 <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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
44 : layer_(layer), delegate_(delegate), layer_tree_impl_(layer_tree) {} | 44 : layer_(layer), delegate_(delegate), layer_tree_impl_(layer_tree) {} |
45 virtual ~LayerScrollOffsetDelegateProxy() {} | 45 virtual ~LayerScrollOffsetDelegateProxy() {} |
46 | 46 |
47 gfx::ScrollOffset last_set_scroll_offset() const { | 47 gfx::ScrollOffset last_set_scroll_offset() const { |
48 return last_set_scroll_offset_; | 48 return last_set_scroll_offset_; |
49 } | 49 } |
50 | 50 |
51 // LayerScrollOffsetDelegate implementation. | 51 // LayerScrollOffsetDelegate implementation. |
52 void SetTotalScrollOffset(const gfx::ScrollOffset& new_offset) override { | 52 void SetTotalScrollOffset(const gfx::ScrollOffset& new_offset) override { |
53 last_set_scroll_offset_ = new_offset; | 53 last_set_scroll_offset_ = new_offset; |
54 layer_tree_impl_->UpdateScrollOffsetDelegate(); | |
55 } | 54 } |
56 | 55 |
57 gfx::ScrollOffset GetTotalScrollOffset() override { | 56 gfx::ScrollOffset GetTotalScrollOffset() override { |
58 return layer_tree_impl_->GetDelegatedScrollOffset(layer_); | 57 return layer_tree_impl_->GetDelegatedScrollOffset(layer_); |
59 } | 58 } |
60 | 59 |
61 bool IsExternalFlingActive() const override { | 60 bool IsExternalFlingActive() const override { |
62 return delegate_->IsExternalFlingActive(); | 61 return delegate_->IsExternalFlingActive(); |
63 } | 62 } |
64 | 63 |
| 64 void Update() const override { |
| 65 layer_tree_impl_->UpdateScrollOffsetDelegate(); |
| 66 } |
| 67 |
65 private: | 68 private: |
66 LayerImpl* layer_; | 69 LayerImpl* layer_; |
67 LayerScrollOffsetDelegate* delegate_; | 70 LayerScrollOffsetDelegate* delegate_; |
68 LayerTreeImpl* layer_tree_impl_; | 71 LayerTreeImpl* layer_tree_impl_; |
69 gfx::ScrollOffset last_set_scroll_offset_; | 72 gfx::ScrollOffset last_set_scroll_offset_; |
70 }; | 73 }; |
71 | 74 |
72 LayerTreeImpl::LayerTreeImpl(LayerTreeHostImpl* layer_tree_host_impl) | 75 LayerTreeImpl::LayerTreeImpl(LayerTreeHostImpl* layer_tree_host_impl) |
73 : layer_tree_host_impl_(layer_tree_host_impl), | 76 : layer_tree_host_impl_(layer_tree_host_impl), |
74 source_frame_number_(-1), | 77 source_frame_number_(-1), |
(...skipping 848 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
923 } | 926 } |
924 | 927 |
925 if (outer_viewport_scroll_layer_) { | 928 if (outer_viewport_scroll_layer_) { |
926 outer_viewport_scroll_delegate_proxy_ = make_scoped_ptr( | 929 outer_viewport_scroll_delegate_proxy_ = make_scoped_ptr( |
927 new LayerScrollOffsetDelegateProxy(OuterViewportScrollLayer(), | 930 new LayerScrollOffsetDelegateProxy(OuterViewportScrollLayer(), |
928 root_layer_scroll_offset_delegate_, | 931 root_layer_scroll_offset_delegate_, |
929 this)); | 932 this)); |
930 outer_viewport_scroll_layer_->SetScrollOffsetDelegate( | 933 outer_viewport_scroll_layer_->SetScrollOffsetDelegate( |
931 outer_viewport_scroll_delegate_proxy_.get()); | 934 outer_viewport_scroll_delegate_proxy_.get()); |
932 } | 935 } |
| 936 |
| 937 if (inner_viewport_scroll_layer_) |
| 938 UpdateScrollOffsetDelegate(); |
933 } | 939 } |
934 } | 940 } |
935 | 941 |
936 void LayerTreeImpl::OnRootLayerDelegatedScrollOffsetChanged() { | 942 void LayerTreeImpl::OnRootLayerDelegatedScrollOffsetChanged() { |
937 DCHECK(root_layer_scroll_offset_delegate_); | 943 DCHECK(root_layer_scroll_offset_delegate_); |
938 if (inner_viewport_scroll_layer_) { | 944 if (inner_viewport_scroll_layer_) { |
939 inner_viewport_scroll_layer_->DidScroll(); | 945 inner_viewport_scroll_layer_->DidScroll(); |
940 } | 946 } |
941 if (outer_viewport_scroll_layer_) { | 947 if (outer_viewport_scroll_layer_) { |
942 outer_viewport_scroll_layer_->DidScroll(); | 948 outer_viewport_scroll_layer_->DidScroll(); |
943 } | 949 } |
944 } | 950 } |
945 | 951 |
946 void LayerTreeImpl::UpdateScrollOffsetDelegate() { | 952 void LayerTreeImpl::UpdateScrollOffsetDelegate() { |
947 DCHECK(InnerViewportScrollLayer()); | 953 DCHECK(InnerViewportScrollLayer()); |
| 954 DCHECK(!OuterViewportScrollLayer() || outer_viewport_scroll_delegate_proxy_); |
948 DCHECK(root_layer_scroll_offset_delegate_); | 955 DCHECK(root_layer_scroll_offset_delegate_); |
949 | 956 |
950 gfx::ScrollOffset offset = | 957 gfx::ScrollOffset offset = |
951 inner_viewport_scroll_delegate_proxy_->last_set_scroll_offset(); | 958 inner_viewport_scroll_delegate_proxy_->last_set_scroll_offset(); |
952 | 959 |
953 if (OuterViewportScrollLayer()) | 960 if (OuterViewportScrollLayer()) |
954 offset += outer_viewport_scroll_delegate_proxy_->last_set_scroll_offset(); | 961 offset += outer_viewport_scroll_delegate_proxy_->last_set_scroll_offset(); |
955 | 962 |
956 root_layer_scroll_offset_delegate_->UpdateRootLayerState( | 963 root_layer_scroll_offset_delegate_->UpdateRootLayerState( |
957 offset, | 964 offset, |
(...skipping 557 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1515 page_scale, | 1522 page_scale, |
1516 duration.InSecondsF()); | 1523 duration.InSecondsF()); |
1517 } | 1524 } |
1518 } | 1525 } |
1519 | 1526 |
1520 scoped_ptr<PageScaleAnimation> LayerTreeImpl::TakePageScaleAnimation() { | 1527 scoped_ptr<PageScaleAnimation> LayerTreeImpl::TakePageScaleAnimation() { |
1521 return page_scale_animation_.Pass(); | 1528 return page_scale_animation_.Pass(); |
1522 } | 1529 } |
1523 | 1530 |
1524 } // namespace cc | 1531 } // namespace cc |
OLD | NEW |