chxxtype.h
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:13k
源码类别:

Symbian

开发平台:

C/C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 1.0/RPSL 1.0 
  3.  *  
  4.  * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. 
  5.  *      
  6.  * The contents of this file, and the files included with this file, are 
  7.  * subject to the current version of the RealNetworks Public Source License 
  8.  * Version 1.0 (the "RPSL") available at 
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed 
  10.  * the file under the RealNetworks Community Source License Version 1.0 
  11.  * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, 
  12.  * in which case the RCSL will apply. You may also obtain the license terms 
  13.  * directly from RealNetworks.  You may not use this file except in 
  14.  * compliance with the RPSL or, if you have a valid RCSL with RealNetworks 
  15.  * applicable to this file, the RCSL.  Please see the applicable RPSL or 
  16.  * RCSL for the rights, obligations and limitations governing use of the 
  17.  * contents of the file.  
  18.  *  
  19.  * This file is part of the Helix DNA Technology. RealNetworks is the 
  20.  * developer of the Original Code and owns the copyrights in the portions 
  21.  * it created. 
  22.  *  
  23.  * This file, and the files included with this file, is distributed and made 
  24.  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  25.  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  26.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
  27.  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  28.  * 
  29.  * Technology Compatibility Kit Test Suite(s) Location: 
  30.  *    http://www.helixcommunity.org/content/tck 
  31.  * 
  32.  * Contributor(s): 
  33.  *  
  34.  * ***** END LICENSE BLOCK ***** */ 
  35. #ifndef _CHXxTYPE_H_
  36. #define _CHXxTYPE_H_
  37. #include "hxtypes.h" // Needed at least for various defines and types.
  38. #include "hxwintyp.h" // Needed at least for various defines and types.
  39. #include "hlxclib/windows.h"
  40. class CHXxSize;
  41. class CHXxPoint;
  42. class CHXxRect;
  43. /////////////////////////////////////////////////////////////////////////////
  44. // CHXxSize - An extent, similar to Windows SIZE structure.
  45. class HXEXPORT_CLASS CHXxSize : public _HXxSize
  46. {
  47. public:
  48. // Constructors
  49. CHXxSize();
  50. CHXxSize(INT32 initCX, INT32 initCY);
  51. CHXxSize(const CHXxPoint& initPt);
  52. CHXxSize(const HXxSize& size)
  53.     {
  54. cx = size.cx;
  55. cy = size.cy;
  56.     };
  57. void SetSize(INT32 cxIn, INT32 cyIn)
  58. {
  59. cx = cxIn;
  60. cy = cyIn;
  61. };
  62. void GetSize(INT32& cxIn, INT32& cyIn) const
  63. {
  64. cxIn = cx;
  65. cyIn = cy;
  66. };
  67. // Operations
  68. BOOL operator==(const CHXxSize& size) const;
  69. BOOL operator!=(const CHXxSize& size) const;
  70. void operator+=(const CHXxSize& size);
  71. void operator-=(const CHXxSize& size);
  72. // Operators returning CHXxSize values
  73. CHXxSize operator+(const CHXxSize& size) const;
  74. CHXxSize operator-(const CHXxSize& size) const;
  75. CHXxSize operator-(void) const;
  76. // Operators returning Windows native SIZE values
  77. #if defined _WINDOWS
  78.         operator SIZE (void);
  79.         operator SIZE (void) const;
  80. #endif
  81. };
  82. /////////////////////////////////////////////////////////////////////////////
  83. // CHXxPoint - A 2-D point, similar to Windows POINT structure.
  84. class HXEXPORT_CLASS CHXxPoint : public _HXxPoint
  85. {
  86. public:
  87. // Constructors
  88. CHXxPoint();
  89. CHXxPoint(INT32 initX, INT32 initY);
  90. CHXxPoint(const CHXxSize& initSize);
  91. CHXxPoint(const HXxPoint& point)
  92.     {
  93. x = point.x;
  94. y = point.y;
  95.     };
  96. void SetPoint(INT32 xIn, INT32 yIn)
  97. {
  98. x = xIn;
  99. y = yIn;
  100. };
  101. void GetPoint(INT32& xIn, INT32& yIn) const
  102. {
  103. xIn = x;
  104. yIn = y;
  105. };
  106. // Operations
  107. void Offset(INT32 xOffset, INT32 yOffset);
  108. void Offset(const CHXxPoint& point);
  109. void Offset(const CHXxSize& size);
  110. BOOL operator==(const CHXxPoint& point) const;
  111. BOOL operator!=(const CHXxPoint& point) const;
  112. void operator+=(const CHXxSize& size);
  113. void operator-=(const CHXxSize& size);
  114. // Operators returning CHXxPoint values
  115. CHXxPoint operator+(const CHXxSize& size) const;
  116. CHXxPoint operator-(const CHXxSize& size) const;
  117. CHXxPoint operator-(void) const;
  118. // Operators returning CHXxSize values
  119. CHXxSize operator-(const CHXxPoint& point) const;
  120. // Operators returning Windows native SIZE values
  121. #if defined _WINDOWS
  122.         operator POINT (void);
  123.         operator POINT (void) const;
  124. #endif
  125. };
  126. inline CHXxPoint::CHXxPoint(const CHXxSize& initSize)
  127. { SetPoint(initSize.cx,initSize.cy); }
  128. inline CHXxPoint::CHXxPoint(INT32 initX, INT32 initY)
  129. { SetPoint(initX,initY); }
  130. /////////////////////////////////////////////////////////////////////////////
  131. // CHXxRect - A 2-D rectangle, similar to Windows RECT structure.
  132. class HXEXPORT_CLASS CHXxRect : public _HXxRect
  133. {
  134. public:
  135. // Constructors
  136. CHXxRect();
  137. CHXxRect(INT32 l, INT32 t, INT32 r, INT32 b);
  138. CHXxRect(const CHXxPoint& point, const CHXxSize& size);
  139. CHXxRect(const HXxRect& rect)
  140.     {
  141. left   = rect.left;
  142. top    = rect.top;
  143. right  = rect.right;
  144. bottom = rect.bottom;
  145.     };
  146. // Attributes (in addition to RECT members)
  147. INT32 Width() const;
  148. INT32 Height() const;
  149. CHXxSize Size() const;
  150. CHXxPoint TopLeft() const;
  151. CHXxPoint BottomRight() const;
  152. // Additional Operations
  153. BOOL operator==(const CHXxRect& rect) const;
  154. BOOL operator!=(const CHXxRect& rect) const;
  155. void operator|=(const CHXxRect& rect); // Union.
  156. void operator&=(const CHXxRect& rect); // Intersection.
  157. void SetRect(INT32 l, INT32 t, INT32 r, INT32 b) 
  158. { left = l; top = t; right = r; bottom = b; }
  159. void Offset(INT32 dx, INT32 dy);
  160. void Offset(const CHXxPoint& point);
  161. void InflateRect(INT32 dx, INT32 dy);
  162. void SetRectEmpty() { SetRect(0,0,0,0); };
  163. BOOL IsRectEmpty() 
  164. {
  165. return ((right <= left) || (bottom <= top));
  166. };
  167. void GetRect(INT32& l, INT32& t, INT32& r, INT32& b) const
  168. {
  169. l = left;
  170. t = top;
  171. r = right;
  172. b = bottom;
  173. };
  174. void operator+=(const CHXxPoint& point);
  175. void operator-=(const CHXxPoint& point);
  176. BOOL PtInRect(const CHXxPoint& pt) const
  177. {
  178. return (
  179. (pt.x >= left)  && 
  180. (pt.x <= right) && 
  181. (pt.y >= top)   && 
  182. (pt.y <= bottom)
  183. );
  184. };
  185. BOOL IsOverlapped(CHXxRect& rect)
  186. {
  187. return ( ( rect.right > left ) &&
  188.  ( rect.left < right ) &&
  189.  ( rect.bottom > top ) &&
  190.  ( rect.top < bottom ) );
  191. };
  192. BOOL Contains(CHXxRect& rect)
  193. {
  194. return ( ( rect.left >= left ) &&
  195.  ( rect.right <= right ) &&
  196.  ( rect.top >= top ) &&
  197.  ( rect.bottom <= bottom ) );
  198. }
  199. // Operators returning CHXxRect values
  200. CHXxRect operator+(const CHXxPoint& point) const;
  201. CHXxRect operator-(const CHXxPoint& point) const;
  202. #ifdef _MACINTOSH
  203. operator Rect* (void) const;
  204. CHXxRect(const Rect& rect);
  205. #elif defined _WINDOWS
  206.         operator RECT (void);
  207.         operator RECT (void) const;
  208. #endif
  209. };
  210. // CHXxSize
  211. inline CHXxSize::CHXxSize()
  212. { /* random filled */ }
  213. inline CHXxSize::CHXxSize(INT32 initCX, INT32 initCY)
  214. { cx = initCX; cy = initCY; }
  215. inline CHXxSize::CHXxSize(const CHXxPoint& initPt)
  216. {
  217. cx = initPt.x;
  218. cy = initPt.y;
  219. }
  220. inline BOOL CHXxSize::operator==(const CHXxSize& size) const
  221. { return (cx == size.cx && cy == size.cy); }
  222. inline BOOL CHXxSize::operator!=(const CHXxSize& size) const
  223. { return (cx != size.cx || cy != size.cy); }
  224. inline void CHXxSize::operator+=(const CHXxSize& size)
  225. { cx += size.cx; cy += size.cy; }
  226. inline void CHXxSize::operator-=(const CHXxSize& size)
  227. { cx -= size.cx; cy -= size.cy; }
  228. inline CHXxSize CHXxSize::operator+(const CHXxSize& size) const
  229. { return CHXxSize(cx + size.cx, cy + size.cy); }
  230. inline CHXxSize CHXxSize::operator-(const CHXxSize& size) const
  231. { return CHXxSize(cx - size.cx, cy - size.cy); }
  232. inline CHXxSize CHXxSize::operator-(void) const
  233. { return CHXxSize(-cx, -cy); }
  234. #if defined _WINDOWS
  235. inline CHXxSize::operator SIZE () 
  236. {SIZE s; s.cx = (int)cx; s.cy = (int)cy; return s;}
  237. inline CHXxSize::operator SIZE () const
  238. {SIZE s; s.cx = (int)cx; s.cy = (int)cy; return s;}
  239. #endif
  240. // CHXxPoint
  241. inline CHXxPoint::CHXxPoint()
  242. { /* random filled */ }
  243. inline void CHXxPoint::Offset(INT32 xOffset, INT32 yOffset)
  244. { x += xOffset; y += yOffset; }
  245. inline void CHXxPoint::Offset(const CHXxPoint& point)
  246. { x += point.x; y += point.y; }
  247. inline void CHXxPoint::Offset(const CHXxSize& size)
  248. { x += size.cx; y += size.cy; }
  249. inline BOOL CHXxPoint::operator==(const CHXxPoint& point) const
  250. { return (x == point.x && y == point.y); }
  251. inline BOOL CHXxPoint::operator!=(const CHXxPoint& point) const
  252. { return (x != point.x || y != point.y); }
  253. inline void CHXxPoint::operator+=(const CHXxSize& size)
  254. { x += size.cx; y += size.cy; }
  255. inline void CHXxPoint::operator-=(const CHXxSize& size)
  256. { x -= size.cx; y -= size.cy; }
  257. inline CHXxPoint CHXxPoint::operator+(const CHXxSize& size) const
  258. { return CHXxPoint(x + size.cx, y + size.cy); }
  259. inline CHXxPoint CHXxPoint::operator-(const CHXxSize& size) const
  260. { return CHXxPoint(x - size.cx, y - size.cy); }
  261. inline CHXxPoint CHXxPoint::operator-(void) const
  262. { return CHXxPoint(-x, -y); }
  263. inline CHXxSize CHXxPoint::operator-(const CHXxPoint& point) const
  264. { return CHXxSize(x - point.x, y - point.y); }
  265. #if defined _WINDOWS
  266. inline CHXxPoint::operator POINT () 
  267. {POINT p; p.x = (int)x; p.y = (int)y; return p;}
  268. inline CHXxPoint::operator POINT () const
  269. {POINT p; p.x = (int)x; p.y = (int)y; return p;}
  270. #endif
  271. // CHXxRect
  272. inline CHXxRect::CHXxRect()
  273. { /* random filled */ }
  274. inline CHXxRect::CHXxRect(INT32 l, INT32 t, INT32 r, INT32 b)
  275. { SetRect(l,t,r,b); }
  276. //cz - moved above
  277. //inline void CHXxRect::SetRect(INT32 l, INT32 t, INT32 r, INT32 b)
  278. // { left = l; top = t; right = r; bottom = b; }
  279. inline CHXxRect::CHXxRect(const CHXxPoint& point, const CHXxSize& size)
  280. { right = (left = point.x) + size.cx; bottom = (top = point.y) + size.cy; }
  281. inline INT32 CHXxRect::Width() const
  282. { return right - left; }
  283. inline INT32 CHXxRect::Height() const
  284. { return bottom - top; }
  285. inline CHXxSize CHXxRect::Size() const
  286. { return CHXxSize(right - left, bottom - top); }
  287. inline CHXxPoint CHXxRect::TopLeft() const
  288. { return(CHXxPoint(left, top)); }
  289. inline CHXxPoint CHXxRect::BottomRight() const
  290. { return(CHXxPoint(right, bottom)); }
  291. inline BOOL CHXxRect::operator==(const CHXxRect& rect) const
  292. return (
  293. left   == rect.left   &&
  294.      top    == rect.top    &&
  295.      right  == rect.right  &&
  296.      bottom == rect.bottom
  297. );
  298. }
  299. inline BOOL CHXxRect::operator!=(const CHXxRect& rect) const
  300. { return !(*this == rect); }
  301. inline void CHXxRect::operator|=(const CHXxRect& rect)
  302. {
  303. left = min( left, rect.left );
  304. top = min( top, rect.top );
  305. right = max( right, rect.right );
  306. bottom = max( bottom, rect.bottom );
  307. }
  308. inline void CHXxRect::operator&=(const CHXxRect& rect)
  309. {
  310. left = max( left, rect.left );
  311. top = max( top, rect.top );
  312. right = max( min( right, rect.right ), left );
  313. bottom = max( min( bottom, rect.bottom ), top );
  314. }
  315. inline void CHXxRect::Offset(INT32 dx, INT32 dy)
  316. {
  317. left += dx;
  318.      top += dy;
  319.      right += dx;
  320.      bottom += dy;
  321. }
  322. inline void CHXxRect::Offset(const CHXxPoint& point)
  323. {
  324. left += point.x;
  325.      top += point.y;
  326.      right += point.x;
  327.      bottom += point.y;
  328. }
  329. inline void CHXxRect::InflateRect(INT32 dx, INT32 dy)
  330. {
  331. left -= dx;
  332.      top -= dy;
  333.      right += dx;
  334.      bottom += dy;
  335. }
  336. inline void CHXxRect::operator+=(const CHXxPoint& point)
  337. { Offset(point.x, point.y); }
  338. inline void CHXxRect::operator-=(const CHXxPoint& point)
  339. { Offset(-point.x, -point.y); }
  340. inline CHXxRect CHXxRect::operator+(const CHXxPoint& pt) const
  341. { CHXxRect rect(*this); rect.Offset(pt.x, pt.y); return rect; }
  342. inline CHXxRect CHXxRect::operator-(const CHXxPoint& pt) const
  343. { CHXxRect rect(*this); rect.Offset(-pt.x, -pt.y); return rect; }
  344. #ifdef _MACINTOSH
  345. inline CHXxRect::operator Rect* (void) const
  346. { Rect rect; ::SetRect(&rect, left, top, right, bottom); return (Rect*)&rect; } // (?) Dangerous. Passing pointer to a local variable.
  347. inline CHXxRect::CHXxRect(const Rect& rect)
  348. {
  349. left = rect.left;
  350. top = rect.top;
  351. right = rect.right;
  352. bottom = rect.bottom;
  353. }
  354. #elif defined _WINDOWS
  355. inline CHXxRect::operator RECT () 
  356. {RECT xxrc; xxrc.left=(int)left, xxrc.top=(int)top, xxrc.right=(int)right, xxrc.bottom=(int)bottom; return xxrc;}
  357. inline CHXxRect::operator RECT () const
  358. {RECT xxrc; xxrc.left=(int)left, xxrc.top=(int)top, xxrc.right=(int)right, xxrc.bottom=(int)bottom; return xxrc;}
  359. #endif
  360. #endif // _CHXxTYPE_H_