143dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis// Copyright 2013 The Chromium Authors. All rights reserved.
243dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis// Use of this source code is governed by a BSD-style license that can be
343dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis// found in the LICENSE file.
443dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis
543dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis#include "content/browser/renderer_host/input/synthetic_gesture.h"
643dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis
743dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis#include "base/logging.h"
843dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis#include "content/browser/renderer_host/input/synthetic_gesture_target.h"
943dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis#include "content/browser/renderer_host/input/synthetic_pinch_gesture.h"
1043dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis#include "content/browser/renderer_host/input/synthetic_smooth_scroll_gesture.h"
1143dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis#include "content/browser/renderer_host/input/synthetic_tap_gesture.h"
1243dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis
1343dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidisnamespace content {
1443dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidisnamespace {
1543dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis
1643dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidistemplate <typename GestureType, typename GestureParamsType>
172e471a3e476396be1ddca4ab8b9df721bcfc9437Argyrios Kyrtzidisstatic scoped_ptr<SyntheticGesture> CreateGesture(
1843dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis    const SyntheticGestureParams& gesture_params) {
199fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis  return scoped_ptr<SyntheticGesture>(
20769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis      new GestureType(*GestureParamsType::Cast(&gesture_params)));
219fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis}
2243dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis
2343dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis}  // namespace
249fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis
25769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios KyrtzidisSyntheticGesture::SyntheticGesture() {}
26e1bfb7ae0dd0762c88e1fd94746e973c37f2e04eArgyrios Kyrtzidis
2743dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios KyrtzidisSyntheticGesture::~SyntheticGesture() {}
2843dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis
2943dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidisscoped_ptr<SyntheticGesture> SyntheticGesture::Create(
309fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis    const SyntheticGestureParams& gesture_params) {
319fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis  switch (gesture_params.GetGestureType()) {
32769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis    case SyntheticGestureParams::SMOOTH_SCROLL_GESTURE:
33769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis      return CreateGesture<SyntheticSmoothScrollGesture,
34769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis                           SyntheticSmoothScrollGestureParams>(gesture_params);
35e1bfb7ae0dd0762c88e1fd94746e973c37f2e04eArgyrios Kyrtzidis    case SyntheticGestureParams::PINCH_GESTURE:
36769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis      return CreateGesture<SyntheticPinchGesture,
3730726c6baee1417307236e854f1474fdb3cedb98Argyrios Kyrtzidis                           SyntheticPinchGestureParams>(gesture_params);
38769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis    case SyntheticGestureParams::TAP_GESTURE:
39769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis      return CreateGesture<SyntheticTapGesture,
40e1bfb7ae0dd0762c88e1fd94746e973c37f2e04eArgyrios Kyrtzidis                           SyntheticTapGestureParams>(gesture_params);
41e1bfb7ae0dd0762c88e1fd94746e973c37f2e04eArgyrios Kyrtzidis  }
42e1bfb7ae0dd0762c88e1fd94746e973c37f2e04eArgyrios Kyrtzidis  NOTREACHED() << "Invalid synthetic gesture type";
43e1bfb7ae0dd0762c88e1fd94746e973c37f2e04eArgyrios Kyrtzidis  return scoped_ptr<SyntheticGesture>();
44e1bfb7ae0dd0762c88e1fd94746e973c37f2e04eArgyrios Kyrtzidis}
45e1bfb7ae0dd0762c88e1fd94746e973c37f2e04eArgyrios Kyrtzidis
46769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis// static
47769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidisdouble SyntheticGesture::ConvertTimestampToSeconds(
48769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis    const base::TimeTicks& timestamp) {
49769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis  return (timestamp - base::TimeTicks()).InSecondsF();
50769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis}
51769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis
52769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis}  // namespace content
53769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis