diff options
Diffstat (limited to 'chromium/content/browser/renderer_host/input/input_router_config_helper.cc')
-rw-r--r-- | chromium/content/browser/renderer_host/input/input_router_config_helper.cc | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/chromium/content/browser/renderer_host/input/input_router_config_helper.cc b/chromium/content/browser/renderer_host/input/input_router_config_helper.cc new file mode 100644 index 00000000000..31b17cfab70 --- /dev/null +++ b/chromium/content/browser/renderer_host/input/input_router_config_helper.cc @@ -0,0 +1,140 @@ +// 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 "content/browser/renderer_host/input/input_router_config_helper.h" + +#include "base/command_line.h" +#include "content/public/common/content_switches.h" +#include "ui/events/gesture_detection/gesture_detector.h" + +#if defined(USE_AURA) +#include "ui/events/gestures/gesture_configuration.h" +#include "ui/events/gestures/unified_gesture_detector_enabled.h" +#elif defined(OS_ANDROID) +#include "ui/gfx/android/view_configuration.h" +#include "ui/gfx/screen.h" +#endif + +namespace content { +namespace { + +#if defined(USE_AURA) + +GestureEventQueue::Config GetGestureEventQueueConfig() { + GestureEventQueue::Config config; + + config.debounce_interval = base::TimeDelta::FromMilliseconds( + ui::GestureConfiguration::scroll_debounce_interval_in_ms()); + + config.touchscreen_tap_suppression_config.enabled = true; + config.touchscreen_tap_suppression_config.max_cancel_to_down_time = + base::TimeDelta::FromMilliseconds( + ui::GestureConfiguration::fling_max_cancel_to_down_time_in_ms()); + + config.touchscreen_tap_suppression_config.max_tap_gap_time = + base::TimeDelta::FromMilliseconds(static_cast<int>( + ui::GestureConfiguration::semi_long_press_time_in_seconds() * 1000)); + + config.touchpad_tap_suppression_config.enabled = true; + config.touchpad_tap_suppression_config.max_cancel_to_down_time = + base::TimeDelta::FromMilliseconds( + ui::GestureConfiguration::fling_max_cancel_to_down_time_in_ms()); + + config.touchpad_tap_suppression_config.max_tap_gap_time = + base::TimeDelta::FromMilliseconds(static_cast<int>( + ui::GestureConfiguration::fling_max_tap_gap_time_in_ms() * 1000)); + + return config; +} + +TouchEventQueue::Config GetTouchEventQueueConfig() { + TouchEventQueue::Config config; + + config.touchmove_slop_suppression_length_dips = + ui::GestureConfiguration::max_touch_move_in_pixels_for_click(); + + config.touchmove_slop_suppression_region_includes_boundary = + ui::IsUnifiedGestureDetectorEnabled(); + + return config; +} + +#elif defined(OS_ANDROID) + +// Default time allowance for the touch ack delay before the touch sequence is +// cancelled. +const int kTouchAckTimeoutDelayMs = 200; + +GestureEventQueue::Config GetGestureEventQueueConfig() { + GestureEventQueue::Config config; + + config.touchscreen_tap_suppression_config.enabled = true; + config.touchscreen_tap_suppression_config.max_cancel_to_down_time = + base::TimeDelta::FromMilliseconds( + gfx::ViewConfiguration::GetTapTimeoutInMs()); + config.touchscreen_tap_suppression_config.max_tap_gap_time = + base::TimeDelta::FromMilliseconds( + gfx::ViewConfiguration::GetLongPressTimeoutInMs()); + + return config; +} + +TouchEventQueue::Config GetTouchEventQueueConfig() { + TouchEventQueue::Config config; + + config.touch_ack_timeout_delay = + base::TimeDelta::FromMilliseconds(kTouchAckTimeoutDelayMs); + config.touch_ack_timeout_supported = true; + + const double touch_slop_length_pixels = + static_cast<double>(gfx::ViewConfiguration::GetTouchSlopInPixels()); + const double device_scale_factor = + gfx::Screen::GetNativeScreen()->GetPrimaryDisplay().device_scale_factor(); + config.touchmove_slop_suppression_length_dips = + touch_slop_length_pixels / device_scale_factor; + + return config; +} + +#else + +GestureEventQueue::Config GetGestureEventQueueConfig() { + return GestureEventQueue::Config(); +} + +TouchEventQueue::Config GetTouchEventQueueConfig() { + TouchEventQueue::Config config; + config.touchmove_slop_suppression_length_dips = + ui::GestureDetector::Config().touch_slop; + return config; +} + +#endif + +TouchEventQueue::TouchScrollingMode GetTouchScrollingMode() { + std::string modeString = + CommandLine::ForCurrentProcess()->GetSwitchValueASCII( + switches::kTouchScrollingMode); + if (modeString == switches::kTouchScrollingModeAsyncTouchmove) + return TouchEventQueue::TOUCH_SCROLLING_MODE_ASYNC_TOUCHMOVE; + if (modeString == switches::kTouchScrollingModeSyncTouchmove) + return TouchEventQueue::TOUCH_SCROLLING_MODE_SYNC_TOUCHMOVE; + if (modeString == switches::kTouchScrollingModeTouchcancel) + return TouchEventQueue::TOUCH_SCROLLING_MODE_TOUCHCANCEL; + if (modeString != "") + LOG(ERROR) << "Invalid --touch-scrolling-mode option: " << modeString; + return TouchEventQueue::TOUCH_SCROLLING_MODE_DEFAULT; +} + +} // namespace + +InputRouterImpl::Config GetInputRouterConfigForPlatform() { + InputRouterImpl::Config config; + config.gesture_config = GetGestureEventQueueConfig(); + config.touch_config = GetTouchEventQueueConfig(); + config.touch_config.touch_scrolling_mode = GetTouchScrollingMode(); + return config; +} + +} // namespace content |