1 2 3 #ifndef SkSize_DEFINED 4 #define SkSize_DEFINED 5 6 template <typename T> struct SkTSize { 7 T fWidth; 8 T fHeight; 9 MakeSkTSize10 static SkTSize Make(T w, T h) { 11 SkTSize s; 12 s.fWidth = w; 13 s.fHeight = h; 14 return s; 15 } 16 setSkTSize17 void set(T w, T h) { 18 fWidth = w; 19 fHeight = h; 20 } 21 22 /** Returns true iff fWidth == 0 && fHeight == 0 23 */ isZeroSkTSize24 bool isZero() const { 25 return 0 == fWidth && 0 == fHeight; 26 } 27 28 /** Returns true if either widht or height are <= 0 */ isEmptySkTSize29 bool isEmpty() const { 30 return fWidth <= 0 || fHeight <= 0; 31 } 32 33 /** Set the width and height to 0 */ setEmptySkTSize34 void setEmpty() { 35 fWidth = fHeight = 0; 36 } 37 widthSkTSize38 T width() const { return fWidth; } heightSkTSize39 T height() const { return fHeight; } 40 41 /** If width or height is < 0, it is set to 0 */ clampNegToZeroSkTSize42 void clampNegToZero() { 43 if (fWidth < 0) { 44 fWidth = 0; 45 } 46 if (fHeight < 0) { 47 fHeight = 0; 48 } 49 } 50 equalsSkTSize51 bool equals(T w, T h) const { 52 return fWidth == w && fHeight == h; 53 } 54 }; 55 56 template <typename T> 57 static inline bool operator==(const SkTSize<T>& a, const SkTSize<T>& b) { 58 return a.fWidth == b.fWidth && a.fHeight == b.fHeight; 59 } 60 61 template <typename T> 62 static inline bool operator!=(const SkTSize<T>& a, const SkTSize<T>& b) { 63 return !(a == b); 64 } 65 66 /////////////////////////////////////////////////////////////////////////////// 67 68 typedef SkTSize<int32_t> SkISize; 69 70 #include "SkScalar.h" 71 72 struct SkSize : public SkTSize<SkScalar> { MakeSkSize73 static SkSize Make(SkScalar w, SkScalar h) { 74 SkSize s; 75 s.fWidth = w; 76 s.fHeight = h; 77 return s; 78 } 79 80 81 SkSize& operator=(const SkISize& src) { 82 this->set(SkIntToScalar(src.fWidth), SkIntToScalar(src.fHeight)); 83 return *this; 84 } 85 toRoundSkSize86 SkISize toRound() const { 87 SkISize s; 88 s.set(SkScalarRound(fWidth), SkScalarRound(fHeight)); 89 return s; 90 } 91 toCeilSkSize92 SkISize toCeil() const { 93 SkISize s; 94 s.set(SkScalarCeil(fWidth), SkScalarCeil(fHeight)); 95 return s; 96 } 97 toFloorSkSize98 SkISize toFloor() const { 99 SkISize s; 100 s.set(SkScalarFloor(fWidth), SkScalarFloor(fHeight)); 101 return s; 102 } 103 }; 104 105 #endif 106