24 #ifndef __WSystemUtils__ 25 #define __WSystemUtils__ 31 inline bool _CheckResultFunc(
const char* caller, intptr_t result, intptr_t okResult,
const char* codeString,
const char* fileStr, int32 lineNo)
33 ASSERT_MSG(result == okResult, FORMAT_ARGS(
"%s: %s returned error: %p, called from file: %s at line %d \n", caller, codeString, result, fileStr, lineNo));
34 return result == okResult;
37 #define WIN_CHECKERROR(err, routinename) ASSERT_MSG(err == ERROR_SUCCESS, FORMAT_ARGS("%s returned error: %d\n", #routinename, err)) 39 #define WIN_CHECKRESULT(code) SetLastError(ERROR_SUCCESS); code; _CheckResultFunc("WIN_CHECKRESULT", (int32) GetLastError(), (int32) ERROR_SUCCESS, #code,__FILE__,__LINE__) 41 #define SysPointH( point ) (point).x 42 #define SysPointV( point ) (point).y 44 inline void SetSysPoint(
SysPoint& pt, SysCoord x, SysCoord y)
49 inline SysCoord SysRectLeft(
const SysRect& sysRect)
50 {
return sysRect.left; }
51 inline SysCoord SysRectTop(
const SysRect& sysRect)
52 {
return sysRect.top; }
53 inline SysCoord SysRectRight(
const SysRect& sysRect)
54 {
return sysRect.right; }
55 inline SysCoord SysRectBottom(
const SysRect& sysRect)
56 {
return sysRect.bottom; }
57 inline SysCoord SysRectWidth(
const SysRect& sysRect)
58 {
return sysRect.right - sysRect.left; }
59 inline SysCoord SysRectHeight(
const SysRect& sysRect )
60 {
return sysRect.bottom - sysRect.top; }
61 inline SysCoord SysRectCenterH(
const SysRect& sysRect)
62 {
return (sysRect.right + sysRect.left)/2; }
63 inline SysCoord SysRectCenterV(
const SysRect& sysRect )
64 {
return (sysRect.bottom + sysRect.top)/2; }
66 inline void SetSysRectLeft(
SysRect& sysRect, SysCoord left)
67 { sysRect.left = left; }
68 inline void SetSysRectTop(
SysRect& sysRect, SysCoord top)
69 { sysRect.top = top; }
70 inline void SetSysRectRight(
SysRect& sysRect, SysCoord right)
71 { sysRect.right = right; }
72 inline void SetSysRectBottom(
SysRect& sysRect, SysCoord bottom)
73 { sysRect.bottom = bottom; }
74 void SetSysRectWidth(
SysRect& sysRect, SysCoord width);
75 void SetSysRectHeight(
SysRect& sysRect, SysCoord height);
76 inline void SetSysRect(
SysRect& rt, SysCoord left, SysCoord top, SysCoord right, SysCoord bottom)
77 { WTOOLBOX::SetRect(&rt, left, top, right, bottom); }
78 void SetSysRectLTRB(
SysRect& rect, SysCoord left, SysCoord top, SysCoord right, SysCoord bottom);
79 void SetSysRectLTWH(
SysRect& rect, SysCoord left, SysCoord top, SysCoord width, SysCoord height);
81 inline SysRect SysRgnBBOX( HRGN rgn )
88 inline SysRect GetRegionRect( HRGN rgn )
89 { return ::SysRgnBBOX( rgn ); }
91 void GetRegionRectData( SysRgn rgn, std::vector<SysRect>& rectsVec );
94 { return ::PtInRect( &r, p ); }
96 inline bool16 EmptySysRect(
const SysRect& r )
97 {
return IsRectEmpty( &r ); }
100 {
return (bool16)::IntersectRect( &dst, &src1, &src2 ); }
103 { ::UnionRect( &dst, &src1, &src2 ); }
105 inline void InsetSysRect(
SysRect& rt, int32 deltaX, int32 deltaY)
106 { ::InflateRect( &rt, -deltaX, -deltaY ); }
108 inline void OffsetSysRect(
SysRect& rt, int32 deltaX, int32 deltaY)
109 { ::OffsetRect( &rt, deltaX, deltaY ); }
111 inline void SysRectMakeZeroOrigin(
SysRect& rt)
112 { ::OffsetRect( &rt, -rt.left, -rt.top ); }
120 ::GetCursorPos( &pt );
124 namespace SystemUtils
127 inline uint32 TickCount()
129 return (uint32)((double) ::GetTickCount() / 16.6667);
132 inline uint64 Milliseconds()
134 return static_cast<uint64
>(::GetTickCount64());
137 inline uint32 GetCaretTime()
138 {
return (uint32)((double) ::GetCaretBlinkTime() / 16.6667); }
140 inline SysRgn CreateRectSysRgn (
SysRect sysRect)
141 { return ::CreateRectRgn (sysRect.left, sysRect.top, sysRect.right, sysRect.bottom); }
143 inline SysRgn CreateSysRgn()
144 { return ::CreateRectRgn(0, 0, 0, 0); }
146 inline void K2DeleteObject(HGDIOBJ gdiObject)
147 {
if (gdiObject != 0) {
if (::DeleteObject (gdiObject) == 0) {ASSERT_FAIL (FORMAT_ARGS(
"The GDI object was not deleted. Error code: %d", ::GetLastError ()));} } }
149 inline void DeleteSysRgn(SysRgn sysRgn)
150 { K2DeleteObject (sysRgn); }
152 inline SysRgn CopySysRgn(SysRgn sysRgn)
154 SysRgn copy = ::CreateRectRgn(0, 0, 0, 0);;
155 ::CombineRgn(copy, sysRgn, 0L, RGN_COPY);
159 inline void CopySysRgn(SysRgn srcRgn, SysRgn dstRgn)
161 ::CombineRgn(dstRgn, srcRgn, 0L, RGN_COPY);
164 inline bool16 RectInSysRgn(SysRgn rgn,
const SysRect *theRect)
165 { return ::RectInRegion(rgn, theRect); }
167 inline bool16 EqualSysRgn(SysRgn rgn1, SysRgn rgn2)
168 { return ::EqualRgn(rgn1, rgn2); }
170 inline void UnionSysRgn(SysRgn srcRgn1, SysRgn srcRgn2, SysRgn destRgn)
171 { ::CombineRgn(destRgn, srcRgn1, srcRgn2, RGN_OR); }
173 inline void DiffSysRgn(SysRgn srcRgn, SysRgn removeRgn, SysRgn destRgn)
174 { ::CombineRgn(destRgn, srcRgn, removeRgn, RGN_DIFF); }
176 inline void IntersectSysRgn(SysRgn srcRgn1, SysRgn srcRgn2, SysRgn destRgn)
177 { ::CombineRgn (destRgn, srcRgn1, srcRgn2, RGN_AND); }
179 inline bool16 EmptySysRgn(SysRgn theRgn)
182 ::GetRgnBox(theRgn, &r);
184 return ((r.left == r.right) || (r.top == r.bottom));
187 inline void XorSysRgn(SysRgn srcRgn1, SysRgn srcRgn2, SysRgn destRgn)
188 { ::CombineRgn (destRgn, srcRgn1, srcRgn2, RGN_XOR); }
190 inline void OffsetSysRgn(SysRgn rgn, int32 deltaX, int32 deltaY)
191 { ::OffsetRgn (rgn, deltaX, deltaY); }
193 inline bool16 SysPointInSysRgn(
const SysPoint& p, SysRgn rgn )
194 { return ::PtInRegion(rgn, p.x, p.y); }
196 inline void EraseSysRect(SysPort port,
const SysRect *theRect)
198 HBRUSH hBrush = ::GetSysColorBrush (COLOR_3DFACE);
199 ::FillRect (port, theRect, hBrush);
200 K2DeleteObject (hBrush);
202 inline void EraseSysRgn(SysPort port,
const SysRgn theRgn)
204 HBRUSH hBrush = ::GetSysColorBrush (COLOR_3DFACE);
205 ::FillRgn (port, theRgn, hBrush);
206 K2DeleteObject (hBrush);
211 inline SysWireframe CreateSysWireframe()
212 { return ::CreateSysRgn(); }
214 inline SysWireframe CreateRectSysWireframe (
SysRect sysRect)
215 { return ::CreateRectSysRgn(sysRect);}
217 inline void DeleteSysWireframe(SysWireframe sysRgn)
218 { ::DeleteSysRgn (sysRgn); }
220 inline SysWireframe CopySysWireframe(SysWireframe sysRgn)
221 { return ::CopySysRgn(sysRgn); }
223 inline void CopySysWireframe(SysWireframe srcRgn, SysWireframe dstRgn)
224 { ::CopySysRgn(srcRgn, dstRgn); }
226 inline void OffsetSysWireframe(SysWireframe rgn, int32 deltaX, int32 deltaY)
227 { ::OffsetSysRgn (rgn, deltaX, deltaY); }
229 inline void UnionSysWireframe(SysWireframe srcRgn1, SysWireframe srcRgn2, SysWireframe destRgn)
230 { ::UnionSysRgn(srcRgn1, srcRgn2, destRgn); }
232 inline void DiffSysWireframe(SysWireframe srcRgn, SysWireframe removeRgn, SysWireframe destRgn)
233 { ::DiffSysRgn(srcRgn, removeRgn, destRgn); }
235 inline void IntersectSysWireframe(SysWireframe srcRgn1, SysWireframe srcRgn2, SysWireframe destRgn)
236 { ::IntersectSysRgn (srcRgn1, srcRgn2, destRgn); }
238 inline void XorSysWireframe(SysWireframe srcRgn1, SysWireframe srcRgn2, SysWireframe destRgn)
239 { ::XorSysRgn (srcRgn1, srcRgn2, destRgn); }
241 #endif // __WSystemUtils__