6 #define MIN(a,b) (a < b ? a : b)
7 #define MAX(a,b) (a > b ? a : b)
13 eSize( int w, int h );
21 void setWidth( int w );
22 void setHeight( int h );
25 eSize expandedTo( const eSize & ) const;
26 eSize boundedTo( const eSize & ) const;
31 eSize &operator+=( const eSize & );
32 eSize &operator-=( const eSize & );
33 eSize &operator*=( int c );
34 eSize &operator*=( double c );
35 eSize &operator/=( int c );
36 eSize &operator/=( double c );
38 friend inline bool operator==( const eSize &, const eSize & );
39 friend inline bool operator!=( const eSize &, const eSize & );
40 friend inline eSize operator+( const eSize &, const eSize & );
41 friend inline eSize operator-( const eSize &, const eSize & );
42 friend inline eSize operator*( const eSize &, int );
43 friend inline eSize operator*( int, const eSize & );
44 friend inline eSize operator*( const eSize &, double );
45 friend inline eSize operator*( double, const eSize & );
46 friend inline eSize operator/( const eSize &, int );
47 friend inline eSize operator/( const eSize &, double );
55 /*****************************************************************************
56 eSize stream functions
57 *****************************************************************************/
61 inline ostream &operator<<( ostream &s, const eSize &sz )
63 s << sz.width() << sz.height();
67 inline istream &operator>>( istream &s, eSize &sz )
69 s >> sz.rwidth() >> sz.rheight();
75 /*****************************************************************************
76 eSize inline functions
77 *****************************************************************************/
82 inline eSize::eSize( int w, int h )
85 inline bool eSize::isNull() const
86 { return wd==0 && ht==0; }
88 inline bool eSize::isEmpty() const
89 { return wd<1 || ht<1; }
91 inline bool eSize::isValid() const
92 { return wd>=0 && ht>=0; }
94 inline int eSize::width() const
97 inline int eSize::height() const
100 inline void eSize::setWidth( int w )
103 inline void eSize::setHeight( int h )
106 inline int &eSize::rwidth()
109 inline int &eSize::rheight()
112 inline eSize &eSize::operator+=( const eSize &s )
113 { wd+=s.wd; ht+=s.ht; return *this; }
115 inline eSize &eSize::operator-=( const eSize &s )
116 { wd-=s.wd; ht-=s.ht; return *this; }
118 inline eSize &eSize::operator*=( int c )
119 { wd*=c; ht*=c; return *this; }
121 inline eSize &eSize::operator*=( double c )
122 { wd=(int)(wd*c); ht=(int)(ht*c); return *this; }
124 inline bool operator==( const eSize &s1, const eSize &s2 )
125 { return s1.wd == s2.wd && s1.ht == s2.ht; }
127 inline bool operator!=( const eSize &s1, const eSize &s2 )
128 { return s1.wd != s2.wd || s1.ht != s2.ht; }
130 inline eSize operator+( const eSize & s1, const eSize & s2 )
131 { return eSize(s1.wd+s2.wd, s1.ht+s2.ht); }
133 inline eSize operator-( const eSize &s1, const eSize &s2 )
134 { return eSize(s1.wd-s2.wd, s1.ht-s2.ht); }
136 inline eSize operator*( const eSize &s, int c )
137 { return eSize(s.wd*c, s.ht*c); }
139 inline eSize operator*( int c, const eSize &s )
140 { return eSize(s.wd*c, s.ht*c); }
142 inline eSize operator*( const eSize &s, double c )
143 { return eSize((int)(s.wd*c), (int)(s.ht*c)); }
145 inline eSize operator*( double c, const eSize &s )
146 { return eSize((int)(s.wd*c), (int)(s.ht*c)); }
148 inline eSize &eSize::operator/=( int c )
154 inline eSize &eSize::operator/=( double c )
156 wd=(int)(wd/c); ht=(int)(ht/c);
160 inline eSize operator/( const eSize &s, int c )
162 return eSize(s.wd/c, s.ht/c);
165 inline eSize operator/( const eSize &s, double c )
167 return eSize((int)(s.wd/c), (int)(s.ht/c));
170 inline eSize eSize::expandedTo( const eSize & otherSize ) const
172 return eSize( MAX(wd,otherSize.wd), MAX(ht,otherSize.ht) );
175 inline eSize eSize::boundedTo( const eSize & otherSize ) const
177 return eSize( MIN(wd,otherSize.wd), MIN(ht,otherSize.ht) );
180 inline void eSize::transpose()