OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2006 The Android Open Source Project | 2 * Copyright 2006 The Android Open Source Project |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #ifndef SkRect_DEFINED | 8 #ifndef SkRect_DEFINED |
9 #define SkRect_DEFINED | 9 #define SkRect_DEFINED |
10 | 10 |
(...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
395 r.setEmpty(); | 395 r.setEmpty(); |
396 return r; | 396 return r; |
397 } | 397 } |
398 | 398 |
399 static SkRect SK_WARN_UNUSED_RESULT MakeLargest() { | 399 static SkRect SK_WARN_UNUSED_RESULT MakeLargest() { |
400 SkRect r; | 400 SkRect r; |
401 r.setLargest(); | 401 r.setLargest(); |
402 return r; | 402 return r; |
403 } | 403 } |
404 | 404 |
| 405 /** |
| 406 * Make the largest SkRect for which canRound() returns true. |
| 407 */ |
| 408 static SkRect SK_WARN_UNUSED_RESULT MakeLargestS32() { |
| 409 const SkRect r = MakeLTRB(-SK_MaxS32Scalar, -SK_MaxS32Scalar, |
| 410 SK_MaxS32Scalar, SK_MaxS32Scalar); |
| 411 SkASSERT(r == Make(r.round())); |
| 412 return r; |
| 413 } |
| 414 |
405 static SkRect SK_WARN_UNUSED_RESULT MakeWH(SkScalar w, SkScalar h) { | 415 static SkRect SK_WARN_UNUSED_RESULT MakeWH(SkScalar w, SkScalar h) { |
406 SkRect r; | 416 SkRect r; |
407 r.set(0, 0, w, h); | 417 r.set(0, 0, w, h); |
408 return r; | 418 return r; |
409 } | 419 } |
410 | 420 |
411 static SkRect SK_WARN_UNUSED_RESULT MakeIWH(int w, int h) { | 421 static SkRect SK_WARN_UNUSED_RESULT MakeIWH(int w, int h) { |
412 SkRect r; | 422 SkRect r; |
413 r.set(0, 0, SkIntToScalar(w), SkIntToScalar(h)); | 423 r.set(0, 0, SkIntToScalar(w), SkIntToScalar(h)); |
414 return r; | 424 return r; |
(...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
807 * Returns true if the specified rectangle r is inside or equal to this rect
angle. | 817 * Returns true if the specified rectangle r is inside or equal to this rect
angle. |
808 */ | 818 */ |
809 bool contains(const SkIRect& r) const { | 819 bool contains(const SkIRect& r) const { |
810 // todo: can we eliminate the this->isEmpty check? | 820 // todo: can we eliminate the this->isEmpty check? |
811 return !r.isEmpty() && !this->isEmpty() && | 821 return !r.isEmpty() && !this->isEmpty() && |
812 fLeft <= SkIntToScalar(r.fLeft) && fTop <= SkIntToScalar(r.fTop)
&& | 822 fLeft <= SkIntToScalar(r.fLeft) && fTop <= SkIntToScalar(r.fTop)
&& |
813 fRight >= SkIntToScalar(r.fRight) && fBottom >= SkIntToScalar(r.
fBottom); | 823 fRight >= SkIntToScalar(r.fRight) && fBottom >= SkIntToScalar(r.
fBottom); |
814 } | 824 } |
815 | 825 |
816 /** | 826 /** |
| 827 * Return true if round(SkIRect) and roundOut(SkIRect) will not overflow Sk
IRect. |
| 828 */ |
| 829 bool canRound() const; |
| 830 |
| 831 /** |
817 * Set the dst rectangle by rounding this rectangle's coordinates to their | 832 * Set the dst rectangle by rounding this rectangle's coordinates to their |
818 * nearest integer values using SkScalarRoundToInt. | 833 * nearest integer values using SkScalarRoundToInt. |
819 */ | 834 */ |
820 void round(SkIRect* dst) const { | 835 void round(SkIRect* dst) const { |
821 SkASSERT(dst); | 836 SkASSERT(dst); |
822 dst->set(SkScalarRoundToInt(fLeft), SkScalarRoundToInt(fTop), | 837 dst->set(SkScalarRoundToInt(fLeft), SkScalarRoundToInt(fTop), |
823 SkScalarRoundToInt(fRight), SkScalarRoundToInt(fBottom)); | 838 SkScalarRoundToInt(fRight), SkScalarRoundToInt(fBottom)); |
824 } | 839 } |
825 | 840 |
826 /** | 841 /** |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
891 /** | 906 /** |
892 * cast-safe way to treat the rect as an array of (4) SkScalars. | 907 * cast-safe way to treat the rect as an array of (4) SkScalars. |
893 */ | 908 */ |
894 const SkScalar* asScalars() const { return &fLeft; } | 909 const SkScalar* asScalars() const { return &fLeft; } |
895 | 910 |
896 void dump(bool asHex) const; | 911 void dump(bool asHex) const; |
897 void dump() const { this->dump(false); } | 912 void dump() const { this->dump(false); } |
898 void dumpHex() const { this->dump(true); } | 913 void dumpHex() const { this->dump(true); } |
899 }; | 914 }; |
900 | 915 |
901 inline bool SkIRect::contains(const SkRect& r) const { | |
902 return !r.isEmpty() && !this->isEmpty() && // check for empties | |
903 (SkScalar)fLeft <= r.fLeft && (SkScalar)fTop <= r.fTop && | |
904 (SkScalar)fRight >= r.fRight && (SkScalar)fBottom >= r.fBottom; | |
905 } | |
906 | |
907 #endif | 916 #endif |
OLD | NEW |