Index: cc/input/scroll_elasticity_helper.cc |
diff --git a/cc/input/scroll_elasticity_helper.cc b/cc/input/scroll_elasticity_helper.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..54da888ff7692951252427bf852f35d471312219 |
--- /dev/null |
+++ b/cc/input/scroll_elasticity_helper.cc |
@@ -0,0 +1,101 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "cc/input/scroll_elasticity_helper.h" |
+ |
+#include "cc/layers/layer_impl.h" |
+#include "cc/trees/layer_tree_host_impl.h" |
+#include "cc/trees/layer_tree_impl.h" |
+ |
+namespace cc { |
+ |
+ScrollElasticityHelper::ScrollElasticityHelper(LayerTreeHostImpl* layer_tree) |
+ : layer_tree_host_impl_(layer_tree), timer_active_(false) { |
+} |
+ |
+ScrollElasticityHelper::~ScrollElasticityHelper() { |
+} |
+ |
+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; |
+} |
+ |
+bool ScrollElasticityHelper::AllowsVerticalStretching() { |
+ // TODO(ccameron): This is function is redundant and may be removed. |
+ return true; |
+} |
+ |
+gfx::Vector2dF ScrollElasticityHelper::StretchAmount() { |
+ return stretch_offset_; |
+} |
+ |
+bool ScrollElasticityHelper::PinnedInDirection( |
+ const gfx::Vector2dF& direction) { |
+ gfx::ScrollOffset scroll_offset = |
+ layer_tree_host_impl_->active_tree()->TotalScrollOffset(); |
+ gfx::ScrollOffset max_scroll_offset = |
+ layer_tree_host_impl_->active_tree()->TotalMaxScrollOffset(); |
+ bool result = false; |
+ if (direction.x() < 0) |
+ result |= scroll_offset.x() <= 0; |
+ if (direction.x() > 0) |
+ result |= scroll_offset.x() >= max_scroll_offset.x(); |
+ if (direction.y() < 0) |
+ result |= scroll_offset.y() <= 0; |
+ if (direction.y() > 0) |
+ result |= scroll_offset.y() >= max_scroll_offset.y(); |
+ return result; |
+} |
+ |
+bool ScrollElasticityHelper::CanScrollHorizontally() { |
+ return layer_tree_host_impl_->active_tree()->TotalMaxScrollOffset().x() > 0; |
+} |
+ |
+bool ScrollElasticityHelper::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 stretch_offset_; |
+} |
+ |
+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): Update the transform of the appropriate layer in the |
+ // LayerTreeHostImpl, and request that a frame be drawn. |
+} |
+ |
+void ScrollElasticityHelper::StartSnapRubberbandTimer() { |
+ if (timer_active_) |
+ return; |
+ timer_active_ = true; |
+ 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. |
+} |
+ |
+} // namespace cc |