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.
5 #ifndef UI_EVENTS_GESTURE_DETECTION_SNAP_SCROLL_CONTROLLER_H_
6 #define UI_EVENTS_GESTURE_DETECTION_SNAP_SCROLL_CONTROLLER_H_
8 #include "base/basictypes.h"
9 #include "ui/events/gesture_detection/gesture_detection_export.h"
10 #include "ui/gfx/geometry/point_f.h"
11 #include "ui/gfx/geometry/size_f.h"
12 #include "ui/gfx/geometry/vector2d_f.h"
18 // Port of SnapScrollController.java from Chromium
19 // Controls the scroll snapping behavior based on scroll updates.
20 class GESTURE_DETECTION_EXPORT SnapScrollController
{
22 SnapScrollController(float snap_bound
, const gfx::SizeF
& display_size
);
23 ~SnapScrollController();
25 // Sets the snap scroll mode based on the event type.
26 void SetSnapScrollMode(const MotionEvent
& event
,
27 bool is_scale_gesture_detection_in_progress
);
29 // Updates the snap scroll mode based on the given X and Y distance to be
30 // moved on scroll. If the scroll update is above a threshold, the snapping
32 void UpdateSnapScrollMode(float distance_x
, float distance_y
);
34 bool IsSnapVertical() const;
35 bool IsSnapHorizontal() const;
36 bool IsSnappingScrolls() const;
39 enum SnapMode
{ SNAP_NONE
, SNAP_PENDING
, SNAP_HORIZ
, SNAP_VERT
};
41 const float snap_bound_
;
42 const float channel_distance_
;
44 gfx::PointF down_position_
;
45 gfx::Vector2dF accumulated_distance_
;
47 DISALLOW_COPY_AND_ASSIGN(SnapScrollController
);
52 #endif // UI_EVENTS_GESTURE_DETECTION_SNAP_SCROLL_CONTROLLER_H_