chxxtype.h
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:13k
源码类别:

Symbian

开发平台:

Visual C++

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