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_host.h" | 5 #include "cc/trees/layer_tree_host.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <stack> | 8 #include <stack> |
9 #include <string> | 9 #include <string> |
10 | 10 |
(...skipping 1041 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1052 outer_viewport_scroll_delta); | 1052 outer_viewport_scroll_delta); |
1053 } | 1053 } |
1054 ApplyPageScaleDeltaFromImplSide(info.page_scale_delta); | 1054 ApplyPageScaleDeltaFromImplSide(info.page_scale_delta); |
1055 | 1055 |
1056 client_->ApplyScrollAndScale( | 1056 client_->ApplyScrollAndScale( |
1057 inner_viewport_scroll_delta + outer_viewport_scroll_delta, | 1057 inner_viewport_scroll_delta + outer_viewport_scroll_delta, |
1058 info.page_scale_delta); | 1058 info.page_scale_delta); |
1059 } | 1059 } |
1060 } | 1060 } |
1061 | 1061 |
1062 gfx::Vector2d LayerTreeHost::DistributeScrollOffsetToViewports( | |
1063 const gfx::Vector2d offset, | |
1064 Layer* layer) { | |
1065 DCHECK(layer); | |
1066 if (layer != outer_viewport_scroll_layer_.get()) | |
1067 return offset; | |
1068 | |
1069 gfx::Vector2d inner_viewport_offset = | |
1070 inner_viewport_scroll_layer_->scroll_offset(); | |
1071 gfx::Vector2d outer_viewport_offset = | |
1072 outer_viewport_scroll_layer_->scroll_offset(); | |
1073 | |
1074 if (offset == inner_viewport_offset + outer_viewport_offset) { | |
1075 // In this case, nothing should change, so we just return to the outer | |
1076 // viewport the offset is already has. | |
1077 return outer_viewport_offset; | |
1078 } | |
1079 | |
1080 // In the spirit of document-scrolls-first, we always want any change to | |
1081 // go to the outer viewport first. | |
1082 gfx::Vector2d max_outer_viewport_scroll_offset = | |
1083 outer_viewport_scroll_layer_->MaxScrollOffset(); | |
1084 gfx::Vector2d max_inner_viewport_scroll_offset = | |
1085 inner_viewport_scroll_layer_->MaxScrollOffset(); | |
1086 | |
1087 // TODO(bokan): This trips on zoom-out due to how Blink orders scale-scroll. | |
1088 // Disabled until that's sorted out: crbug.com/336574 | |
1089 // gfx::Vector2d total_max_scroll_offset = | |
1090 // max_outer_viewport_scroll_offset + max_inner_viewport_scroll_offset; | |
1091 // DCHECK(total_max_scroll_offset.x() >= offset.x() && | |
1092 // total_max_scroll_offset.y() >= offset.y()); | |
1093 | |
1094 outer_viewport_offset = offset - inner_viewport_offset; | |
1095 outer_viewport_offset.SetToMin(max_outer_viewport_scroll_offset); | |
1096 outer_viewport_offset.SetToMax(gfx::Vector2d()); | |
1097 | |
1098 inner_viewport_offset = offset - outer_viewport_offset; | |
1099 inner_viewport_offset.SetToMin(max_inner_viewport_scroll_offset); | |
1100 inner_viewport_offset.SetToMax(gfx::Vector2d()); | |
1101 inner_viewport_scroll_layer_->SetScrollOffset(inner_viewport_offset); | |
1102 | |
1103 return outer_viewport_offset; | |
1104 } | |
1105 | |
1106 void LayerTreeHost::StartRateLimiter() { | 1062 void LayerTreeHost::StartRateLimiter() { |
1107 if (animating_) | 1063 if (animating_) |
1108 return; | 1064 return; |
1109 | 1065 |
1110 if (!rate_limit_timer_.IsRunning()) { | 1066 if (!rate_limit_timer_.IsRunning()) { |
1111 rate_limit_timer_.Start(FROM_HERE, | 1067 rate_limit_timer_.Start(FROM_HERE, |
1112 base::TimeDelta(), | 1068 base::TimeDelta(), |
1113 this, | 1069 this, |
1114 &LayerTreeHost::RateLimit); | 1070 &LayerTreeHost::RateLimit); |
1115 } | 1071 } |
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1296 swap_promise_list_.push_back(swap_promise.Pass()); | 1252 swap_promise_list_.push_back(swap_promise.Pass()); |
1297 } | 1253 } |
1298 | 1254 |
1299 void LayerTreeHost::BreakSwapPromises(SwapPromise::DidNotSwapReason reason) { | 1255 void LayerTreeHost::BreakSwapPromises(SwapPromise::DidNotSwapReason reason) { |
1300 for (size_t i = 0; i < swap_promise_list_.size(); i++) | 1256 for (size_t i = 0; i < swap_promise_list_.size(); i++) |
1301 swap_promise_list_[i]->DidNotSwap(reason); | 1257 swap_promise_list_[i]->DidNotSwap(reason); |
1302 swap_promise_list_.clear(); | 1258 swap_promise_list_.clear(); |
1303 } | 1259 } |
1304 | 1260 |
1305 } // namespace cc | 1261 } // namespace cc |
OLD | NEW |