summaryrefslogtreecommitdiffstats
path: root/ui/gfx/point_f.h
diff options
context:
space:
mode:
authordanakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-31 18:33:24 +0000
committerdanakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-31 18:33:24 +0000
commitceb36f7d5cec71407b265aba887cd64216d24731 (patch)
treeea977c72eb7882c1629a5c78f56b1a9e7e3e6b60 /ui/gfx/point_f.h
parent80211f670f34191d80b875086aaf7b5b06a743d4 (diff)
downloadchromium_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.h17
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