| Index: cc/input/scroll_elasticity_helper.cc
|
| diff --git a/cc/input/scroll_elasticity_helper.cc b/cc/input/scroll_elasticity_helper.cc
|
| index 6a38e4b3bae34e6854c2099cb799ca0af14e00b1..7065e86a4911e236cecbf1912d9e87bd53cbc037 100644
|
| --- a/cc/input/scroll_elasticity_helper.cc
|
| +++ b/cc/input/scroll_elasticity_helper.cc
|
| @@ -10,33 +10,51 @@
|
|
|
| namespace cc {
|
|
|
| -ScrollElasticityHelper::ScrollElasticityHelper(LayerTreeHostImpl* layer_tree)
|
| - : layer_tree_host_impl_(layer_tree), timer_active_(false) {
|
| +class ScrollElasticityHelperImpl : public ScrollElasticityHelper {
|
| + public:
|
| + explicit ScrollElasticityHelperImpl(LayerTreeHostImpl* layer_tree_host_impl);
|
| + virtual ~ScrollElasticityHelperImpl();
|
| +
|
| + // The amount that the view is stretched past the normal allowable bounds.
|
| + // The "overhang" amount.
|
| + gfx::Vector2dF StretchAmount() override;
|
| + void SetStretchAmount(const gfx::Vector2dF& stretch_amount) override;
|
| + bool PinnedInDirection(const gfx::Vector2dF& direction) override;
|
| + bool CanScrollHorizontally() override;
|
| + bool CanScrollVertically() override;
|
| + void RequestAnimate() override;
|
| +
|
| + private:
|
| + LayerTreeHostImpl* layer_tree_host_impl_;
|
| +};
|
| +
|
| +ScrollElasticityHelperImpl::ScrollElasticityHelperImpl(
|
| + LayerTreeHostImpl* layer_tree)
|
| + : layer_tree_host_impl_(layer_tree) {
|
| }
|
|
|
| -ScrollElasticityHelper::~ScrollElasticityHelper() {
|
| +ScrollElasticityHelperImpl::~ScrollElasticityHelperImpl() {
|
| }
|
|
|
| -bool ScrollElasticityHelper::AllowsHorizontalStretching() {
|
| - // The WebKit implementation has this interface because it is written in terms
|
| - // of overscrolling on a per-layer basis, not for the whole layer tree. In
|
| - // that implementation, this always returns true for the frame view's
|
| - // scrollable area.
|
| - // TODO(ccameron): This is function is redundant and may be removed.
|
| - return true;
|
| +gfx::Vector2dF ScrollElasticityHelperImpl::StretchAmount() {
|
| + return -layer_tree_host_impl_->active_tree()->elastic_overscroll()->Current(
|
| + true);
|
| }
|
|
|
| -bool ScrollElasticityHelper::AllowsVerticalStretching() {
|
| - // TODO(ccameron): This is function is redundant and may be removed.
|
| - return true;
|
| -}
|
| +void ScrollElasticityHelperImpl::SetStretchAmount(
|
| + const gfx::Vector2dF& stretch_amount) {
|
| + if (stretch_amount == StretchAmount())
|
| + return;
|
|
|
| -gfx::Vector2dF ScrollElasticityHelper::StretchAmount() {
|
| - // TODO(ccameron): Use the value of active_tree->elastic_overscroll directly
|
| - return stretch_offset_;
|
| + layer_tree_host_impl_->active_tree()->elastic_overscroll()->SetCurrent(
|
| + -stretch_amount);
|
| + layer_tree_host_impl_->active_tree()->set_needs_update_draw_properties();
|
| + layer_tree_host_impl_->SetNeedsCommit();
|
| + layer_tree_host_impl_->SetNeedsRedraw();
|
| + layer_tree_host_impl_->SetFullRootLayerDamage();
|
| }
|
|
|
| -bool ScrollElasticityHelper::PinnedInDirection(
|
| +bool ScrollElasticityHelperImpl::PinnedInDirection(
|
| const gfx::Vector2dF& direction) {
|
| gfx::ScrollOffset scroll_offset =
|
| layer_tree_host_impl_->active_tree()->TotalScrollOffset();
|
| @@ -54,54 +72,22 @@ bool ScrollElasticityHelper::PinnedInDirection(
|
| return result;
|
| }
|
|
|
| -bool ScrollElasticityHelper::CanScrollHorizontally() {
|
| +bool ScrollElasticityHelperImpl::CanScrollHorizontally() {
|
| return layer_tree_host_impl_->active_tree()->TotalMaxScrollOffset().x() > 0;
|
| }
|
|
|
| -bool ScrollElasticityHelper::CanScrollVertically() {
|
| +bool ScrollElasticityHelperImpl::CanScrollVertically() {
|
| return layer_tree_host_impl_->active_tree()->TotalMaxScrollOffset().y() > 0;
|
| }
|
|
|
| -gfx::Vector2dF ScrollElasticityHelper::AbsoluteScrollPosition() {
|
| - // TODO(ccameron): This is function is redundant and may be removed.
|
| - return StretchAmount();
|
| -}
|
| -
|
| -void ScrollElasticityHelper::ImmediateScrollBy(const gfx::Vector2dF& scroll) {
|
| - // TODO(ccameron): This is function is redundant and may be removed.
|
| -}
|
| -
|
| -void ScrollElasticityHelper::ImmediateScrollByWithoutContentEdgeConstraints(
|
| - const gfx::Vector2dF& scroll) {
|
| - stretch_offset_ += scroll;
|
| - // TODO(ccameron): Use the value of active_tree->elastic_overscroll directly
|
| - // Note that this assumes that this property's true value is ever changed
|
| - // by the impl thread. While this is true, it is redundant state.
|
| - layer_tree_host_impl_->active_tree()->elastic_overscroll()->SetCurrent(
|
| - -stretch_offset_);
|
| - layer_tree_host_impl_->active_tree()->set_needs_update_draw_properties();
|
| - layer_tree_host_impl_->SetNeedsCommit();
|
| - layer_tree_host_impl_->SetNeedsRedraw();
|
| -}
|
| -
|
| -void ScrollElasticityHelper::StartSnapRubberbandTimer() {
|
| - if (timer_active_)
|
| - return;
|
| - timer_active_ = true;
|
| +void ScrollElasticityHelperImpl::RequestAnimate() {
|
| layer_tree_host_impl_->SetNeedsAnimate();
|
| }
|
|
|
| -void ScrollElasticityHelper::StopSnapRubberbandTimer() {
|
| - timer_active_ = false;
|
| -}
|
| -
|
| -void ScrollElasticityHelper::SnapRubberbandTimerFired() {
|
| - if (timer_active_)
|
| - layer_tree_host_impl_->SetNeedsAnimate();
|
| -}
|
| -
|
| -void ScrollElasticityHelper::AdjustScrollPositionToBoundsIfNecessary() {
|
| - // TODO(ccameron): This is function is redundant and may be removed.
|
| +// static
|
| +ScrollElasticityHelper* ScrollElasticityHelper::CreateForLayerTreeHostImpl(
|
| + LayerTreeHostImpl* layer_tree_host_impl) {
|
| + return new ScrollElasticityHelperImpl(layer_tree_host_impl);
|
| }
|
|
|
| } // namespace cc
|
|
|