blob: 19e95c1d1b3b1d6598cf47fb5483be7a9d153813 [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef ASH_LASER_LASER_POINTER_POINTS_H_
#define ASH_LASER_LASER_POINTER_POINTS_H_
#include <deque>
#include <memory>
#include "ash/ash_export.h"
#include "base/time/time.h"
#include "ui/gfx/geometry/point.h"
#include "ui/gfx/geometry/rect.h"
namespace ash {
// LaserPointerPoints is a helper class used for displaying the palette tool
// laser pointer. It keeps track of the points needed to render the laser
// pointer and its tail.
class ASH_EXPORT LaserPointerPoints {
public:
// Struct to describe each point.
struct LaserPoint {
gfx::Point location;
base::Time creation_time;
};
// Constructor with a parameter to choose the fade out time of the points in
// the collection.
explicit LaserPointerPoints(base::TimeDelta life_duration);
~LaserPointerPoints();
// Adds a point. Automatically clears points that are too old.
void AddPoint(const gfx::Point& point);
// Removes all points.
void Clear();
// Gets the bounding box of the points.
gfx::Rect GetBoundingBox();
// Returns the oldest point in the collection.
LaserPoint GetOldest() const;
// Returns the newest point in the collection.
LaserPoint GetNewest() const;
// Returns the number of points in the collection.
int GetNumberOfPoints() const;
// Whether there are any points or not.
bool IsEmpty() const;
// Expose the collection so callers can work with the points.
const std::deque<LaserPoint>& laser_points();
private:
friend class LaserPointerPointsTestApi;
void ClearOldPoints();
base::TimeDelta life_duration_;
std::deque<LaserPoint> points_;
DISALLOW_COPY_AND_ASSIGN(LaserPointerPoints);
};
} // namespace ash
#endif // ASH_LASER_LASER_POINTER_POINTS_H_