Index: ui/gfx/quad_f.h |
diff --git a/ui/gfx/quad_f.h b/ui/gfx/quad_f.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7e6bce10579c10ddf889efd102447f95f7303e26 |
--- /dev/null |
+++ b/ui/gfx/quad_f.h |
@@ -0,0 +1,94 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef UI_GFX_QUAD_F_H_ |
+#define UI_GFX_QUAD_F_H_ |
+ |
+#include <string> |
+ |
+#include "ui/base/ui_export.h" |
+#include "ui/gfx/point_f.h" |
+#include "ui/gfx/rect_f.h" |
+ |
+namespace gfx { |
+ |
+// A Quad is defined by four corners, allowing it to have edges that are not |
+// axis-aligned, unlike a Rect. |
+class UI_EXPORT QuadF { |
+ public: |
+ QuadF(); |
+ QuadF(const PointF& p1, const PointF& p2, const PointF& p3, const PointF& p4); |
+ explicit QuadF(const RectF& rect); |
+ ~QuadF(); |
+ |
+ void operator=(const QuadF& quad); |
+ void operator=(const RectF& rect); |
+ |
+ void set_p1(const PointF& p) { p1_ = p; } |
+ void set_p2(const PointF& p) { p2_ = p; } |
+ void set_p3(const PointF& p) { p3_ = p; } |
+ void set_p4(const PointF& p) { p4_ = p; } |
+ |
+ const PointF& p1() const { return p1_; } |
+ const PointF& p2() const { return p2_; } |
+ const PointF& p3() const { return p3_; } |
+ const PointF& p4() const { return p4_; } |
+ |
+ // Returns true if the quad is an axis-aligned rectangle. |
+ bool IsRectilinear() const; |
+ |
+ // Returns true if the points of the quad are in counter-clockwise order. This |
+ // assumes that the quad is convex, and that no three points are collinear. |
+ bool IsCounterClockwise() const; |
+ |
+ // Returns true if the |point| is contained within the quad, or lies on on |
+ // edge of the quad. |
+ bool Contains(const gfx::PointF& point) const; |
+ |
+ // Returns a rectangle that bounds the four points of the quad. The points of |
+ // the quad may lie on the right/bottom edge of the resulting rectangle, |
+ // rather than being strictly inside it. |
+ RectF BoundingBox() const; |
+ |
+ // Add a vector to the quad, offseting each point in the quad by the vector. |
+ void operator+=(const Vector2dF& rhs); |
+ // Subtract a vector from the quad, offseting each point in the quad by the |
+ // inverse of the vector. |
+ void operator-=(const Vector2dF& rhs); |
+ |
+ // Scale each point in the quad by the |scale| factor. |
+ void Scale(float scale) { Scale(scale, scale); } |
+ |
+ // Scale each point in the quad by the scale factors along each axis. |
+ void Scale(float x_scale, float y_scale); |
+ |
+ // Returns a string representation of quad. |
+ std::string ToString() const; |
+ |
+ private: |
+ PointF p1_; |
+ PointF p2_; |
+ PointF p3_; |
+ PointF p4_; |
+}; |
+ |
+inline bool operator==(const QuadF& lhs, const QuadF& rhs) { |
+ return |
+ lhs.p1() == rhs.p1() && lhs.p2() == rhs.p2() && |
tfarina
2012/11/02 15:59:10
nit: it fits in the previous line, you don't need
|
+ lhs.p3() == rhs.p3() && lhs.p4() == rhs.p4(); |
+} |
+ |
+inline bool operator!=(const QuadF& lhs, const QuadF& rhs) { |
+ return !(lhs == rhs); |
+} |
+ |
+// Add a vector to a quad, offseting each point in the quad by the vector. |
+UI_EXPORT QuadF operator+(const QuadF& lhs, const Vector2dF& rhs); |
+// Subtract a vector from a quad, offseting each point in the quad by the |
+// inverse of the vector. |
+UI_EXPORT QuadF operator-(const QuadF& lhs, const Vector2dF& rhs); |
+ |
+} // namespace gfx |
+ |
+#endif // UI_GFX_QUAD_F_H_ |