| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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_GEOMETRY_BOX_F_H_ | 5 #ifndef UI_GFX_GEOMETRY_BOX_F_H_ |
| 6 #define UI_GFX_GEOMETRY_BOX_F_H_ | 6 #define UI_GFX_GEOMETRY_BOX_F_H_ |
| 7 | 7 |
| 8 #include <iosfwd> | 8 #include <iosfwd> |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| 11 #include "ui/gfx/geometry/point3_f.h" | 11 #include "ui/gfx/geometry/point3_f.h" |
| 12 #include "ui/gfx/geometry/vector3d_f.h" | 12 #include "ui/gfx/geometry/vector3d_f.h" |
| 13 | 13 |
| 14 namespace gfx { | 14 namespace gfx { |
| 15 | 15 |
| 16 // A 3d version of gfx::RectF, with the positive z-axis pointed towards | 16 // A 3d version of gfx::RectF, with the positive z-axis pointed towards |
| 17 // the camera. | 17 // the camera. |
| 18 class GFX_EXPORT BoxF { | 18 class GFX_EXPORT BoxF { |
| 19 public: | 19 public: |
| 20 BoxF() : BoxF(0, 0, 0) {} | 20 constexpr BoxF() : BoxF(0, 0, 0) {} |
| 21 BoxF(float width, float height, float depth) | 21 constexpr BoxF(float width, float height, float depth) |
| 22 : BoxF(0, 0, 0, width, height, depth) {} | 22 : BoxF(0, 0, 0, width, height, depth) {} |
| 23 BoxF(float x, float y, float z, float width, float height, float depth) | 23 constexpr BoxF(float x, |
| 24 float y, |
| 25 float z, |
| 26 float width, |
| 27 float height, |
| 28 float depth) |
| 24 : BoxF(Point3F(x, y, z), width, height, depth) {} | 29 : BoxF(Point3F(x, y, z), width, height, depth) {} |
| 25 BoxF(const Point3F& origin, float width, float height, float depth) | 30 constexpr BoxF(const Point3F& origin, float width, float height, float depth) |
| 26 : origin_(origin), | 31 : origin_(origin), |
| 27 width_(width >= 0 ? width : 0), | 32 width_(width >= 0 ? width : 0), |
| 28 height_(height >= 0 ? height : 0), | 33 height_(height >= 0 ? height : 0), |
| 29 depth_(depth >= 0 ? depth : 0) {} | 34 depth_(depth >= 0 ? depth : 0) {} |
| 30 | 35 |
| 31 ~BoxF() {} | |
| 32 | |
| 33 // Scales all three axes by the given scale. | 36 // Scales all three axes by the given scale. |
| 34 void Scale(float scale) { | 37 void Scale(float scale) { |
| 35 Scale(scale, scale, scale); | 38 Scale(scale, scale, scale); |
| 36 } | 39 } |
| 37 | 40 |
| 38 // Scales each axis by the corresponding given scale. | 41 // Scales each axis by the corresponding given scale. |
| 39 void Scale(float x_scale, float y_scale, float z_scale) { | 42 void Scale(float x_scale, float y_scale, float z_scale) { |
| 40 origin_.Scale(x_scale, y_scale, z_scale); | 43 origin_.Scale(x_scale, y_scale, z_scale); |
| 41 set_size(width_ * x_scale, height_ * y_scale, depth_ * z_scale); | 44 set_size(width_ * x_scale, height_ * y_scale, depth_ * z_scale); |
| 42 } | 45 } |
| 43 | 46 |
| 44 // Moves the box by the specified distance in each dimension. | 47 // Moves the box by the specified distance in each dimension. |
| 45 void operator+=(const Vector3dF& offset) { | 48 void operator+=(const Vector3dF& offset) { |
| 46 origin_ += offset; | 49 origin_ += offset; |
| 47 } | 50 } |
| 48 | 51 |
| 49 // Returns true if the box has no interior points. | 52 // Returns true if the box has no interior points. |
| 50 bool IsEmpty() const; | 53 bool IsEmpty() const; |
| 51 | 54 |
| 52 // Computes the union of this box with the given box. The union is the | 55 // Computes the union of this box with the given box. The union is the |
| 53 // smallest box that contains both boxes. | 56 // smallest box that contains both boxes. |
| 54 void Union(const BoxF& box); | 57 void Union(const BoxF& box); |
| 55 | 58 |
| 56 std::string ToString() const; | 59 std::string ToString() const; |
| 57 | 60 |
| 58 float x() const { return origin_.x(); } | 61 constexpr float x() const { return origin_.x(); } |
| 59 void set_x(float x) { origin_.set_x(x); } | 62 void set_x(float x) { origin_.set_x(x); } |
| 60 | 63 |
| 61 float y() const { return origin_.y(); } | 64 constexpr float y() const { return origin_.y(); } |
| 62 void set_y(float y) { origin_.set_y(y); } | 65 void set_y(float y) { origin_.set_y(y); } |
| 63 | 66 |
| 64 float z() const { return origin_.z(); } | 67 constexpr float z() const { return origin_.z(); } |
| 65 void set_z(float z) { origin_.set_z(z); } | 68 void set_z(float z) { origin_.set_z(z); } |
| 66 | 69 |
| 67 float width() const { return width_; } | 70 constexpr float width() const { return width_; } |
| 68 void set_width(float width) { width_ = width < 0 ? 0 : width; } | 71 void set_width(float width) { width_ = width < 0 ? 0 : width; } |
| 69 | 72 |
| 70 float height() const { return height_; } | 73 constexpr float height() const { return height_; } |
| 71 void set_height(float height) { height_ = height < 0 ? 0 : height; } | 74 void set_height(float height) { height_ = height < 0 ? 0 : height; } |
| 72 | 75 |
| 73 float depth() const { return depth_; } | 76 constexpr float depth() const { return depth_; } |
| 74 void set_depth(float depth) { depth_ = depth < 0 ? 0 : depth; } | 77 void set_depth(float depth) { depth_ = depth < 0 ? 0 : depth; } |
| 75 | 78 |
| 76 float right() const { return x() + width(); } | 79 constexpr float right() const { return x() + width(); } |
| 77 float bottom() const { return y() + height(); } | 80 constexpr float bottom() const { return y() + height(); } |
| 78 float front() const { return z() + depth(); } | 81 constexpr float front() const { return z() + depth(); } |
| 79 | 82 |
| 80 void set_size(float width, float height, float depth) { | 83 void set_size(float width, float height, float depth) { |
| 81 width_ = width < 0 ? 0 : width; | 84 width_ = width < 0 ? 0 : width; |
| 82 height_ = height < 0 ? 0 : height; | 85 height_ = height < 0 ? 0 : height; |
| 83 depth_ = depth < 0 ? 0 : depth; | 86 depth_ = depth < 0 ? 0 : depth; |
| 84 } | 87 } |
| 85 | 88 |
| 86 const Point3F& origin() const { return origin_; } | 89 constexpr const Point3F& origin() const { return origin_; } |
| 87 void set_origin(const Point3F& origin) { origin_ = origin; } | 90 void set_origin(const Point3F& origin) { origin_ = origin; } |
| 88 | 91 |
| 89 // Expands |this| to contain the given point, if necessary. Please note, even | 92 // Expands |this| to contain the given point, if necessary. Please note, even |
| 90 // if |this| is empty, after the function |this| will continue to contain its | 93 // if |this| is empty, after the function |this| will continue to contain its |
| 91 // |origin_|. | 94 // |origin_|. |
| 92 void ExpandTo(const Point3F& point); | 95 void ExpandTo(const Point3F& point); |
| 93 | 96 |
| 94 // Expands |this| to contain the given box, if necessary. Please note, even | 97 // Expands |this| to contain the given box, if necessary. Please note, even |
| 95 // if |this| is empty, after the function |this| will continue to contain its | 98 // if |this| is empty, after the function |this| will continue to contain its |
| 96 // |origin_|. | 99 // |origin_|. |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 148 } | 151 } |
| 149 | 152 |
| 150 // This is declared here for use in gtest-based unit tests but is defined in | 153 // This is declared here for use in gtest-based unit tests but is defined in |
| 151 // the gfx_test_support target. Depend on that to use this in your unit test. | 154 // the gfx_test_support target. Depend on that to use this in your unit test. |
| 152 // This should not be used in production code - call ToString() instead. | 155 // This should not be used in production code - call ToString() instead. |
| 153 void PrintTo(const BoxF& box, ::std::ostream* os); | 156 void PrintTo(const BoxF& box, ::std::ostream* os); |
| 154 | 157 |
| 155 } // namespace gfx | 158 } // namespace gfx |
| 156 | 159 |
| 157 #endif // UI_GFX_GEOMETRY_BOX_F_H_ | 160 #endif // UI_GFX_GEOMETRY_BOX_F_H_ |
| OLD | NEW |