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_impl.h" | 5 #include "cc/trees/layer_tree_host_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <limits> | 8 #include <limits> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 2549 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2560 return InputHandlerScrollResult(); | 2560 return InputHandlerScrollResult(); |
2561 | 2561 |
2562 gfx::Vector2dF pending_delta = scroll_delta; | 2562 gfx::Vector2dF pending_delta = scroll_delta; |
2563 gfx::Vector2dF unused_root_delta; | 2563 gfx::Vector2dF unused_root_delta; |
2564 bool did_scroll_x = false; | 2564 bool did_scroll_x = false; |
2565 bool did_scroll_y = false; | 2565 bool did_scroll_y = false; |
2566 bool did_scroll_top_controls = false; | 2566 bool did_scroll_top_controls = false; |
2567 | 2567 |
2568 bool consume_by_top_controls = ShouldTopControlsConsumeScroll(scroll_delta); | 2568 bool consume_by_top_controls = ShouldTopControlsConsumeScroll(scroll_delta); |
2569 | 2569 |
2570 for (LayerImpl* layer_impl = CurrentlyScrollingLayer(); | 2570 // There's an edge case where the outer viewport isn't scrollable when the |
| 2571 // scroll starts, however, as the top controls show the outer viewport becomes |
| 2572 // scrollable. Therefore, always try scrolling the outer viewport before the |
| 2573 // inner. |
| 2574 // TODO(bokan): Move the top controls logic out of the loop since the scroll |
| 2575 // that causes the outer viewport to become scrollable will still be applied |
| 2576 // to the inner viewport. |
| 2577 LayerImpl* start_layer = CurrentlyScrollingLayer(); |
| 2578 if (start_layer == InnerViewportScrollLayer() && OuterViewportScrollLayer()) |
| 2579 start_layer = OuterViewportScrollLayer(); |
| 2580 |
| 2581 for (LayerImpl* layer_impl = start_layer; |
2571 layer_impl; | 2582 layer_impl; |
2572 layer_impl = layer_impl->parent()) { | 2583 layer_impl = layer_impl->parent()) { |
2573 if (!layer_impl->scrollable()) | 2584 if (!layer_impl->scrollable()) |
2574 continue; | 2585 continue; |
2575 | 2586 |
2576 if (layer_impl == InnerViewportScrollLayer() || | 2587 if (layer_impl == InnerViewportScrollLayer() || |
2577 layer_impl == OuterViewportScrollLayer()) { | 2588 layer_impl == OuterViewportScrollLayer()) { |
2578 if (consume_by_top_controls) { | 2589 if (consume_by_top_controls) { |
2579 gfx::Vector2dF excess_delta = | 2590 gfx::Vector2dF excess_delta = |
2580 top_controls_manager_->ScrollBy(pending_delta); | 2591 top_controls_manager_->ScrollBy(pending_delta); |
(...skipping 850 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3431 } | 3442 } |
3432 | 3443 |
3433 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { | 3444 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { |
3434 std::vector<PictureLayerImpl*>::iterator it = | 3445 std::vector<PictureLayerImpl*>::iterator it = |
3435 std::find(picture_layers_.begin(), picture_layers_.end(), layer); | 3446 std::find(picture_layers_.begin(), picture_layers_.end(), layer); |
3436 DCHECK(it != picture_layers_.end()); | 3447 DCHECK(it != picture_layers_.end()); |
3437 picture_layers_.erase(it); | 3448 picture_layers_.erase(it); |
3438 } | 3449 } |
3439 | 3450 |
3440 } // namespace cc | 3451 } // namespace cc |
OLD | NEW |