1 // Copyright 2014 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_CHILD_TOUCH_FLING_GESTURE_CURVE_H_ 6 #define CONTENT_CHILD_TOUCH_FLING_GESTURE_CURVE_H_ 7 8 #include "content/common/content_export.h" 9 #include "third_party/WebKit/public/platform/WebFloatPoint.h" 10 #include "third_party/WebKit/public/platform/WebFloatSize.h" 11 #include "third_party/WebKit/public/platform/WebGestureCurve.h" 12 #include "third_party/WebKit/public/platform/WebSize.h" 13 14 namespace blink { 15 class WebGestureCurveTarget; 16 } 17 18 namespace content { 19 20 // Implementation of WebGestureCurve suitable for touch pad/screen-based 21 // fling scroll. Starts with a flat velocity profile based on 'velocity', which 22 // tails off to zero. Time is scaled to that duration of the fling is 23 // proportional to the initial velocity. 24 class TouchFlingGestureCurve : public blink::WebGestureCurve { 25 public: 26 27 static CONTENT_EXPORT WebGestureCurve* Create( 28 const blink::WebFloatPoint& initial_velocity, 29 float p0, float p1, float p2, 30 const blink::WebSize& cumulativeScroll); 31 32 virtual bool apply(double monotonicTime, 33 blink::WebGestureCurveTarget*) OVERRIDE; 34 35 private: 36 TouchFlingGestureCurve(const blink::WebFloatPoint& initial_velocity, 37 float p0, 38 float p1, 39 float p2, 40 const blink::WebSize& cumulativeScroll); 41 virtual ~TouchFlingGestureCurve(); 42 43 blink::WebFloatPoint displacement_ratio_; 44 blink::WebFloatSize cumulative_scroll_; 45 float coefficients_[3]; 46 float time_offset_; 47 float curve_duration_; 48 float position_offset_; 49 50 DISALLOW_COPY_AND_ASSIGN(TouchFlingGestureCurve); 51 }; 52 53 } // namespace content 54 55 #endif // CONTENT_CHILD_TOUCH_FLING_GESTURE_CURVE_H_ 56