velocity_calculator.h revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
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
14namespace ui {
15
16class 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_
51