// 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_EVENTS_GESTURE_DETECTION_SNAP_SCROLL_CONTROLLER_H_ #define UI_EVENTS_GESTURE_DETECTION_SNAP_SCROLL_CONTROLLER_H_ #include "base/basictypes.h" #include "ui/events/gesture_detection/gesture_detection_export.h" namespace gfx { class Display; } namespace ui { class MotionEvent; class ZoomManager; // Port of SnapScrollController.java from Chromium // Controls the scroll snapping behavior based on scroll updates. class SnapScrollController { public: explicit SnapScrollController(const gfx::Display& display); ~SnapScrollController(); // 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; } 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_; DISALLOW_COPY_AND_ASSIGN(SnapScrollController); }; } // namespace ui #endif // UI_EVENTS_GESTURE_DETECTION_SNAP_SCROLL_CONTROLLER_H_