Chromium Code Reviews| Index: src/core/SkRect.cpp |
| diff --git a/src/core/SkRect.cpp b/src/core/SkRect.cpp |
| index 12f76526a5d0fc0dc52e00430869156befc6f2bd..7340098d2fb479df095a32c83354a20f02909648 100644 |
| --- a/src/core/SkRect.cpp |
| +++ b/src/core/SkRect.cpp |
| @@ -99,51 +99,27 @@ bool SkRect::setBoundsCheck(const SkPoint pts[], int count) { |
| return isFinite; |
| } |
| -bool SkRect::intersect(SkScalar left, SkScalar top, SkScalar right, |
| - SkScalar bottom) { |
| - if (left < right && top < bottom && !this->isEmpty() && // check for empties |
| - fLeft < right && left < fRight && fTop < bottom && top < fBottom) |
| - { |
| - if (fLeft < left) fLeft = left; |
| - if (fTop < top) fTop = top; |
| - if (fRight > right) fRight = right; |
| - if (fBottom > bottom) fBottom = bottom; |
| - return true; |
| - } |
| - return false; |
| +#define CHECK_INTERSECT(al, at, ar, ab, bl, bt, br, bb) \ |
| + SkScalar L = SkMaxScalar(al, bl); \ |
| + SkScalar R = SkMinScalar(ar, br); \ |
| + SkScalar T = SkMaxScalar(at, bt); \ |
| + SkScalar B = SkMinScalar(ab, bb); \ |
| + do { if (L >= R || T >= B) return false; } while (0) |
| + |
| +bool SkRect::intersect(SkScalar left, SkScalar top, SkScalar right, SkScalar bottom) { |
| + CHECK_INTERSECT(left, top, right, bottom, fLeft, fTop, fRight, fBottom); |
|
caryclark
2014/10/09 20:19:47
Is this the same as
if (!Intersects(left, to
|
| + this->setLTRB(L, T, R, B); |
| + return true; |
| } |
| bool SkRect::intersect(const SkRect& r) { |
| return this->intersect(r.fLeft, r.fTop, r.fRight, r.fBottom); |
| } |
| -bool SkRect::intersect2(const SkRect& r) { |
| - SkScalar L = SkMaxScalar(fLeft, r.fLeft); |
| - SkScalar R = SkMinScalar(fRight, r.fRight); |
| - if (L >= R) { |
| - return false; |
| - } |
| - SkScalar T = SkMaxScalar(fTop, r.fTop); |
| - SkScalar B = SkMinScalar(fBottom, r.fBottom); |
| - if (T >= B) { |
| - return false; |
| - } |
| - this->set(L, T, R, B); |
| - return true; |
| -} |
| - |
| bool SkRect::intersect(const SkRect& a, const SkRect& b) { |
| - |
| - if (!a.isEmpty() && !b.isEmpty() && |
| - a.fLeft < b.fRight && b.fLeft < a.fRight && |
| - a.fTop < b.fBottom && b.fTop < a.fBottom) { |
| - fLeft = SkMaxScalar(a.fLeft, b.fLeft); |
| - fTop = SkMaxScalar(a.fTop, b.fTop); |
| - fRight = SkMinScalar(a.fRight, b.fRight); |
| - fBottom = SkMinScalar(a.fBottom, b.fBottom); |
| - return true; |
| - } |
| - return false; |
| + CHECK_INTERSECT(a.fLeft, a.fTop, a.fRight, a.fBottom, b.fLeft, b.fTop, b.fRight, b.fBottom); |
| + this->setLTRB(L, T, R, B); |
| + return true; |
| } |
| void SkRect::join(SkScalar left, SkScalar top, SkScalar right, SkScalar bottom) { |
| @@ -162,3 +138,4 @@ void SkRect::join(SkScalar left, SkScalar top, SkScalar right, SkScalar bottom) |
| fBottom = SkMaxScalar(fBottom, bottom); |
| } |
| } |
| + |