gesture_config_helper_aura.cc revision 5f1c94371a64b3196d4be9466099bb892df9b88e
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// MSVC++ requires this to be set before any other includes to get M_PI.
6#define _USE_MATH_DEFINES
7
8#include "ui/events/gesture_detection/gesture_config_helper.h"
9
10#include <cmath>
11
12#include "base/command_line.h"
13#include "ui/events/event_switches.h"
14#include "ui/events/gestures/gesture_configuration.h"
15#include "ui/gfx/screen.h"
16
17namespace ui {
18namespace {
19
20GestureDetector::Config DefaultGestureDetectorConfig() {
21  GestureDetector::Config config;
22
23  config.longpress_timeout = base::TimeDelta::FromMilliseconds(
24      GestureConfiguration::long_press_time_in_seconds() * 1000.);
25  config.showpress_timeout = base::TimeDelta::FromMilliseconds(
26      GestureConfiguration::show_press_delay_in_ms());
27  config.double_tap_timeout = base::TimeDelta::FromMilliseconds(
28      GestureConfiguration::semi_long_press_time_in_seconds() * 1000.);
29  config.touch_slop =
30      GestureConfiguration::max_touch_move_in_pixels_for_click();
31  config.double_tap_slop =
32      GestureConfiguration::max_distance_between_taps_for_double_tap();
33  config.minimum_fling_velocity =
34      GestureConfiguration::min_scroll_velocity();
35  config.maximum_fling_velocity = GestureConfiguration::fling_velocity_cap();
36  config.swipe_enabled = true;
37  config.minimum_swipe_velocity = GestureConfiguration::min_swipe_speed();
38  config.maximum_swipe_deviation_angle =
39      atan2(1.f, GestureConfiguration::max_swipe_deviation_ratio()) * 180.0f /
40      static_cast<float>(M_PI);
41  config.two_finger_tap_enabled = true;
42  config.two_finger_tap_max_separation =
43      GestureConfiguration::max_distance_for_two_finger_tap_in_pixels();
44  config.two_finger_tap_timeout = base::TimeDelta::FromMilliseconds(
45      GestureConfiguration::max_touch_down_duration_in_seconds_for_click() *
46      1000.);
47
48  return config;
49}
50
51ScaleGestureDetector::Config DefaultScaleGestureDetectorConfig() {
52  ScaleGestureDetector::Config config;
53  double min_pinch_update_distance =
54      CommandLine::ForCurrentProcess()->HasSwitch(
55          switches::kCompensateForUnstablePinchZoom)
56          ? GestureConfiguration::min_pinch_update_distance_in_pixels()
57          : 0;
58
59  config.gesture_detector_config = DefaultGestureDetectorConfig();
60  config.min_scaling_touch_major = GestureConfiguration::default_radius() * 2;
61  config.min_scaling_span = GestureConfiguration::min_scaling_span_in_pixels();
62  config.min_pinch_update_span_delta = min_pinch_update_distance;
63  return config;
64}
65
66}  // namespace
67
68GestureProvider::Config DefaultGestureProviderConfig() {
69  GestureProvider::Config config;
70  config.display = gfx::Screen::GetNativeScreen()->GetPrimaryDisplay();
71  config.gesture_detector_config = DefaultGestureDetectorConfig();
72  config.scale_gesture_detector_config = DefaultScaleGestureDetectorConfig();
73  config.gesture_begin_end_types_enabled = true;
74  // Half the size of the default touch length is a reasonable minimum.
75  config.min_gesture_bounds_length = GestureConfiguration::default_radius();
76  return config;
77}
78
79}  // namespace ui
80