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_FLING_CURVE_CONFIGURATION_H_ 6 #define CONTENT_CHILD_FLING_CURVE_CONFIGURATION_H_ 7 8 #include <vector> 9 10 #include "base/synchronization/lock.h" 11 #include "third_party/WebKit/public/platform/WebFloatPoint.h" 12 #include "third_party/WebKit/public/platform/WebSize.h" 13 14 namespace blink { 15 class WebGestureCurve; 16 } 17 18 namespace content { 19 20 // A class to manage dynamically adjustable parameters controlling the 21 // shape of the fling deacceleration function. 22 class FlingCurveConfiguration { 23 public: 24 FlingCurveConfiguration(); 25 virtual ~FlingCurveConfiguration(); 26 27 // Create a touchpad fling curve using the current parameters. 28 blink::WebGestureCurve* CreateForTouchPad( 29 const blink::WebFloatPoint& velocity, 30 const blink::WebSize& cumulativeScroll); 31 32 // Create a touchscreen fling curve using the current parameters. 33 blink::WebGestureCurve* CreateForTouchScreen( 34 const blink::WebFloatPoint& velocity, 35 const blink::WebSize& cumulativeScroll); 36 37 // Set the curve parameters. 38 void SetCurveParameters( 39 const std::vector<float>& new_touchpad, 40 const std::vector<float>& new_touchscreen); 41 42 private: 43 blink::WebGestureCurve* CreateCore( 44 const std::vector<float>& coefs, 45 const blink::WebFloatPoint& velocity, 46 const blink::WebSize& cumulativeScroll); 47 48 // Protect access to touchpad_coefs_ and touchscreen_coefs_. 49 base::Lock lock_; 50 std::vector<float> touchpad_coefs_; 51 std::vector<float> touchscreen_coefs_; 52 53 DISALLOW_COPY_AND_ASSIGN(FlingCurveConfiguration); 54 }; 55 56 } // namespace content 57 58 #endif // CONTENT_CHILD_FLING_CURVE_CONFIGURATION_H_ 59