#include "base/basictypes.h"
#include "ui/events/gesture_detection/gesture_detection_export.h"
-
-namespace gfx {
-class Display;
-}
+#include "ui/gfx/geometry/point_f.h"
+#include "ui/gfx/geometry/size_f.h"
+#include "ui/gfx/geometry/vector2d_f.h"
namespace ui {
class MotionEvent;
-class ZoomManager;
// Port of SnapScrollController.java from Chromium
// Controls the scroll snapping behavior based on scroll updates.
-class SnapScrollController {
+class GESTURE_DETECTION_EXPORT SnapScrollController {
public:
- explicit SnapScrollController(const gfx::Display& display);
+ SnapScrollController(float snap_bound, const gfx::SizeF& display_size);
~SnapScrollController();
+ // Sets the snap scroll mode based on the event type.
+ void SetSnapScrollMode(const MotionEvent& event,
+ bool is_scale_gesture_detection_in_progress);
+
// Updates the snap scroll mode based on the given X and Y distance to be
// moved on scroll. If the scroll update is above a threshold, the snapping
// behavior is reset.
void UpdateSnapScrollMode(float distance_x, float distance_y);
- // Sets the snap scroll mode based on the event type.
- void SetSnapScrollingMode(const MotionEvent& event,
- bool is_scale_gesture_detection_in_progress);
-
- void ResetSnapScrollMode() { snap_scroll_mode_ = SNAP_NONE; }
- bool IsSnapVertical() const { return snap_scroll_mode_ == SNAP_VERT; }
- bool IsSnapHorizontal() const { return snap_scroll_mode_ == SNAP_HORIZ; }
- bool IsSnappingScrolls() const { return snap_scroll_mode_ != SNAP_NONE; }
+ bool IsSnapVertical() const;
+ bool IsSnapHorizontal() const;
+ bool IsSnappingScrolls() const;
private:
- enum SnapMode {
- SNAP_NONE,
- SNAP_HORIZ,
- SNAP_VERT
- };
-
- float channel_distance_;
- SnapMode snap_scroll_mode_;
- float first_touch_x_;
- float first_touch_y_;
- float distance_x_;
- float distance_y_;
+ enum SnapMode { SNAP_NONE, SNAP_PENDING, SNAP_HORIZ, SNAP_VERT };
+
+ const float snap_bound_;
+ const float channel_distance_;
+ SnapMode mode_;
+ gfx::PointF down_position_;
+ gfx::Vector2dF accumulated_distance_;
DISALLOW_COPY_AND_ASSIGN(SnapScrollController);
};