Upstream version 10.38.222.0
[platform/framework/web/crosswalk.git] / src / ui / events / gestures / velocity_calculator.h
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(float x, float y, int64 time);
21   float XVelocity();
22   float YVelocity();
23   float VelocitySquared();
24   void ClearHistory();
25
26  private:
27   struct Point {
28     float x;
29     float 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_