InDesign SDK  20.5
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
WSystemUtils.h
1 //========================================================================================
2 //
3 // $File$
4 //
5 // Owner: ?
6 //
7 // $Author$
8 //
9 // $DateTime$
10 //
11 // $Revision$
12 //
13 // $Change$
14 //
15 // Copyright 1997-2010 Adobe Systems Incorporated. All rights reserved.
16 //
17 // NOTICE: Adobe permits you to use, modify, and distribute this file in accordance
18 // with the terms of the Adobe license agreement accompanying it. If you have received
19 // this file from a source other than Adobe, then your use, modification, or
20 // distribution of it requires the prior written permission of Adobe.
21 //
22 //========================================================================================
23 
24 #ifndef __WSystemUtils__
25 #define __WSystemUtils__
26 
27 #include "WSysType.h"
28 
29 #define WTOOLBOX
30 
31 inline bool _CheckResultFunc(const char* caller, intptr_t result, intptr_t okResult, const char* codeString, const char* fileStr, int32 lineNo)
32 {
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;
35 }
36 
37 #define WIN_CHECKERROR(err, routinename) ASSERT_MSG(err == ERROR_SUCCESS, FORMAT_ARGS("%s returned error: %d\n", #routinename, err))
38 //#define WIN_CHECKRESULT(code) {code; DWORD err = GetLastError(); ASSERT_MSG(err == ERROR_SUCCESS, FORMAT_ARGS("%s returned error: %d\n", #code, err));}
39 #define WIN_CHECKRESULT(code) SetLastError(ERROR_SUCCESS); code; _CheckResultFunc("WIN_CHECKRESULT", (int32) GetLastError(), (int32) ERROR_SUCCESS, #code,__FILE__,__LINE__)
40 
41 #define SysPointH( point ) (point).x
42 #define SysPointV( point ) (point).y
43 
44  inline void SetSysPoint(SysPoint& pt, SysCoord x, SysCoord y)
45  {
46  pt.x = x; pt.y = y;
47  }
48 
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; }
65 
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);
80 
81 inline SysRect SysRgnBBOX( HRGN rgn )
82 {
83  RECT r;
84  GetRgnBox(rgn, &r);
85  return r;
86 }
87 
88 inline SysRect GetRegionRect( HRGN rgn )
89  { return ::SysRgnBBOX( rgn ); }
90 
91  void GetRegionRectData( SysRgn rgn, std::vector<SysRect>& rectsVec );
92 
93 inline bool16 SysPointInSysRect( const SysPoint& p, const SysRect& r )
94  { return ::PtInRect( &r, p ); }
95 
96 inline bool16 EmptySysRect( const SysRect& r )
97  { return IsRectEmpty( &r ); }
98 
99 inline bool16 IntersectSysRect(const SysRect& src1, const SysRect& src2, SysRect& dst)
100  { return (bool16)::IntersectRect( &dst, &src1, &src2 ); }
101 
102 inline void UnionSysRect(const SysRect& src1, const SysRect& src2, SysRect& dst)
103  { ::UnionRect( &dst, &src1, &src2 ); }
104 
105 inline void InsetSysRect(SysRect& rt, int32 deltaX, int32 deltaY)
106  { ::InflateRect( &rt, -deltaX, -deltaY ); }
107 
108 inline void OffsetSysRect(SysRect& rt, int32 deltaX, int32 deltaY)
109  { ::OffsetRect( &rt, deltaX, deltaY ); }
110 
111  inline void SysRectMakeZeroOrigin(SysRect& rt)
112  { ::OffsetRect( &rt, -rt.left, -rt.top ); }
113 
114 
115 inline SysPoint GetMousePosition()
116 {
117  // ----- Returns mouse position in screen/global coordinates
118 
119  SysPoint pt;
120  ::GetCursorPos( &pt );
121  return pt;
122 }
123 
124 namespace SystemUtils
125 {
126  // ----- Returns a value in 60ths of a second.
127  inline uint32 TickCount()
128  {
129  return (uint32)((double) ::GetTickCount() / 16.6667);
130  }
131 
132  inline uint64 Milliseconds()
133  {
134  return static_cast<uint64>(::GetTickCount64());
135  }
136 }
137 inline uint32 GetCaretTime()
138  { return (uint32)((double) ::GetCaretBlinkTime() / 16.6667); }
139 
140 inline SysRgn CreateRectSysRgn (SysRect sysRect)
141  { return ::CreateRectRgn (sysRect.left, sysRect.top, sysRect.right, sysRect.bottom); }
142 
143 inline SysRgn CreateSysRgn()
144  { return ::CreateRectRgn(0, 0, 0, 0); }
145 
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 ()));} } }
148 
149 inline void DeleteSysRgn(SysRgn sysRgn)
150  { K2DeleteObject (sysRgn); }
151 
152 inline SysRgn CopySysRgn(SysRgn sysRgn)
153  {
154  SysRgn copy = ::CreateRectRgn(0, 0, 0, 0);;
155  ::CombineRgn(copy, sysRgn, 0L, RGN_COPY);
156  return copy;
157  }
158 
159 inline void CopySysRgn(SysRgn srcRgn, SysRgn dstRgn)
160  {
161  ::CombineRgn(dstRgn, srcRgn, 0L, RGN_COPY);
162  }
163 
164 inline bool16 RectInSysRgn(SysRgn rgn, const SysRect *theRect)
165 { return ::RectInRegion(rgn, theRect); }
166 
167 inline bool16 EqualSysRgn(SysRgn rgn1, SysRgn rgn2)
168  { return ::EqualRgn(rgn1, rgn2); }
169 
170 inline void UnionSysRgn(SysRgn srcRgn1, SysRgn srcRgn2, SysRgn destRgn)
171  { ::CombineRgn(destRgn, srcRgn1, srcRgn2, RGN_OR); }
172 
173 inline void DiffSysRgn(SysRgn srcRgn, SysRgn removeRgn, SysRgn destRgn)
174  { ::CombineRgn(destRgn, srcRgn, removeRgn, RGN_DIFF); }
175 
176 inline void IntersectSysRgn(SysRgn srcRgn1, SysRgn srcRgn2, SysRgn destRgn)
177  { ::CombineRgn (destRgn, srcRgn1, srcRgn2, RGN_AND); }
178 
179 inline bool16 EmptySysRgn(SysRgn theRgn)
180 {
181  RECT r;
182  ::GetRgnBox(theRgn, &r);
183 
184  return ((r.left == r.right) || (r.top == r.bottom));
185 }
186 
187 inline void XorSysRgn(SysRgn srcRgn1, SysRgn srcRgn2, SysRgn destRgn)
188  { ::CombineRgn (destRgn, srcRgn1, srcRgn2, RGN_XOR); }
189 
190 inline void OffsetSysRgn(SysRgn rgn, int32 deltaX, int32 deltaY)
191  { ::OffsetRgn (rgn, deltaX, deltaY); }
192 
193 inline bool16 SysPointInSysRgn( const SysPoint& p, SysRgn rgn )
194  { return ::PtInRegion(rgn, p.x, p.y); }
195 
196 inline void EraseSysRect(SysPort port, const SysRect *theRect)
197 {
198  HBRUSH hBrush = ::GetSysColorBrush (COLOR_3DFACE);
199  ::FillRect (port, theRect, hBrush);
200  K2DeleteObject (hBrush);
201 }
202 inline void EraseSysRgn(SysPort port, const SysRgn theRgn)
203 {
204  HBRUSH hBrush = ::GetSysColorBrush (COLOR_3DFACE);
205  ::FillRgn (port, theRgn, hBrush);
206  K2DeleteObject (hBrush);
207 }
208 
209 //=== SysWireframe ========================
210 
211  inline SysWireframe CreateSysWireframe()
212  { return ::CreateSysRgn(); }
213 
214  inline SysWireframe CreateRectSysWireframe (SysRect sysRect)
215  { return ::CreateRectSysRgn(sysRect);}
216 
217  inline void DeleteSysWireframe(SysWireframe sysRgn)
218  { ::DeleteSysRgn (sysRgn); }
219 
220  inline SysWireframe CopySysWireframe(SysWireframe sysRgn)
221  { return ::CopySysRgn(sysRgn); }
222 
223  inline void CopySysWireframe(SysWireframe srcRgn, SysWireframe dstRgn)
224  { ::CopySysRgn(srcRgn, dstRgn); }
225 
226  inline void OffsetSysWireframe(SysWireframe rgn, int32 deltaX, int32 deltaY)
227  { ::OffsetSysRgn (rgn, deltaX, deltaY); }
228 
229  inline void UnionSysWireframe(SysWireframe srcRgn1, SysWireframe srcRgn2, SysWireframe destRgn)
230  { ::UnionSysRgn(srcRgn1, srcRgn2, destRgn); }
231 
232  inline void DiffSysWireframe(SysWireframe srcRgn, SysWireframe removeRgn, SysWireframe destRgn)
233  { ::DiffSysRgn(srcRgn, removeRgn, destRgn); }
234 
235  inline void IntersectSysWireframe(SysWireframe srcRgn1, SysWireframe srcRgn2, SysWireframe destRgn)
236  { ::IntersectSysRgn (srcRgn1, srcRgn2, destRgn); }
237 
238  inline void XorSysWireframe(SysWireframe srcRgn1, SysWireframe srcRgn2, SysWireframe destRgn)
239  { ::XorSysRgn (srcRgn1, srcRgn2, destRgn); }
240 
241 #endif // __WSystemUtils__