| 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 |