1 // Copyright (c) 2012 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 UI_EVENTS_GESTURES_VELOCITY_CALCULATOR_H_ 6 #define UI_EVENTS_GESTURES_VELOCITY_CALCULATOR_H_ 7 8 #include <vector> 9 10 #include "base/basictypes.h" 11 #include "base/memory/scoped_ptr.h" 12 #include "ui/events/events_export.h" 13 14 namespace ui { 15 16 class EVENTS_EXPORT VelocityCalculator { 17 public: 18 explicit VelocityCalculator(int bufferSize); 19 ~VelocityCalculator(); 20 void PointSeen(int x, int y, int64 time); 21 float XVelocity(); 22 float YVelocity(); 23 float VelocitySquared(); 24 void ClearHistory(); 25 26 private: 27 struct Point { 28 int x; 29 int y; 30 int64 time; 31 }; 32 33 void UpdateVelocity(); 34 35 typedef scoped_ptr<Point[]> HistoryBuffer; 36 HistoryBuffer buffer_; 37 38 // index_ points directly after the last point added. 39 int index_; 40 size_t num_valid_entries_; 41 const size_t buffer_size_; 42 float x_velocity_; 43 float y_velocity_; 44 bool velocities_stale_; 45 DISALLOW_COPY_AND_ASSIGN(VelocityCalculator); 46 }; 47 48 } // namespace ui 49 50 #endif // UI_EVENTS_GESTURES_VELOCITY_CALCULATOR_H_ 51