diff options
author | danakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-10 00:07:59 +0000 |
---|---|---|
committer | danakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-10 00:07:59 +0000 |
commit | fe07b6440c1a545943f15099f884ee989c9f0705 (patch) | |
tree | 9d9495e767a7eb4de2050d62118953acbb851eef /ui | |
parent | 0175b30c6c73ce2c2fc9633b98683d71b4fafcaa (diff) | |
download | chromium_src-fe07b6440c1a545943f15099f884ee989c9f0705.zip chromium_src-fe07b6440c1a545943f15099f884ee989c9f0705.tar.gz chromium_src-fe07b6440c1a545943f15099f884ee989c9f0705.tar.bz2 |
ui: Add methods to clamp Sizes, Points, and Vectors from above or below.
Tests:
PointTest.Clamp
PointTest.ClampF
SizeTest.Clamp
SizeTest.ClampF
Vector2dTest.Clamp
Vector2dTest.ClampF
Vector3dTest.ClampF
R=sky,enne
BUG=147395
Review URL: https://codereview.chromium.org/11361186
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@167014 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui')
-rw-r--r-- | ui/gfx/point_base.h | 10 | ||||
-rw-r--r-- | ui/gfx/point_unittest.cc | 52 | ||||
-rw-r--r-- | ui/gfx/size_base.h | 10 | ||||
-rw-r--r-- | ui/gfx/size_unittest.cc | 52 | ||||
-rw-r--r-- | ui/gfx/vector2d.h | 10 | ||||
-rw-r--r-- | ui/gfx/vector2d_f.h | 10 | ||||
-rw-r--r-- | ui/gfx/vector2d_unittest.cc | 52 | ||||
-rw-r--r-- | ui/gfx/vector3d_f.h | 12 | ||||
-rw-r--r-- | ui/gfx/vector3d_unittest.cc | 32 |
9 files changed, 240 insertions, 0 deletions
diff --git a/ui/gfx/point_base.h b/ui/gfx/point_base.h index 2578520..56a376b 100644 --- a/ui/gfx/point_base.h +++ b/ui/gfx/point_base.h @@ -43,6 +43,16 @@ class UI_EXPORT PointBase { y_ -= vector.y(); } + void ClampToMax(const Class& max) { + x_ = x_ <= max.x_ ? x_ : max.x_; + y_ = y_ <= max.y_ ? y_ : max.y_; + } + + void ClampToMin(const Class& min) { + x_ = x_ >= min.x_ ? x_ : min.x_; + y_ = y_ >= min.y_ ? y_ : min.y_; + } + bool IsOrigin() const { return x_ == 0 && y_ == 0; } diff --git a/ui/gfx/point_unittest.cc b/ui/gfx/point_unittest.cc index 82bf78c..e35462f 100644 --- a/ui/gfx/point_unittest.cc +++ b/ui/gfx/point_unittest.cc @@ -119,4 +119,56 @@ TEST(PointTest, Scale) { EXPECT_EQ(PointF(6, -3).ToString(), one.ToString()); } +TEST(PointTest, ClampPoint) { + Point a; + + a = Point(3, 5); + EXPECT_EQ(Point(3, 5).ToString(), a.ToString()); + a.ClampToMin(Point(2, 4)); + EXPECT_EQ(Point(3, 5).ToString(), a.ToString()); + a.ClampToMin(Point(3, 5)); + EXPECT_EQ(Point(3, 5).ToString(), a.ToString()); + a.ClampToMin(Point(4, 2)); + EXPECT_EQ(Point(4, 5).ToString(), a.ToString()); + a.ClampToMin(Point(8, 10)); + EXPECT_EQ(Point(8, 10).ToString(), a.ToString()); + + a.ClampToMax(Point(9, 11)); + EXPECT_EQ(Point(8, 10).ToString(), a.ToString()); + a.ClampToMax(Point(8, 10)); + EXPECT_EQ(Point(8, 10).ToString(), a.ToString()); + a.ClampToMax(Point(11, 9)); + EXPECT_EQ(Point(8, 9).ToString(), a.ToString()); + a.ClampToMax(Point(7, 11)); + EXPECT_EQ(Point(7, 9).ToString(), a.ToString()); + a.ClampToMax(Point(3, 5)); + EXPECT_EQ(Point(3, 5).ToString(), a.ToString()); +} + +TEST(PointTest, ClampPointF) { + PointF a; + + a = PointF(3.5f, 5.5f); + EXPECT_EQ(PointF(3.5f, 5.5f).ToString(), a.ToString()); + a.ClampToMin(PointF(2.5f, 4.5f)); + EXPECT_EQ(PointF(3.5f, 5.5f).ToString(), a.ToString()); + a.ClampToMin(PointF(3.5f, 5.5f)); + EXPECT_EQ(PointF(3.5f, 5.5f).ToString(), a.ToString()); + a.ClampToMin(PointF(4.5f, 2.5f)); + EXPECT_EQ(PointF(4.5f, 5.5f).ToString(), a.ToString()); + a.ClampToMin(PointF(8.5f, 10.5f)); + EXPECT_EQ(PointF(8.5f, 10.5f).ToString(), a.ToString()); + + a.ClampToMax(PointF(9.5f, 11.5f)); + EXPECT_EQ(PointF(8.5f, 10.5f).ToString(), a.ToString()); + a.ClampToMax(PointF(8.5f, 10.5f)); + EXPECT_EQ(PointF(8.5f, 10.5f).ToString(), a.ToString()); + a.ClampToMax(PointF(11.5f, 9.5f)); + EXPECT_EQ(PointF(8.5f, 9.5f).ToString(), a.ToString()); + a.ClampToMax(PointF(7.5f, 11.5f)); + EXPECT_EQ(PointF(7.5f, 9.5f).ToString(), a.ToString()); + a.ClampToMax(PointF(3.5f, 5.5f)); + EXPECT_EQ(PointF(3.5f, 5.5f).ToString(), a.ToString()); +} + } // namespace gfx diff --git a/ui/gfx/size_base.h b/ui/gfx/size_base.h index cd7221c..0dbfabd 100644 --- a/ui/gfx/size_base.h +++ b/ui/gfx/size_base.h @@ -35,6 +35,16 @@ class UI_EXPORT SizeBase { void set_width(Type width) { width_ = width; } void set_height(Type height) { height_ = height; } + void ClampToMax(const Class& max) { + width_ = width_ <= max.width_ ? width_ : max.width_; + height_ = height_ <= max.height_ ? height_ : max.height_; + } + + void ClampToMin(const Class& min) { + width_ = width_ >= min.width_ ? width_ : min.width_; + height_ = height_ >= min.height_ ? height_ : min.height_; + } + bool IsEmpty() const { return (width_ <= 0) || (height_ <= 0); } diff --git a/ui/gfx/size_unittest.cc b/ui/gfx/size_unittest.cc index d647f4c..a6fda9d 100644 --- a/ui/gfx/size_unittest.cc +++ b/ui/gfx/size_unittest.cc @@ -91,4 +91,56 @@ TEST(SizeTest, ToRoundedSize) { EXPECT_EQ(Size(-11, -11), ToRoundedSize(SizeF(-10.9999f, -10.9999f))); } +TEST(SizeTest, ClampSize) { + Size a; + + a = Size(3, 5); + EXPECT_EQ(Size(3, 5).ToString(), a.ToString()); + a.ClampToMin(Size(2, 4)); + EXPECT_EQ(Size(3, 5).ToString(), a.ToString()); + a.ClampToMin(Size(3, 5)); + EXPECT_EQ(Size(3, 5).ToString(), a.ToString()); + a.ClampToMin(Size(4, 2)); + EXPECT_EQ(Size(4, 5).ToString(), a.ToString()); + a.ClampToMin(Size(8, 10)); + EXPECT_EQ(Size(8, 10).ToString(), a.ToString()); + + a.ClampToMax(Size(9, 11)); + EXPECT_EQ(Size(8, 10).ToString(), a.ToString()); + a.ClampToMax(Size(8, 10)); + EXPECT_EQ(Size(8, 10).ToString(), a.ToString()); + a.ClampToMax(Size(11, 9)); + EXPECT_EQ(Size(8, 9).ToString(), a.ToString()); + a.ClampToMax(Size(7, 11)); + EXPECT_EQ(Size(7, 9).ToString(), a.ToString()); + a.ClampToMax(Size(3, 5)); + EXPECT_EQ(Size(3, 5).ToString(), a.ToString()); +} + +TEST(SizeTest, ClampSizeF) { + SizeF a; + + a = SizeF(3.5f, 5.5f); + EXPECT_EQ(SizeF(3.5f, 5.5f).ToString(), a.ToString()); + a.ClampToMin(SizeF(2.5f, 4.5f)); + EXPECT_EQ(SizeF(3.5f, 5.5f).ToString(), a.ToString()); + a.ClampToMin(SizeF(3.5f, 5.5f)); + EXPECT_EQ(SizeF(3.5f, 5.5f).ToString(), a.ToString()); + a.ClampToMin(SizeF(4.5f, 2.5f)); + EXPECT_EQ(SizeF(4.5f, 5.5f).ToString(), a.ToString()); + a.ClampToMin(SizeF(8.5f, 10.5f)); + EXPECT_EQ(SizeF(8.5f, 10.5f).ToString(), a.ToString()); + + a.ClampToMax(SizeF(9.5f, 11.5f)); + EXPECT_EQ(SizeF(8.5f, 10.5f).ToString(), a.ToString()); + a.ClampToMax(SizeF(8.5f, 10.5f)); + EXPECT_EQ(SizeF(8.5f, 10.5f).ToString(), a.ToString()); + a.ClampToMax(SizeF(11.5f, 9.5f)); + EXPECT_EQ(SizeF(8.5f, 9.5f).ToString(), a.ToString()); + a.ClampToMax(SizeF(7.5f, 11.5f)); + EXPECT_EQ(SizeF(7.5f, 9.5f).ToString(), a.ToString()); + a.ClampToMax(SizeF(3.5f, 5.5f)); + EXPECT_EQ(SizeF(3.5f, 5.5f).ToString(), a.ToString()); +} + } // namespace gfx diff --git a/ui/gfx/vector2d.h b/ui/gfx/vector2d.h index 6ec3708..418a98b 100644 --- a/ui/gfx/vector2d.h +++ b/ui/gfx/vector2d.h @@ -40,6 +40,16 @@ class UI_EXPORT Vector2d { void operator+=(const Vector2d& other) { Add(other); } void operator-=(const Vector2d& other) { Subtract(other); } + void ClampToMax(const Vector2d& max) { + x_ = x_ <= max.x_ ? x_ : max.x_; + y_ = y_ <= max.y_ ? y_ : max.y_; + } + + void ClampToMin(const Vector2d& min) { + x_ = x_ >= min.x_ ? x_ : min.x_; + y_ = y_ >= min.y_ ? y_ : min.y_; + } + // Gives the square of the diagonal length of the vector. Since this is // cheaper to compute than Length(), it is useful when you want to compare // relative lengths of different vectors without needing the actual lengths. diff --git a/ui/gfx/vector2d_f.h b/ui/gfx/vector2d_f.h index a245bb3..78c2318 100644 --- a/ui/gfx/vector2d_f.h +++ b/ui/gfx/vector2d_f.h @@ -38,6 +38,16 @@ class UI_EXPORT Vector2dF { void operator+=(const Vector2dF& other) { Add(other); } void operator-=(const Vector2dF& other) { Subtract(other); } + void ClampToMax(const Vector2dF& max) { + x_ = x_ <= max.x_ ? x_ : max.x_; + y_ = y_ <= max.y_ ? y_ : max.y_; + } + + void ClampToMin(const Vector2dF& min) { + x_ = x_ >= min.x_ ? x_ : min.x_; + y_ = y_ >= min.y_ ? y_ : min.y_; + } + // Gives the square of the diagonal length of the vector. double LengthSquared() const; // Gives the diagonal length of the vector. diff --git a/ui/gfx/vector2d_unittest.cc b/ui/gfx/vector2d_unittest.cc index b71b310..2ecce30 100644 --- a/ui/gfx/vector2d_unittest.cc +++ b/ui/gfx/vector2d_unittest.cc @@ -195,4 +195,56 @@ TEST(Vector2dTest, Length) { } } +TEST(Vector2dTest, ClampVector2d) { + Vector2d a; + + a = Vector2d(3, 5); + EXPECT_EQ(Vector2d(3, 5).ToString(), a.ToString()); + a.ClampToMin(Vector2d(2, 4)); + EXPECT_EQ(Vector2d(3, 5).ToString(), a.ToString()); + a.ClampToMin(Vector2d(3, 5)); + EXPECT_EQ(Vector2d(3, 5).ToString(), a.ToString()); + a.ClampToMin(Vector2d(4, 2)); + EXPECT_EQ(Vector2d(4, 5).ToString(), a.ToString()); + a.ClampToMin(Vector2d(8, 10)); + EXPECT_EQ(Vector2d(8, 10).ToString(), a.ToString()); + + a.ClampToMax(Vector2d(9, 11)); + EXPECT_EQ(Vector2d(8, 10).ToString(), a.ToString()); + a.ClampToMax(Vector2d(8, 10)); + EXPECT_EQ(Vector2d(8, 10).ToString(), a.ToString()); + a.ClampToMax(Vector2d(11, 9)); + EXPECT_EQ(Vector2d(8, 9).ToString(), a.ToString()); + a.ClampToMax(Vector2d(7, 11)); + EXPECT_EQ(Vector2d(7, 9).ToString(), a.ToString()); + a.ClampToMax(Vector2d(3, 5)); + EXPECT_EQ(Vector2d(3, 5).ToString(), a.ToString()); +} + +TEST(Vector2dTest, ClampVector2dF) { + Vector2dF a; + + a = Vector2dF(3.5f, 5.5f); + EXPECT_EQ(Vector2dF(3.5f, 5.5f).ToString(), a.ToString()); + a.ClampToMin(Vector2dF(2.5f, 4.5f)); + EXPECT_EQ(Vector2dF(3.5f, 5.5f).ToString(), a.ToString()); + a.ClampToMin(Vector2dF(3.5f, 5.5f)); + EXPECT_EQ(Vector2dF(3.5f, 5.5f).ToString(), a.ToString()); + a.ClampToMin(Vector2dF(4.5f, 2.5f)); + EXPECT_EQ(Vector2dF(4.5f, 5.5f).ToString(), a.ToString()); + a.ClampToMin(Vector2dF(8.5f, 10.5f)); + EXPECT_EQ(Vector2dF(8.5f, 10.5f).ToString(), a.ToString()); + + a.ClampToMax(Vector2dF(9.5f, 11.5f)); + EXPECT_EQ(Vector2dF(8.5f, 10.5f).ToString(), a.ToString()); + a.ClampToMax(Vector2dF(8.5f, 10.5f)); + EXPECT_EQ(Vector2dF(8.5f, 10.5f).ToString(), a.ToString()); + a.ClampToMax(Vector2dF(11.5f, 9.5f)); + EXPECT_EQ(Vector2dF(8.5f, 9.5f).ToString(), a.ToString()); + a.ClampToMax(Vector2dF(7.5f, 11.5f)); + EXPECT_EQ(Vector2dF(7.5f, 9.5f).ToString(), a.ToString()); + a.ClampToMax(Vector2dF(3.5f, 5.5f)); + EXPECT_EQ(Vector2dF(3.5f, 5.5f).ToString(), a.ToString()); +} + } // namespace gfx diff --git a/ui/gfx/vector3d_f.h b/ui/gfx/vector3d_f.h index ccd84ec..bb93abd 100644 --- a/ui/gfx/vector3d_f.h +++ b/ui/gfx/vector3d_f.h @@ -44,6 +44,18 @@ class UI_EXPORT Vector3dF { void operator+=(const Vector3dF& other) { Add(other); } void operator-=(const Vector3dF& other) { Subtract(other); } + void ClampToMax(const Vector3dF& max) { + x_ = x_ <= max.x_ ? x_ : max.x_; + y_ = y_ <= max.y_ ? y_ : max.y_; + z_ = z_ <= max.z_ ? z_ : max.z_; + } + + void ClampToMin(const Vector3dF& min) { + x_ = x_ >= min.x_ ? x_ : min.x_; + y_ = y_ >= min.y_ ? y_ : min.y_; + z_ = z_ >= min.z_ ? z_ : min.z_; + } + // Gives the square of the diagonal length of the vector. double LengthSquared() const; // Gives the diagonal length of the vector. diff --git a/ui/gfx/vector3d_unittest.cc b/ui/gfx/vector3d_unittest.cc index 9597e39..6e7da0b 100644 --- a/ui/gfx/vector3d_unittest.cc +++ b/ui/gfx/vector3d_unittest.cc @@ -230,4 +230,36 @@ TEST(Vector3dTest, CrossProduct) { } +TEST(Vector3dFTest, ClampVector3dF) { + Vector3dF a; + + a = Vector3dF(3.5f, 5.5f, 7.5f); + EXPECT_EQ(Vector3dF(3.5f, 5.5f, 7.5f).ToString(), a.ToString()); + a.ClampToMin(Vector3dF(2, 4.5f, 6.5f)); + EXPECT_EQ(Vector3dF(3.5f, 5.5f, 7.5f).ToString(), a.ToString()); + a.ClampToMin(Vector3dF(3.5f, 5.5f, 7.5f)); + EXPECT_EQ(Vector3dF(3.5f, 5.5f, 7.5f).ToString(), a.ToString()); + a.ClampToMin(Vector3dF(4.5f, 2, 6.5f)); + EXPECT_EQ(Vector3dF(4.5f, 5.5f, 7.5f).ToString(), a.ToString()); + a.ClampToMin(Vector3dF(3.5f, 6.5f, 6.5f)); + EXPECT_EQ(Vector3dF(4.5f, 6.5f, 7.5f).ToString(), a.ToString()); + a.ClampToMin(Vector3dF(3.5f, 5.5f, 8.5f)); + EXPECT_EQ(Vector3dF(4.5f, 6.5f, 8.5f).ToString(), a.ToString()); + a.ClampToMin(Vector3dF(8.5f, 10.5f, 12.5f)); + EXPECT_EQ(Vector3dF(8.5f, 10.5f, 12.5f).ToString(), a.ToString()); + + a.ClampToMax(Vector3dF(9.5f, 11.5f, 13.5f)); + EXPECT_EQ(Vector3dF(8.5f, 10.5f, 12.5f).ToString(), a.ToString()); + a.ClampToMax(Vector3dF(8.5f, 10.5f, 12.5f)); + EXPECT_EQ(Vector3dF(8.5f, 10.5f, 12.5f).ToString(), a.ToString()); + a.ClampToMax(Vector3dF(7.5f, 11.5f, 13.5f)); + EXPECT_EQ(Vector3dF(7.5f, 10.5f, 12.5f).ToString(), a.ToString()); + a.ClampToMax(Vector3dF(9.5f, 9.5f, 13.5f)); + EXPECT_EQ(Vector3dF(7.5f, 9.5f, 12.5f).ToString(), a.ToString()); + a.ClampToMax(Vector3dF(9.5f, 11.5f, 11.5f)); + EXPECT_EQ(Vector3dF(7.5f, 9.5f, 11.5f).ToString(), a.ToString()); + a.ClampToMax(Vector3dF(3.5f, 5.5f, 7.5f)); + EXPECT_EQ(Vector3dF(3.5f, 5.5f, 7.5f).ToString(), a.ToString()); +} + } // namespace gfx |