Chromium Code Reviews| 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_ |