| OLD | NEW |
| (Empty) |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "cc/input/scroll_elasticity_helper.h" | |
| 6 | |
| 7 #include "cc/layers/layer_impl.h" | |
| 8 #include "cc/trees/layer_tree_host_impl.h" | |
| 9 #include "cc/trees/layer_tree_impl.h" | |
| 10 | |
| 11 namespace cc { | |
| 12 | |
| 13 class ScrollElasticityHelperImpl : public ScrollElasticityHelper { | |
| 14 public: | |
| 15 explicit ScrollElasticityHelperImpl(LayerTreeHostImpl* layer_tree_host_impl); | |
| 16 ~ScrollElasticityHelperImpl() override; | |
| 17 | |
| 18 bool IsUserScrollable() const override; | |
| 19 gfx::Vector2dF StretchAmount() const override; | |
| 20 void SetStretchAmount(const gfx::Vector2dF& stretch_amount) override; | |
| 21 gfx::ScrollOffset ScrollOffset() const override; | |
| 22 gfx::ScrollOffset MaxScrollOffset() const override; | |
| 23 void ScrollBy(const gfx::Vector2dF& delta) override; | |
| 24 void RequestAnimate() override; | |
| 25 | |
| 26 private: | |
| 27 LayerTreeHostImpl* layer_tree_host_impl_; | |
| 28 }; | |
| 29 | |
| 30 ScrollElasticityHelperImpl::ScrollElasticityHelperImpl( | |
| 31 LayerTreeHostImpl* layer_tree) | |
| 32 : layer_tree_host_impl_(layer_tree) { | |
| 33 } | |
| 34 | |
| 35 ScrollElasticityHelperImpl::~ScrollElasticityHelperImpl() { | |
| 36 } | |
| 37 | |
| 38 bool ScrollElasticityHelperImpl::IsUserScrollable() const { | |
| 39 LayerImpl* layer = layer_tree_host_impl_->OuterViewportScrollLayer(); | |
| 40 if (!layer) | |
| 41 return false; | |
| 42 return layer->user_scrollable_horizontal() || | |
| 43 layer->user_scrollable_vertical(); | |
| 44 } | |
| 45 | |
| 46 gfx::Vector2dF ScrollElasticityHelperImpl::StretchAmount() const { | |
| 47 return layer_tree_host_impl_->active_tree()->elastic_overscroll()->Current( | |
| 48 true); | |
| 49 } | |
| 50 | |
| 51 void ScrollElasticityHelperImpl::SetStretchAmount( | |
| 52 const gfx::Vector2dF& stretch_amount) { | |
| 53 if (stretch_amount == StretchAmount()) | |
| 54 return; | |
| 55 | |
| 56 layer_tree_host_impl_->active_tree()->elastic_overscroll()->SetCurrent( | |
| 57 stretch_amount); | |
| 58 layer_tree_host_impl_->active_tree()->set_needs_update_draw_properties(); | |
| 59 layer_tree_host_impl_->SetNeedsCommit(); | |
| 60 layer_tree_host_impl_->SetNeedsRedraw(); | |
| 61 layer_tree_host_impl_->SetFullRootLayerDamage(); | |
| 62 } | |
| 63 | |
| 64 gfx::ScrollOffset ScrollElasticityHelperImpl::ScrollOffset() const { | |
| 65 return layer_tree_host_impl_->active_tree()->TotalScrollOffset(); | |
| 66 } | |
| 67 | |
| 68 gfx::ScrollOffset ScrollElasticityHelperImpl::MaxScrollOffset() const { | |
| 69 return layer_tree_host_impl_->active_tree()->TotalMaxScrollOffset(); | |
| 70 } | |
| 71 | |
| 72 void ScrollElasticityHelperImpl::ScrollBy(const gfx::Vector2dF& delta) { | |
| 73 LayerImpl* root_scroll_layer = | |
| 74 layer_tree_host_impl_->OuterViewportScrollLayer() | |
| 75 ? layer_tree_host_impl_->OuterViewportScrollLayer() | |
| 76 : layer_tree_host_impl_->InnerViewportScrollLayer(); | |
| 77 if (root_scroll_layer) | |
| 78 root_scroll_layer->ScrollBy(delta); | |
| 79 } | |
| 80 | |
| 81 void ScrollElasticityHelperImpl::RequestAnimate() { | |
| 82 layer_tree_host_impl_->SetNeedsAnimate(); | |
| 83 } | |
| 84 | |
| 85 // static | |
| 86 ScrollElasticityHelper* ScrollElasticityHelper::CreateForLayerTreeHostImpl( | |
| 87 LayerTreeHostImpl* layer_tree_host_impl) { | |
| 88 return new ScrollElasticityHelperImpl(layer_tree_host_impl); | |
| 89 } | |
| 90 | |
| 91 } // namespace cc | |
| OLD | NEW |