diff options
author | reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2011-05-06 19:26:26 +0000 |
---|---|---|
committer | reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2011-05-06 19:26:26 +0000 |
commit | 7744c205f20b5617e83d4af8f97b5771bfa8d671 (patch) | |
tree | d63034e8dd4649c998ce01997417d3e0d015a0a7 /include/core/SkPoint.h | |
parent | 2e550127e68fcf050f07840fc1102b8471a3b6d0 (diff) |
use SkPoint, creating an alias for GrPoint
http://codereview.appspot.com/4498041/
git-svn-id: http://skia.googlecode.com/svn/trunk@1268 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'include/core/SkPoint.h')
-rw-r--r-- | include/core/SkPoint.h | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/include/core/SkPoint.h b/include/core/SkPoint.h index 52dbd51f6e..d74435e710 100644 --- a/include/core/SkPoint.h +++ b/include/core/SkPoint.h @@ -171,9 +171,40 @@ struct SK_API SkPoint { fY = SkIntToScalar(p.fY); } + void setAbs(const SkPoint& pt) { + fX = SkScalarAbs(pt.fX); + fY = SkScalarAbs(pt.fY); + } + + // counter-clockwise fan + void setIRectFan(int l, int t, int r, int b) { + SkPoint* v = this; + v[0].set(SkIntToScalar(l), SkIntToScalar(t)); + v[1].set(SkIntToScalar(l), SkIntToScalar(b)); + v[2].set(SkIntToScalar(r), SkIntToScalar(b)); + v[3].set(SkIntToScalar(r), SkIntToScalar(t)); + } + void setIRectFan(int l, int t, int r, int b, size_t stride); + + // counter-clockwise fan + void setRectFan(SkScalar l, SkScalar t, SkScalar r, SkScalar b) { + SkPoint* v = this; + v[0].set(l, t); + v[1].set(l, b); + v[2].set(r, b); + v[3].set(r, t); + } + void setRectFan(SkScalar l, SkScalar t, SkScalar r, SkScalar b, size_t stride); + + void offset(SkScalar dx, SkScalar dy) { + fX += dx; + fY += dy; + } + /** Return the euclidian distance from (0,0) to the point */ SkScalar length() const { return SkPoint::Length(fX, fY); } + SkScalar distanceToOrigin() const { return this->length(); } /** Set the point (vector) to be unit-length in the same direction as it currently is, and return its old length. If the old length is @@ -315,6 +346,32 @@ struct SK_API SkPoint { static SkScalar CrossProduct(const SkPoint& a, const SkPoint& b) { return SkScalarMul(a.fX, b.fY) - SkScalarMul(a.fY, b.fX); } + + SkScalar cross(const SkPoint& vec) const { + return CrossProduct(*this, vec); + } + + SkScalar dot(const SkPoint& vec) const { + return DotProduct(*this, vec); + } + + SkScalar lengthSqd() const { + return DotProduct(*this, *this); + } + + SkScalar distanceToSqd(const SkPoint& pt) const { + SkScalar dx = fX - pt.fX; + SkScalar dy = fY - pt.fY; + return SkScalarMul(dx, dx) + SkScalarMul(dy, dy); + } + + SkScalar distanceToLineSegmentBetweenSqd(const SkPoint& a, + const SkPoint& b) const; + + SkScalar distanceToLineSegmentBetween(const SkPoint& a, + const SkPoint& b) const { + return SkScalarSqrt(this->distanceToLineSegmentBetweenSqd(a, b)); + } }; typedef SkPoint SkVector; |