diff options
author | danakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-31 18:33:24 +0000 |
---|---|---|
committer | danakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-31 18:33:24 +0000 |
commit | ceb36f7d5cec71407b265aba887cd64216d24731 (patch) | |
tree | ea977c72eb7882c1629a5c78f56b1a9e7e3e6b60 /ui/gfx/point_f.h | |
parent | 80211f670f34191d80b875086aaf7b5b06a743d4 (diff) | |
download | chromium_src-ceb36f7d5cec71407b265aba887cd64216d24731.zip chromium_src-ceb36f7d5cec71407b265aba887cd64216d24731.tar.gz chromium_src-ceb36f7d5cec71407b265aba887cd64216d24731.tar.bz2 |
Add Vector2d classes that represent offsets, instead of using Point.
Previously Point served two purposes, to be a position in 2d space, and also
an offset from the origin. This introduces a Vector2d class to represent an
offset, allowing typesafety checks for geometric operations.
The following are now the case:
Point +/- Vector = Point
- A point plus/minus an offset gives you a point at a position offset by the
vector.
Vector +/- Vector = Vector
- Two offsets can be added together to make a new offset.
Point - Point = Vector
- Subtracting one point from another gives you the offset between the two
points.
We add some new methods to perform these operations:
Rect::OffsetFromOrigin() gives the offset between the position of the rect
and the origin.
Point::OffsetFromOrigin() gives the offset between the point and the origin.
PointAtOffsetFromOrigin(Vector2d) converts a Vector2d to a Point at the given
offset away from the origin.
Rect::Offset(), Point::Add(), and Point::Subtract() now receive a Vector2d
instead of a point.
BUG=147395
R=sky
Review URL: https://codereview.chromium.org/11269022
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@165198 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/gfx/point_f.h')
-rw-r--r-- | ui/gfx/point_f.h | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/ui/gfx/point_f.h b/ui/gfx/point_f.h index d6cded9..3e69bd7 100644 --- a/ui/gfx/point_f.h +++ b/ui/gfx/point_f.h @@ -9,11 +9,12 @@ #include "ui/base/ui_export.h" #include "ui/gfx/point_base.h" +#include "ui/gfx/vector2d_f.h" namespace gfx { // A floating version of gfx::Point. -class UI_EXPORT PointF : public PointBase<PointF, float> { +class UI_EXPORT PointF : public PointBase<PointF, float, Vector2dF> { public: PointF(); PointF(float x, float y); @@ -39,16 +40,24 @@ inline bool operator!=(const PointF& lhs, const PointF& rhs) { return !(lhs == rhs); } -inline PointF operator+(PointF lhs, PointF rhs) { +inline PointF operator+(const PointF& lhs, const Vector2dF& rhs) { return lhs.Add(rhs); } -inline PointF operator-(PointF lhs, PointF rhs) { +inline PointF operator-(const PointF& lhs, const Vector2dF& rhs) { return lhs.Subtract(rhs); } +inline Vector2dF operator-(const PointF& lhs, const PointF& rhs) { + return lhs.OffsetFrom(rhs); +} + +inline PointF PointAtOffsetFromOrigin(const Vector2dF& offset_from_origin) { + return PointF(offset_from_origin.x(), offset_from_origin.y()); +} + #if !defined(COMPILER_MSVC) -extern template class PointBase<PointF, float>; +extern template class PointBase<PointF, float, Vector2dF>; #endif } // namespace gfx |