1// Copyright 2013 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#ifndef CONTENT_BROWSER_RENDERER_HOST_INPUT_SYNTHETIC_PINCH_GESTURE_H_
6#define CONTENT_BROWSER_RENDERER_HOST_INPUT_SYNTHETIC_PINCH_GESTURE_H_
7
8#include "base/time/time.h"
9#include "content/browser/renderer_host/input/synthetic_gesture.h"
10#include "content/browser/renderer_host/input/synthetic_gesture_target.h"
11#include "content/common/content_export.h"
12#include "content/common/input/synthetic_pinch_gesture_params.h"
13#include "content/common/input/synthetic_web_input_event_builders.h"
14#include "third_party/WebKit/public/web/WebInputEvent.h"
15
16namespace content {
17
18class CONTENT_EXPORT SyntheticPinchGesture : public SyntheticGesture {
19 public:
20  explicit SyntheticPinchGesture(const SyntheticPinchGestureParams& params);
21  virtual ~SyntheticPinchGesture();
22
23  virtual SyntheticGesture::Result ForwardInputEvents(
24      const base::TimeTicks& timestamp,
25      SyntheticGestureTarget* target) OVERRIDE;
26
27 private:
28  enum GestureState {
29    SETUP,
30    STARTED,
31    MOVING,
32    DONE
33  };
34
35  void ForwardTouchInputEvents(const base::TimeTicks& timestamp,
36                               SyntheticGestureTarget* target);
37
38  void UpdateTouchPoints(const base::TimeTicks& timestamp);
39  void PressTouchPoints(SyntheticGestureTarget* target,
40                        const base::TimeTicks& timestamp);
41  void MoveTouchPoints(SyntheticGestureTarget* target, float delta,
42                       const base::TimeTicks& timestamp);
43  void ReleaseTouchPoints(SyntheticGestureTarget* target,
44                          const base::TimeTicks& timestamp);
45  void ForwardTouchEvent(SyntheticGestureTarget* target,
46                         const base::TimeTicks& timestamp);
47
48  void SetupCoordinatesAndStopTime(SyntheticGestureTarget* target);
49  float GetDeltaForPointer0AtTime(const base::TimeTicks& timestamp) const;
50  base::TimeTicks ClampTimestamp(const base::TimeTicks& timestamp) const;
51  bool HasReachedTarget(const base::TimeTicks& timestamp) const;
52
53  SyntheticPinchGestureParams params_;
54  float start_y_0_;
55  float start_y_1_;
56  float max_pointer_delta_0_;
57  SyntheticGestureParams::GestureSourceType gesture_source_type_;
58  GestureState state_;
59  SyntheticWebTouchEvent touch_event_;
60  base::TimeTicks start_time_;
61  base::TimeTicks stop_time_;
62
63 private:
64  DISALLOW_COPY_AND_ASSIGN(SyntheticPinchGesture);
65};
66
67}  // namespace content
68
69#endif  // CONTENT_BROWSER_RENDERER_HOST_INPUT_SYNTHETIC_PINCH_GESTURE_H_
70