1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#ifndef CONTENT_BROWSER_RENDERER_HOST_INPUT_SYNTHETIC_PINCH_GESTURE_H_ 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define CONTENT_BROWSER_RENDERER_HOST_INPUT_SYNTHETIC_PINCH_GESTURE_H_ 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/time/time.h" 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/browser/renderer_host/input/synthetic_gesture.h" 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/browser/renderer_host/input/synthetic_gesture_target.h" 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/common/content_export.h" 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/common/input/synthetic_pinch_gesture_params.h" 13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "content/common/input/synthetic_web_input_event_builders.h" 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "third_party/WebKit/public/web/WebInputEvent.h" 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace content { 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class CONTENT_EXPORT SyntheticPinchGesture : public SyntheticGesture { 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public: 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) explicit SyntheticPinchGesture(const SyntheticPinchGestureParams& params); 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual ~SyntheticPinchGesture(); 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual SyntheticGesture::Result ForwardInputEvents( 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::TimeTicks& timestamp, 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SyntheticGestureTarget* target) OVERRIDE; 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private: 28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) enum GestureState { 29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) SETUP, 30a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) STARTED, 31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) MOVING, 32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) DONE 33a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) }; 34a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void ForwardTouchInputEvents(const base::TimeTicks& timestamp, 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SyntheticGestureTarget* target); 37a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void UpdateTouchPoints(const base::TimeTicks& timestamp); 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void PressTouchPoints(SyntheticGestureTarget* target, 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::TimeTicks& timestamp); 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void MoveTouchPoints(SyntheticGestureTarget* target, float delta, 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::TimeTicks& timestamp); 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void ReleaseTouchPoints(SyntheticGestureTarget* target, 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::TimeTicks& timestamp); 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void ForwardTouchEvent(SyntheticGestureTarget* target, 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::TimeTicks& timestamp); 47a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void SetupCoordinatesAndStopTime(SyntheticGestureTarget* target); 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) float GetDeltaForPointer0AtTime(const base::TimeTicks& timestamp) const; 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::TimeTicks ClampTimestamp(const base::TimeTicks& timestamp) const; 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool HasReachedTarget(const base::TimeTicks& timestamp) const; 52a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SyntheticPinchGestureParams params_; 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) float start_y_0_; 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) float start_y_1_; 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) float max_pointer_delta_0_; 57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) SyntheticGestureParams::GestureSourceType gesture_source_type_; 58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) GestureState state_; 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SyntheticWebTouchEvent touch_event_; 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::TimeTicks start_time_; 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::TimeTicks stop_time_; 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private: 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SyntheticPinchGesture); 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace content 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif // CONTENT_BROWSER_RENDERER_HOST_INPUT_SYNTHETIC_PINCH_GESTURE_H_ 70