Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2016 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 #include "ash/common/system/chromeos/palette/tools/laser_pointer_points.h" | |
| 6 | |
| 7 #include <limits> | |
| 8 | |
| 9 namespace ash { | |
| 10 | |
| 11 LaserPointerPoints::LaserPointerPoints(base::TimeDelta life_duration) | |
| 12 : life_duration_(life_duration) {} | |
| 13 | |
| 14 LaserPointerPoints::~LaserPointerPoints() {} | |
| 15 | |
| 16 void LaserPointerPoints::AddPoint(const gfx::Point& point) { | |
| 17 LaserPoint new_point; | |
| 18 new_point.location = point; | |
| 19 new_point.creation_time = base::Time::Now(); | |
| 20 points_.push_back(new_point); | |
| 21 ClearOldPoints(); | |
| 22 } | |
| 23 | |
| 24 void LaserPointerPoints::Clear() { | |
| 25 points_.clear(); | |
| 26 } | |
| 27 | |
| 28 gfx::Rect LaserPointerPoints::GetBoundingBox() { | |
| 29 gfx::Point min_point(INT_MAX, INT_MAX); | |
|
jdufault
2016/08/19 01:02:08
std::numeric_limits<int64_t>::max() (or whatever t
sammiequon
2016/08/19 20:28:46
Done.
| |
| 30 gfx::Point max_point(INT_MIN, INT_MIN); | |
| 31 for (auto it = points_.begin(); it != points_.end(); it++) { | |
|
jdufault
2016/08/19 01:02:08
for (const LaserPoint& point : points_)
sammiequon
2016/08/19 20:28:46
Done.
| |
| 32 min_point = gfx::Point(std::min(it->location.x(), min_point.x()), | |
| 33 std::min(it->location.y(), min_point.y())); | |
| 34 max_point = gfx::Point(std::max(it->location.x(), max_point.x()), | |
| 35 std::max(it->location.y(), max_point.y())); | |
| 36 } | |
| 37 return gfx::BoundingRect(min_point, max_point); | |
| 38 } | |
| 39 | |
| 40 LaserPointerPoints::LaserPoint LaserPointerPoints::GetOldest() const { | |
| 41 DCHECK(!IsEmpty()); | |
| 42 return points_.front(); | |
| 43 } | |
| 44 | |
| 45 LaserPointerPoints::LaserPoint LaserPointerPoints::GetMostRecent() const { | |
| 46 DCHECK(!IsEmpty()); | |
| 47 return points_.back(); | |
| 48 } | |
| 49 | |
| 50 bool LaserPointerPoints::IsEmpty() const { | |
| 51 return points_.empty(); | |
| 52 } | |
| 53 | |
| 54 int LaserPointerPoints::GetNumberOfPoints() const { | |
| 55 return points_.size(); | |
| 56 } | |
| 57 | |
| 58 std::deque<LaserPointerPoints::LaserPoint>::const_iterator | |
| 59 LaserPointerPoints::PointsStart() const { | |
| 60 return points_.cbegin(); | |
| 61 } | |
| 62 | |
| 63 std::deque<LaserPointerPoints::LaserPoint>::const_iterator | |
| 64 LaserPointerPoints::PointsEnd() const { | |
| 65 return points_.cend(); | |
| 66 } | |
| 67 | |
| 68 void LaserPointerPoints::ClearOldPoints() { | |
|
jdufault
2016/08/19 01:02:08
This only gets called after a point has been added
sammiequon
2016/08/19 20:28:46
Done.
| |
| 69 if (!points_.empty()) { | |
| 70 LaserPoint newest = points_.back(); | |
| 71 auto it = points_.begin(); | |
|
jdufault
2016/08/19 01:02:08
What about
auto it = std::find_if(points_.begin
sammiequon
2016/08/19 20:28:46
Done.
| |
| 72 for (; it != points_.end(); ++it) { | |
| 73 if (newest.creation_time - it->creation_time > life_duration_) { | |
| 74 } else { | |
| 75 // Since the points are sorted by time we can end the loop early once | |
| 76 // the condition fails. | |
| 77 break; | |
| 78 } | |
| 79 } | |
| 80 points_.erase(points_.begin(), it); | |
| 81 } | |
| 82 } | |
| 83 } // namespace ash | |
| OLD | NEW |