summaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authordanakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-10 00:07:59 +0000
committerdanakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-10 00:07:59 +0000
commitfe07b6440c1a545943f15099f884ee989c9f0705 (patch)
tree9d9495e767a7eb4de2050d62118953acbb851eef /ui
parent0175b30c6c73ce2c2fc9633b98683d71b4fafcaa (diff)
downloadchromium_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.h10
-rw-r--r--ui/gfx/point_unittest.cc52
-rw-r--r--ui/gfx/size_base.h10
-rw-r--r--ui/gfx/size_unittest.cc52
-rw-r--r--ui/gfx/vector2d.h10
-rw-r--r--ui/gfx/vector2d_f.h10
-rw-r--r--ui/gfx/vector2d_unittest.cc52
-rw-r--r--ui/gfx/vector3d_f.h12
-rw-r--r--ui/gfx/vector3d_unittest.cc32
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