snap_scroll_controller.h revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
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. 4 5#ifndef UI_EVENTS_GESTURE_DETECTION_SNAP_SCROLL_CONTROLLER_H_ 6#define UI_EVENTS_GESTURE_DETECTION_SNAP_SCROLL_CONTROLLER_H_ 7 8#include "base/basictypes.h" 9#include "ui/events/gesture_detection/gesture_detection_export.h" 10 11namespace ui { 12 13class MotionEvent; 14class ZoomManager; 15 16// Port of SnapScrollController.java from Chromium 17// Controls the scroll snapping behavior based on scroll updates. 18class SnapScrollController { 19 public: 20 struct GESTURE_DETECTION_EXPORT Config { 21 Config(); 22 ~Config(); 23 int screen_width_pixels; 24 int screen_height_pixels; 25 float device_scale_factor; 26 }; 27 28 explicit SnapScrollController(const Config& config); 29 ~SnapScrollController(); 30 31 // Updates the snap scroll mode based on the given X and Y distance to be 32 // moved on scroll. If the scroll update is above a threshold, the snapping 33 // behavior is reset. 34 void UpdateSnapScrollMode(float distance_x, float distance_y); 35 36 // Sets the snap scroll mode based on the event type. 37 void SetSnapScrollingMode(const MotionEvent& event, 38 bool is_scale_gesture_detection_in_progress); 39 40 void ResetSnapScrollMode() { snap_scroll_mode_ = SNAP_NONE; } 41 bool IsSnapVertical() const { return snap_scroll_mode_ == SNAP_VERT; } 42 bool IsSnapHorizontal() const { return snap_scroll_mode_ == SNAP_HORIZ; } 43 bool IsSnappingScrolls() const { return snap_scroll_mode_ != SNAP_NONE; } 44 45 private: 46 enum SnapMode { 47 SNAP_NONE, 48 SNAP_HORIZ, 49 SNAP_VERT 50 }; 51 52 static float CalculateChannelDistance(const Config& config); 53 54 float channel_distance_; 55 SnapMode snap_scroll_mode_; 56 float first_touch_x_; 57 float first_touch_y_; 58 float distance_x_; 59 float distance_y_; 60 61 DISALLOW_COPY_AND_ASSIGN(SnapScrollController); 62}; 63 64} // namespace ui 65 66#endif // UI_EVENTS_GESTURE_DETECTION_SNAP_SCROLL_CONTROLLER_H_ 67