15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#ifndef UI_EVENTS_GESTURES_VELOCITY_CALCULATOR_H_
668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#define UI_EVENTS_GESTURES_VELOCITY_CALCULATOR_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
1268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ui/events/events_export.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ui {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)class EVENTS_EXPORT VelocityCalculator {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit VelocityCalculator(int bufferSize);
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~VelocityCalculator();
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void PointSeen(float x, float y, int64 time);
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  float XVelocity();
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  float YVelocity();
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  float VelocitySquared();
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ClearHistory();
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  struct Point {
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    float x;
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    float y;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int64 time;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void UpdateVelocity();
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  typedef scoped_ptr<Point[]> HistoryBuffer;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  HistoryBuffer buffer_;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // index_ points directly after the last point added.
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int index_;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  size_t num_valid_entries_;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const size_t buffer_size_;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  float x_velocity_;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  float y_velocity_;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool velocities_stale_;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(VelocityCalculator);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace ui
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#endif  // UI_EVENTS_GESTURES_VELOCITY_CALCULATOR_H_
51