• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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