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 "base/debug/trace_event.h" | 7 #include "base/debug/trace_event.h" |
8 #include "cc/animation/keyframed_animation_curve.h" | 8 #include "cc/animation/keyframed_animation_curve.h" |
9 #include "cc/animation/scrollbar_animation_controller.h" | 9 #include "cc/animation/scrollbar_animation_controller.h" |
10 #include "cc/debug/traced_value.h" | 10 #include "cc/debug/traced_value.h" |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
133 target_tree->root_layer(), hud_layer()->id()))); | 133 target_tree->root_layer(), hud_layer()->id()))); |
134 else | 134 else |
135 target_tree->set_hud_layer(NULL); | 135 target_tree->set_hud_layer(NULL); |
136 } | 136 } |
137 | 137 |
138 LayerImpl* LayerTreeImpl::RootScrollLayer() const { | 138 LayerImpl* LayerTreeImpl::RootScrollLayer() const { |
139 DCHECK(IsActiveTree()); | 139 DCHECK(IsActiveTree()); |
140 return root_scroll_layer_; | 140 return root_scroll_layer_; |
141 } | 141 } |
142 | 142 |
143 LayerImpl* LayerTreeImpl::RootClipLayer() const { | 143 LayerImpl* LayerTreeImpl::RootContainerLayer() const { |
144 return root_scroll_layer_ ? root_scroll_layer_->parent() : NULL; | 144 return root_scroll_layer_ ? root_scroll_layer_->parent() : NULL; |
145 } | 145 } |
146 | 146 |
147 LayerImpl* LayerTreeImpl::CurrentlyScrollingLayer() const { | 147 LayerImpl* LayerTreeImpl::CurrentlyScrollingLayer() const { |
148 DCHECK(IsActiveTree()); | 148 DCHECK(IsActiveTree()); |
149 return currently_scrolling_layer_; | 149 return currently_scrolling_layer_; |
150 } | 150 } |
151 | 151 |
152 void LayerTreeImpl::SetCurrentlyScrollingLayer(LayerImpl* layer) { | 152 void LayerTreeImpl::SetCurrentlyScrollingLayer(LayerImpl* layer) { |
153 if (currently_scrolling_layer_ == layer) | 153 if (currently_scrolling_layer_ == layer) |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
226 DCHECK(settings().solid_color_scrollbars); | 226 DCHECK(settings().solid_color_scrollbars); |
227 | 227 |
228 LayerImpl* root_scroll = RootScrollLayer(); | 228 LayerImpl* root_scroll = RootScrollLayer(); |
229 DCHECK(root_scroll); | 229 DCHECK(root_scroll); |
230 DCHECK(IsActiveTree()); | 230 DCHECK(IsActiveTree()); |
231 | 231 |
232 gfx::RectF scrollable_viewport( | 232 gfx::RectF scrollable_viewport( |
233 gfx::PointAtOffsetFromOrigin(root_scroll->TotalScrollOffset()), | 233 gfx::PointAtOffsetFromOrigin(root_scroll->TotalScrollOffset()), |
234 ScrollableViewportSize()); | 234 ScrollableViewportSize()); |
235 float vertical_adjust = 0.0f; | 235 float vertical_adjust = 0.0f; |
236 if (RootClipLayer()) | 236 if (RootContainerLayer()) |
237 vertical_adjust = layer_tree_host_impl_->VisibleViewportSize().height() - | 237 vertical_adjust = layer_tree_host_impl_->VisibleViewportSize().height() - |
238 RootClipLayer()->bounds().height(); | 238 RootContainerLayer()->bounds().height(); |
239 if (ScrollbarLayerImpl* horiz = root_scroll->horizontal_scrollbar_layer()) { | 239 if (ScrollbarLayerImpl* horiz = root_scroll->horizontal_scrollbar_layer()) { |
240 horiz->set_vertical_adjust(vertical_adjust); | 240 horiz->set_vertical_adjust(vertical_adjust); |
241 horiz->set_visible_to_total_length_ratio( | 241 horiz->set_visible_to_total_length_ratio( |
242 scrollable_viewport.width() / ScrollableSize().width()); | 242 scrollable_viewport.width() / ScrollableSize().width()); |
243 } | 243 } |
244 if (ScrollbarLayerImpl* vertical = root_scroll->vertical_scrollbar_layer()) { | 244 if (ScrollbarLayerImpl* vertical = root_scroll->vertical_scrollbar_layer()) { |
245 vertical->set_vertical_adjust(vertical_adjust); | 245 vertical->set_vertical_adjust(vertical_adjust); |
246 vertical->set_visible_to_total_length_ratio( | 246 vertical->set_visible_to_total_length_ratio( |
247 scrollable_viewport.height() / ScrollableSize().height()); | 247 scrollable_viewport.height() / ScrollableSize().height()); |
248 } | 248 } |
249 } | 249 } |
250 | 250 |
251 void LayerTreeImpl::UpdateDrawProperties() { | 251 void LayerTreeImpl::UpdateDrawProperties() { |
252 if (IsActiveTree() && RootScrollLayer() && RootClipLayer()) | 252 if (IsActiveTree() && RootScrollLayer() && RootContainerLayer()) |
253 UpdateRootScrollLayerSizeDelta(); | 253 UpdateRootScrollLayerSizeDelta(); |
254 | 254 |
255 if (settings().solid_color_scrollbars && | 255 if (settings().solid_color_scrollbars && |
256 IsActiveTree() && | 256 IsActiveTree() && |
257 RootScrollLayer()) { | 257 RootScrollLayer()) { |
258 UpdateSolidColorScrollbars(); | 258 UpdateSolidColorScrollbars(); |
259 | |
260 // The top controls manager is incompatible with the WebKit-created cliprect | |
261 // because it can bring into view a larger amount of content when it | |
262 // hides. It's safe to deactivate the clip rect if no non-overlay scrollbars | |
263 // are present. | |
264 if (RootClipLayer() && layer_tree_host_impl_->top_controls_manager()) | |
265 RootClipLayer()->SetMasksToBounds(false); | |
266 } | 259 } |
267 | 260 |
268 needs_update_draw_properties_ = false; | 261 needs_update_draw_properties_ = false; |
269 render_surface_layer_list_.clear(); | 262 render_surface_layer_list_.clear(); |
270 | 263 |
271 // For max_texture_size. | 264 // For max_texture_size. |
272 if (!layer_tree_host_impl_->renderer()) | 265 if (!layer_tree_host_impl_->renderer()) |
273 return; | 266 return; |
274 | 267 |
275 if (!root_layer()) | 268 if (!root_layer()) |
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
518 LayerScrollOffsetDelegate* root_layer_scroll_offset_delegate) { | 511 LayerScrollOffsetDelegate* root_layer_scroll_offset_delegate) { |
519 root_layer_scroll_offset_delegate_ = root_layer_scroll_offset_delegate; | 512 root_layer_scroll_offset_delegate_ = root_layer_scroll_offset_delegate; |
520 if (root_scroll_layer_) { | 513 if (root_scroll_layer_) { |
521 root_scroll_layer_->SetScrollOffsetDelegate( | 514 root_scroll_layer_->SetScrollOffsetDelegate( |
522 root_layer_scroll_offset_delegate_); | 515 root_layer_scroll_offset_delegate_); |
523 } | 516 } |
524 } | 517 } |
525 | 518 |
526 void LayerTreeImpl::UpdateRootScrollLayerSizeDelta() { | 519 void LayerTreeImpl::UpdateRootScrollLayerSizeDelta() { |
527 LayerImpl* root_scroll = RootScrollLayer(); | 520 LayerImpl* root_scroll = RootScrollLayer(); |
528 LayerImpl* root_clip = RootClipLayer(); | 521 LayerImpl* root_container = RootContainerLayer(); |
529 DCHECK(root_scroll); | 522 DCHECK(root_scroll); |
530 DCHECK(root_clip); | 523 DCHECK(root_container); |
531 DCHECK(IsActiveTree()); | 524 DCHECK(IsActiveTree()); |
532 | 525 |
533 gfx::Vector2dF scrollable_viewport_size = | 526 gfx::Vector2dF scrollable_viewport_size = |
534 gfx::RectF(ScrollableViewportSize()).bottom_right() - gfx::PointF(); | 527 gfx::RectF(ScrollableViewportSize()).bottom_right() - gfx::PointF(); |
535 | 528 |
536 gfx::Vector2dF original_viewport_size = | 529 gfx::Vector2dF original_viewport_size = |
537 gfx::RectF(root_clip->bounds()).bottom_right() - | 530 gfx::RectF(root_container->bounds()).bottom_right() - |
538 gfx::PointF(); | 531 gfx::PointF(); |
539 original_viewport_size.Scale(1 / page_scale_factor()); | 532 original_viewport_size.Scale(1 / page_scale_factor()); |
540 | 533 |
541 root_scroll->SetFixedContainerSizeDelta( | 534 root_scroll->SetFixedContainerSizeDelta( |
542 scrollable_viewport_size - original_viewport_size); | 535 scrollable_viewport_size - original_viewport_size); |
543 } | 536 } |
544 | 537 |
545 void LayerTreeImpl::SetLatencyInfo(const ui::LatencyInfo& latency_info) { | 538 void LayerTreeImpl::SetLatencyInfo(const ui::LatencyInfo& latency_info) { |
546 latency_info_.MergeWith(latency_info); | 539 latency_info_.MergeWith(latency_info); |
547 } | 540 } |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
586 const std::vector<LayerImpl*> LayerTreeImpl::LayersWithCopyOutputRequest() | 579 const std::vector<LayerImpl*> LayerTreeImpl::LayersWithCopyOutputRequest() |
587 const { | 580 const { |
588 // Only the active tree needs to know about layers with copy requests, as | 581 // Only the active tree needs to know about layers with copy requests, as |
589 // they are aborted if not serviced during draw. | 582 // they are aborted if not serviced during draw. |
590 DCHECK(IsActiveTree()); | 583 DCHECK(IsActiveTree()); |
591 | 584 |
592 return layers_with_copy_output_request_; | 585 return layers_with_copy_output_request_; |
593 } | 586 } |
594 | 587 |
595 } // namespace cc | 588 } // namespace cc |
OLD | NEW |