// 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.

#include "ui/events/gesture_detection/gesture_configuration.h"

namespace ui {
namespace {

GestureConfiguration* instance = nullptr;

}  // namespace

// static
void GestureConfiguration::SetInstance(GestureConfiguration* config) {
  instance = config;
}

// static
GestureConfiguration* GestureConfiguration::GetInstance() {
  if (instance)
    return instance;

  return GestureConfiguration::GetPlatformSpecificInstance();
}

GestureConfiguration::GestureConfiguration()
    : default_radius_(25),
      double_tap_enabled_(false),
      double_tap_timeout_in_ms_(400),
      fling_max_cancel_to_down_time_in_ms_(400),
      fling_max_tap_gap_time_in_ms_(200),
      gesture_begin_end_types_enabled_(false),
      long_press_time_in_ms_(1000),
      max_distance_between_taps_for_double_tap_(20),
      max_distance_for_two_finger_tap_in_pixels_(300),
      max_fling_velocity_(17000.0f),
      max_gesture_bounds_length_(0),
      max_separation_for_gesture_touches_in_pixels_(150),
      max_swipe_deviation_angle_(20),
      max_time_between_double_click_in_ms_(700),
      max_touch_down_duration_for_click_in_ms_(800),
      max_touch_move_in_pixels_for_click_(15),
      min_distance_for_pinch_scroll_in_pixels_(20),
      min_fling_velocity_(30.0f),
      min_gesture_bounds_length_(0),
      min_pinch_update_span_delta_(0),
      // If this is too small, we currently can get single finger pinch zoom.
      // See crbug.com/357237 for details.
      min_scaling_span_in_pixels_(125),
      // The default value of min_scaling_touch_major_ is 2 * default_radius_.
      min_scaling_touch_major_(50),
      min_swipe_velocity_(20),
      // TODO(jdduke): Disable and remove entirely when issues with intermittent
      // scroll end detection on the Pixel are resolved, crbug.com/353702.
#if defined(OS_CHROMEOS)
      scroll_debounce_interval_in_ms_(30),
#else
      scroll_debounce_interval_in_ms_(0),
#endif
      semi_long_press_time_in_ms_(400),
      show_press_delay_in_ms_(150),
      // The default value of span_slop_ is
      // 2 * max_touch_move_in_pixels_for_click_.
      span_slop_(30),
      swipe_enabled_(false),
      tab_scrub_activation_delay_in_ms_(200),
      two_finger_tap_enabled_(false),
      velocity_tracker_strategy_(VelocityTracker::Strategy::STRATEGY_DEFAULT) {
}

GestureConfiguration::~GestureConfiguration() {
}

}  // namespace ui
