| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef UI_GFX_RANGE_RANGE_F_H_ | 5 #ifndef UI_GFX_RANGE_RANGE_F_H_ |
| 6 #define UI_GFX_RANGE_RANGE_F_H_ | 6 #define UI_GFX_RANGE_RANGE_F_H_ |
| 7 | 7 |
| 8 #include <limits> |
| 8 #include <ostream> | 9 #include <ostream> |
| 9 #include <string> | 10 #include <string> |
| 10 | 11 |
| 11 #include "ui/gfx/range/gfx_range_export.h" | 12 #include "ui/gfx/range/gfx_range_export.h" |
| 12 #include "ui/gfx/range/range.h" | 13 #include "ui/gfx/range/range.h" |
| 13 | 14 |
| 14 namespace gfx { | 15 namespace gfx { |
| 15 | 16 |
| 16 // A float version of Range. RangeF is made of a start and end position; when | 17 // A float version of Range. RangeF is made of a start and end position; when |
| 17 // they are the same, the range is empty. Note that |start_| can be greater | 18 // they are the same, the range is empty. Note that |start_| can be greater |
| 18 // than |end_| to respect the directionality of the range. | 19 // than |end_| to respect the directionality of the range. |
| 19 class GFX_RANGE_EXPORT RangeF { | 20 class GFX_RANGE_EXPORT RangeF { |
| 20 public: | 21 public: |
| 21 // Creates an empty range {0,0}. | 22 // Creates an empty range {0,0}. |
| 22 RangeF(); | 23 constexpr RangeF() : RangeF(0.f) {} |
| 23 | 24 |
| 24 // Initializes the range with a start and end. | 25 // Initializes the range with a start and end. |
| 25 RangeF(float start, float end); | 26 constexpr RangeF(float start, float end) : start_(start), end_(end) {} |
| 26 | 27 |
| 27 // Initializes the range with the same start and end positions. | 28 // Initializes the range with the same start and end positions. |
| 28 explicit RangeF(float position); | 29 constexpr explicit RangeF(float position) : RangeF(position, position) {} |
| 29 | 30 |
| 30 // Returns a range that is invalid, which is {float_max,float_max}. | 31 // Returns a range that is invalid, which is {float_max,float_max}. |
| 31 static const RangeF InvalidRange(); | 32 static constexpr RangeF InvalidRange() { |
| 33 return RangeF(std::numeric_limits<float>::max()); |
| 34 } |
| 32 | 35 |
| 33 // Checks if the range is valid through comparison to InvalidRange(). | 36 // Checks if the range is valid through comparison to InvalidRange(). |
| 34 bool IsValid() const; | 37 constexpr bool IsValid() const { return *this != InvalidRange(); } |
| 35 | 38 |
| 36 // Getters and setters. | 39 // Getters and setters. |
| 37 float start() const { return start_; } | 40 constexpr float start() const { return start_; } |
| 38 void set_start(float start) { start_ = start; } | 41 void set_start(float start) { start_ = start; } |
| 39 | 42 |
| 40 float end() const { return end_; } | 43 constexpr float end() const { return end_; } |
| 41 void set_end(float end) { end_ = end; } | 44 void set_end(float end) { end_ = end; } |
| 42 | 45 |
| 43 // Returns the absolute value of the length. | 46 // Returns the absolute value of the length. |
| 44 float length() const { | 47 constexpr float length() const { return GetMax() - GetMin(); } |
| 45 const float length = end() - start(); | 48 |
| 46 return length >= 0 ? length : -length; | 49 constexpr bool is_reversed() const { return start() > end(); } |
| 50 constexpr bool is_empty() const { return start() == end(); } |
| 51 |
| 52 // Returns the minimum and maximum values. |
| 53 constexpr float GetMin() const { return start() < end() ? start() : end(); } |
| 54 constexpr float GetMax() const { return start() > end() ? start() : end(); } |
| 55 |
| 56 constexpr bool operator==(const RangeF& other) const { |
| 57 return start() == other.start() && end() == other.end(); |
| 58 } |
| 59 constexpr bool operator!=(const RangeF& other) const { |
| 60 return !(*this == other); |
| 61 } |
| 62 constexpr bool EqualsIgnoringDirection(const RangeF& other) const { |
| 63 return GetMin() == other.GetMin() && GetMax() == other.GetMax(); |
| 47 } | 64 } |
| 48 | 65 |
| 49 bool is_reversed() const { return start() > end(); } | |
| 50 bool is_empty() const { return start() == end(); } | |
| 51 | |
| 52 // Returns the minimum and maximum values. | |
| 53 float GetMin() const; | |
| 54 float GetMax() const; | |
| 55 | |
| 56 bool operator==(const RangeF& other) const; | |
| 57 bool operator!=(const RangeF& other) const; | |
| 58 bool EqualsIgnoringDirection(const RangeF& other) const; | |
| 59 | |
| 60 // Returns true if this range intersects the specified |range|. | 66 // Returns true if this range intersects the specified |range|. |
| 61 bool Intersects(const RangeF& range) const; | 67 constexpr bool Intersects(const RangeF& range) const { |
| 68 return IsValid() && range.IsValid() && |
| 69 !(range.GetMax() < GetMin() || range.GetMin() >= GetMax()); |
| 70 } |
| 62 | 71 |
| 63 // Returns true if this range contains the specified |range|. | 72 // Returns true if this range contains the specified |range|. |
| 64 bool Contains(const RangeF& range) const; | 73 constexpr bool Contains(const RangeF& range) const { |
| 74 return IsValid() && range.IsValid() && GetMin() <= range.GetMin() && |
| 75 range.GetMax() <= GetMax(); |
| 76 } |
| 65 | 77 |
| 66 // Computes the intersection of this range with the given |range|. | 78 // Computes the intersection of this range with the given |range|. |
| 67 // If they don't intersect, it returns an InvalidRange(). | 79 // If they don't intersect, it returns an InvalidRange(). |
| 68 // The returned range is always empty or forward (never reversed). | 80 // The returned range is always empty or forward (never reversed). |
| 69 RangeF Intersect(const RangeF& range) const; | 81 RangeF Intersect(const RangeF& range) const; |
| 70 RangeF Intersect(const Range& range) const; | 82 RangeF Intersect(const Range& range) const; |
| 71 | 83 |
| 72 // Floor/Ceil/Round the start and end values of the given RangeF. | 84 // Floor/Ceil/Round the start and end values of the given RangeF. |
| 73 Range Floor() const; | 85 Range Floor() const; |
| 74 Range Ceil() const; | 86 Range Ceil() const; |
| 75 Range Round() const; | 87 Range Round() const; |
| 76 | 88 |
| 77 std::string ToString() const; | 89 std::string ToString() const; |
| 78 | 90 |
| 79 private: | 91 private: |
| 80 float start_; | 92 float start_; |
| 81 float end_; | 93 float end_; |
| 82 }; | 94 }; |
| 83 | 95 |
| 84 GFX_RANGE_EXPORT std::ostream& operator<<(std::ostream& os, | 96 GFX_RANGE_EXPORT std::ostream& operator<<(std::ostream& os, |
| 85 const RangeF& range); | 97 const RangeF& range); |
| 86 | 98 |
| 87 } // namespace gfx | 99 } // namespace gfx |
| 88 | 100 |
| 89 #endif // UI_GFX_RANGE_RANGE_F_H_ | 101 #endif // UI_GFX_RANGE_RANGE_F_H_ |
| OLD | NEW |