| Index: ui/gfx/android/scroller.h
|
| diff --git a/ui/gfx/android/scroller.h b/ui/gfx/android/scroller.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..39d7255dc8771be2495122ae04342194e7e8333c
|
| --- /dev/null
|
| +++ b/ui/gfx/android/scroller.h
|
| @@ -0,0 +1,148 @@
|
| +// 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.
|
| +
|
| +#ifndef UI_GFX_ANDROID_SCROLLER_H_
|
| +#define UI_GFX_ANDROID_SCROLLER_H_
|
| +
|
| +#include "base/time/time.h"
|
| +#include "ui/gfx/gfx_export.h"
|
| +
|
| +namespace gfx {
|
| +
|
| +// Native port of android.widget.Scroller.
|
| +// * Change-Id: I4365946f890a76fcfa78ca9d69f2a8e0848095a9
|
| +// * Please update the Change-Id as upstream Android changes are pulled.
|
| +class GFX_EXPORT Scroller {
|
| + public:
|
| + struct Config {
|
| + Config();
|
| +
|
| + // Controls fling deceleration. Defaults to 0.015f.
|
| + float fling_friction;
|
| +
|
| + // Controls fling accumulation. Defaults to disabled.
|
| + bool flywheel_enabled;
|
| + };
|
| +
|
| + explicit Scroller(const Config& config);
|
| + ~Scroller();
|
| +
|
| + // Start scrolling by providing a starting point and the distance to travel.
|
| + // The default value of 250 milliseconds will be used for the duration.
|
| + void StartScroll(float start_x,
|
| + float start_y,
|
| + float dx,
|
| + float dy,
|
| + base::TimeTicks start_time);
|
| +
|
| + // Start scrolling by providing a starting point, the distance to travel,
|
| + // and the duration of the scroll.
|
| + void StartScroll(float start_x,
|
| + float start_y,
|
| + float dx,
|
| + float dy,
|
| + base::TimeTicks start_time,
|
| + base::TimeDelta duration);
|
| +
|
| + // Start scrolling based on a fling gesture. The distance travelled will
|
| + // depend on the initial velocity of the fling.
|
| + void Fling(float start_x,
|
| + float start_y,
|
| + float velocity_x,
|
| + float velocity_y,
|
| + float min_x,
|
| + float max_x,
|
| + float min_y,
|
| + float max_y,
|
| + base::TimeTicks start_time);
|
| +
|
| + // Call this when you want to know the new location. If it returns true,
|
| + // the animation is not yet finished.
|
| + bool ComputeScrollOffset(base::TimeTicks time);
|
| +
|
| + // Extend the scroll animation by |extend|. This allows a running animation
|
| + // to scroll further and longer when used with |SetFinalX()| or |SetFinalY()|.
|
| + void ExtendDuration(base::TimeDelta extend);
|
| + void SetFinalX(float new_x);
|
| + void SetFinalY(float new_y);
|
| +
|
| + // Stops the animation. Contrary to |ForceFinished()|, aborting the animation
|
| + // causes the scroller to move to the final x and y position.
|
| + void AbortAnimation();
|
| +
|
| + // Terminate the scroll without affecting the current x and y positions.
|
| + void ForceFinished(bool finished);
|
| +
|
| + // Returns whether the scroller has finished scrolling.
|
| + bool IsFinished() const;
|
| +
|
| + // Returns the time elapsed since the beginning of the scrolling.
|
| + base::TimeDelta GetTimePassed() const;
|
| +
|
| + // Returns how long the scroll event will take.
|
| + base::TimeDelta GetDuration() const;
|
| +
|
| + float GetStartX() const;
|
| + float GetStartY() const;
|
| + float GetCurrX() const;
|
| + float GetCurrY() const;
|
| + float GetCurrVelocity() const;
|
| + float GetCurrVelocityX() const;
|
| + float GetCurrVelocityY() const;
|
| + float GetFinalX() const;
|
| + float GetFinalY() const;
|
| +
|
| + bool IsScrollingInDirection(float xvel, float yvel) const;
|
| +
|
| + private:
|
| + enum Mode {
|
| + UNDEFINED,
|
| + SCROLL_MODE,
|
| + FLING_MODE,
|
| + };
|
| +
|
| + void OnDurationChanged();
|
| + void RecomputeDeltas();
|
| +
|
| + double GetSplineDeceleration(float velocity) const;
|
| + base::TimeDelta GetSplineFlingDuration(float velocity) const;
|
| + double GetSplineFlingDistance(float velocity) const;
|
| +
|
| + Mode mode_;
|
| +
|
| + float start_x_;
|
| + float start_y_;
|
| + float final_x_;
|
| + float final_y_;
|
| +
|
| + float min_x_;
|
| + float max_x_;
|
| + float min_y_;
|
| + float max_y_;
|
| +
|
| + float curr_x_;
|
| + float curr_y_;
|
| + base::TimeTicks start_time_;
|
| + base::TimeTicks curr_time_;
|
| + base::TimeDelta duration_;
|
| + double duration_seconds_reciprocal_;
|
| + float delta_x_;
|
| + float delta_x_norm_;
|
| + float delta_y_;
|
| + float delta_y_norm_;
|
| + bool finished_;
|
| + bool flywheel_enabled_;
|
| +
|
| + float velocity_;
|
| + float curr_velocity_;
|
| + float distance_;
|
| +
|
| + float fling_friction_;
|
| + float deceleration_;
|
| + float tuning_coeff_;
|
| +};
|
| +
|
| +} // namespace gfx
|
| +
|
| +#endif // UI_GFX_ANDROID_SCROLLER_H_
|
|
|