12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#ifndef UI_EVENTS_GESTURES_GESTURE_CONFIGURATION_H_
668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#define UI_EVENTS_GESTURES_GESTURE_CONFIGURATION_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
9010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "ui/events/events_base_export.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ui {
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO: Expand this design to support multiple OS configuration
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// approaches (windows, chrome, others).  This would turn into an
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// abstract base class.
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class EVENTS_BASE_EXPORT GestureConfiguration {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Ordered alphabetically ignoring underscores, to align with the
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // associated list of prefs in gesture_prefs_aura.cc.
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static int default_radius() {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return default_radius_;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void set_default_radius(int radius) { default_radius_ = radius; }
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static int fling_max_cancel_to_down_time_in_ms() {
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return fling_max_cancel_to_down_time_in_ms_;
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static void set_fling_max_cancel_to_down_time_in_ms(int val) {
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    fling_max_cancel_to_down_time_in_ms_ = val;
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static int fling_max_tap_gap_time_in_ms() {
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return fling_max_tap_gap_time_in_ms_;
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static void set_fling_max_tap_gap_time_in_ms(int val) {
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    fling_max_tap_gap_time_in_ms_ = val;
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static double long_press_time_in_seconds() {
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return long_press_time_in_seconds_;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static double semi_long_press_time_in_seconds() {
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return semi_long_press_time_in_seconds_;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static double max_distance_for_two_finger_tap_in_pixels() {
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return max_distance_for_two_finger_tap_in_pixels_;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void set_max_distance_for_two_finger_tap_in_pixels(double val) {
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    max_distance_for_two_finger_tap_in_pixels_ = val;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void set_long_press_time_in_seconds(double val) {
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    long_press_time_in_seconds_ = val;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void set_semi_long_press_time_in_seconds(double val) {
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    semi_long_press_time_in_seconds_ = val;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static double max_seconds_between_double_click() {
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return max_seconds_between_double_click_;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void set_max_seconds_between_double_click(double val) {
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    max_seconds_between_double_click_ = val;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static int max_separation_for_gesture_touches_in_pixels() {
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return max_separation_for_gesture_touches_in_pixels_;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void set_max_separation_for_gesture_touches_in_pixels(int val) {
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    max_separation_for_gesture_touches_in_pixels_ = val;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  static float max_swipe_deviation_angle() {
686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    return max_swipe_deviation_angle_;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  static void set_max_swipe_deviation_angle(float val) {
716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    max_swipe_deviation_angle_ = val;
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static double max_touch_down_duration_in_seconds_for_click() {
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return max_touch_down_duration_in_seconds_for_click_;
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void set_max_touch_down_duration_in_seconds_for_click(double val) {
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    max_touch_down_duration_in_seconds_for_click_ = val;
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static double max_touch_move_in_pixels_for_click() {
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return max_touch_move_in_pixels_for_click_;
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void set_max_touch_move_in_pixels_for_click(double val) {
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    max_touch_move_in_pixels_for_click_ = val;
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static double max_distance_between_taps_for_double_tap() {
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return max_distance_between_taps_for_double_tap_;
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void set_max_distance_between_taps_for_double_tap(double val) {
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    max_distance_between_taps_for_double_tap_ = val;
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static double min_distance_for_pinch_scroll_in_pixels() {
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return min_distance_for_pinch_scroll_in_pixels_;
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void set_min_distance_for_pinch_scroll_in_pixels(double val) {
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    min_distance_for_pinch_scroll_in_pixels_ = val;
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static double min_pinch_update_distance_in_pixels() {
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return min_pinch_update_distance_in_pixels_;
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void set_min_pinch_update_distance_in_pixels(double val) {
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    min_pinch_update_distance_in_pixels_ = val;
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static float min_scroll_velocity() {
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return min_scroll_velocity_;
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static void set_min_scroll_velocity(float val) {
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    min_scroll_velocity_ = val;
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static double min_swipe_speed() {
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return min_swipe_speed_;
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void set_min_swipe_speed(double val) {
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    min_swipe_speed_ = val;
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
115010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  static int min_scaling_span_in_pixels() {
116010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    return min_scaling_span_in_pixels_;
117010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  };
118010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  static void set_min_scaling_span_in_pixels(int val) {
119010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    min_scaling_span_in_pixels_ = val;
120010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  }
1211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  static int show_press_delay_in_ms() {
1221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    return show_press_delay_in_ms_;
1231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  }
1241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  static int set_show_press_delay_in_ms(int val) {
1251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    return show_press_delay_in_ms_ = val;
1261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  }
12746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  static int scroll_debounce_interval_in_ms() {
12846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    return scroll_debounce_interval_in_ms_;
12946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  }
13046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  static int set_scroll_debounce_interval_in_ms(int val) {
13146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    return scroll_debounce_interval_in_ms_ = val;
13246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  }
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static float fling_velocity_cap() {
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return fling_velocity_cap_;
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static void set_fling_velocity_cap(float val) {
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    fling_velocity_cap_ = val;
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
139b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  // TODO(davemoore): Move into chrome/browser/ui.
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static int tab_scrub_activation_delay_in_ms() {
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return tab_scrub_activation_delay_in_ms_;
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static void set_tab_scrub_activation_delay_in_ms(int val) {
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    tab_scrub_activation_delay_in_ms_ = val;
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // These are listed in alphabetical order ignoring underscores, to
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // align with the associated list of preferences in
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // gesture_prefs_aura.cc. These two lists should be kept in sync.
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The default touch radius length used when the only information given
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // by the device is the touch center.
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static int default_radius_;
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The maximum allowed distance between two fingers for a two finger tap. If
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the distance between two fingers is greater than this value, we will not
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // recognize a two finger tap.
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static double max_distance_for_two_finger_tap_in_pixels_;
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Maximum time between a GestureFlingCancel and a mousedown such that the
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // mousedown is considered associated with the cancel event.
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static int fling_max_cancel_to_down_time_in_ms_;
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Maxium time between a mousedown/mouseup pair that is considered to be a
1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // suppressable tap.
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static int fling_max_tap_gap_time_in_ms_;
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static double long_press_time_in_seconds_;
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static double semi_long_press_time_in_seconds_;
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static double max_seconds_between_double_click_;
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static double max_separation_for_gesture_touches_in_pixels_;
1736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  static float max_swipe_deviation_angle_;
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static double max_touch_down_duration_in_seconds_for_click_;
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static double max_touch_move_in_pixels_for_click_;
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static double max_distance_between_taps_for_double_tap_;
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static double min_distance_for_pinch_scroll_in_pixels_;
1785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Only used with --compensate-for-unstable-pinch-zoom.
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static double min_pinch_update_distance_in_pixels_;
1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static float min_scroll_velocity_;
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static double min_swipe_speed_;
182010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  static int min_scaling_span_in_pixels_;
1831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  static int show_press_delay_in_ms_;
18446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  static int scroll_debounce_interval_in_ms_;
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static float fling_velocity_cap_;
186b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  // TODO(davemoore): Move into chrome/browser/ui.
1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static int tab_scrub_activation_delay_in_ms_;
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(GestureConfiguration);
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace ui
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#endif  // UI_EVENTS_GESTURES_GESTURE_CONFIGURATION_H_
195