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 <algorithm> | 7 #include <algorithm> |
8 #include <limits> | 8 #include <limits> |
9 #include <set> | 9 #include <set> |
10 | 10 |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
57 | 57 |
58 gfx::ScrollOffset GetCurrentScrollOffset() override { | 58 gfx::ScrollOffset GetCurrentScrollOffset() override { |
59 return layer_tree_impl_->GetDelegatedScrollOffset(layer_); | 59 return layer_tree_impl_->GetDelegatedScrollOffset(layer_); |
60 } | 60 } |
61 | 61 |
62 bool IsExternalFlingActive() const override { | 62 bool IsExternalFlingActive() const override { |
63 return delegate_->IsExternalFlingActive(); | 63 return delegate_->IsExternalFlingActive(); |
64 } | 64 } |
65 | 65 |
66 void Update() const override { | 66 void Update() const override { |
67 layer_tree_impl_->UpdateScrollOffsetDelegate(); | 67 layer_tree_impl_->UpdateScrollOffsetDelegateIfNeeded(); |
68 } | 68 } |
69 | 69 |
70 private: | 70 private: |
71 LayerImpl* layer_; | 71 LayerImpl* layer_; |
72 LayerScrollOffsetDelegate* delegate_; | 72 LayerScrollOffsetDelegate* delegate_; |
73 LayerTreeImpl* layer_tree_impl_; | 73 LayerTreeImpl* layer_tree_impl_; |
74 gfx::ScrollOffset last_set_scroll_offset_; | 74 gfx::ScrollOffset last_set_scroll_offset_; |
75 }; | 75 }; |
76 | 76 |
77 LayerTreeImpl::LayerTreeImpl( | 77 LayerTreeImpl::LayerTreeImpl( |
(...skipping 985 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1063 outer_viewport_scroll_layer_->SetScrollOffsetDelegate( | 1063 outer_viewport_scroll_layer_->SetScrollOffsetDelegate( |
1064 outer_viewport_scroll_delegate_proxy_.get()); | 1064 outer_viewport_scroll_delegate_proxy_.get()); |
1065 } | 1065 } |
1066 | 1066 |
1067 if (inner_viewport_scroll_layer_) | 1067 if (inner_viewport_scroll_layer_) |
1068 inner_viewport_scroll_layer_->RefreshFromScrollDelegate(); | 1068 inner_viewport_scroll_layer_->RefreshFromScrollDelegate(); |
1069 if (outer_viewport_scroll_layer_) | 1069 if (outer_viewport_scroll_layer_) |
1070 outer_viewport_scroll_layer_->RefreshFromScrollDelegate(); | 1070 outer_viewport_scroll_layer_->RefreshFromScrollDelegate(); |
1071 | 1071 |
1072 if (inner_viewport_scroll_layer_) | 1072 if (inner_viewport_scroll_layer_) |
1073 UpdateScrollOffsetDelegate(); | 1073 UpdateScrollOffsetDelegateIfNeeded(); |
1074 } | 1074 } |
1075 } | 1075 } |
1076 | 1076 |
1077 void LayerTreeImpl::OnRootLayerDelegatedScrollOffsetChanged() { | 1077 void LayerTreeImpl::OnRootLayerDelegatedScrollOffsetChanged() { |
1078 DCHECK(root_layer_scroll_offset_delegate_); | 1078 DCHECK(root_layer_scroll_offset_delegate_); |
1079 if (inner_viewport_scroll_layer_) { | 1079 root_layer_scroll_offset_delegate_->SetBlockUpdates(true); |
| 1080 if (inner_viewport_scroll_layer_) |
1080 inner_viewport_scroll_layer_->RefreshFromScrollDelegate(); | 1081 inner_viewport_scroll_layer_->RefreshFromScrollDelegate(); |
1081 } | 1082 |
1082 if (outer_viewport_scroll_layer_) { | 1083 if (outer_viewport_scroll_layer_) |
1083 outer_viewport_scroll_layer_->RefreshFromScrollDelegate(); | 1084 outer_viewport_scroll_layer_->RefreshFromScrollDelegate(); |
1084 } | 1085 |
| 1086 root_layer_scroll_offset_delegate_->SetBlockUpdates(false); |
| 1087 UpdateScrollOffsetDelegateIfNeeded(); |
1085 } | 1088 } |
1086 | 1089 |
1087 void LayerTreeImpl::UpdateScrollOffsetDelegate() { | 1090 void LayerTreeImpl::UpdateScrollOffsetDelegateIfNeeded() { |
1088 DCHECK(InnerViewportScrollLayer()); | 1091 if (!root_layer_scroll_offset_delegate_) |
1089 DCHECK(!OuterViewportScrollLayer() || outer_viewport_scroll_delegate_proxy_); | 1092 return; |
1090 DCHECK(root_layer_scroll_offset_delegate_); | 1093 if (!InnerViewportScrollLayer() || !inner_viewport_scroll_delegate_proxy_) |
1091 | 1094 return; |
| 1095 if (OuterViewportScrollLayer() && !outer_viewport_scroll_delegate_proxy_) |
| 1096 return; |
1092 gfx::ScrollOffset offset = | 1097 gfx::ScrollOffset offset = |
1093 inner_viewport_scroll_delegate_proxy_->last_set_scroll_offset(); | 1098 inner_viewport_scroll_delegate_proxy_->last_set_scroll_offset(); |
1094 | 1099 |
1095 if (OuterViewportScrollLayer()) | 1100 if (OuterViewportScrollLayer()) |
1096 offset += outer_viewport_scroll_delegate_proxy_->last_set_scroll_offset(); | 1101 offset += outer_viewport_scroll_delegate_proxy_->last_set_scroll_offset(); |
1097 | 1102 |
1098 root_layer_scroll_offset_delegate_->UpdateRootLayerState( | 1103 root_layer_scroll_offset_delegate_->UpdateRootLayerState( |
1099 offset, TotalMaxScrollOffset(), ScrollableSize(), | 1104 offset, TotalMaxScrollOffset(), ScrollableSize(), |
1100 current_page_scale_factor(), min_page_scale_factor(), | 1105 current_page_scale_factor(), min_page_scale_factor(), |
1101 max_page_scale_factor()); | 1106 max_page_scale_factor()); |
(...skipping 536 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1638 scoped_ptr<PendingPageScaleAnimation> pending_animation) { | 1643 scoped_ptr<PendingPageScaleAnimation> pending_animation) { |
1639 pending_page_scale_animation_ = pending_animation.Pass(); | 1644 pending_page_scale_animation_ = pending_animation.Pass(); |
1640 } | 1645 } |
1641 | 1646 |
1642 scoped_ptr<PendingPageScaleAnimation> | 1647 scoped_ptr<PendingPageScaleAnimation> |
1643 LayerTreeImpl::TakePendingPageScaleAnimation() { | 1648 LayerTreeImpl::TakePendingPageScaleAnimation() { |
1644 return pending_page_scale_animation_.Pass(); | 1649 return pending_page_scale_animation_.Pass(); |
1645 } | 1650 } |
1646 | 1651 |
1647 } // namespace cc | 1652 } // namespace cc |
OLD | NEW |