24 #ifndef __MSystemUtils__ 25 #define __MSystemUtils__ 29 #include "WorkspaceID.h" 36 inline bool _CheckResultFunc(
const char* caller, intptr_t result, intptr_t okResult,
const char* codeString,
const char* fileStr, int32 lineNo)
38 ASSERT_MSG(result == okResult, FORMAT_ARGS(
"%s: %s returned error: %p, called from file: %s at line %d \n", caller, codeString, result, fileStr, lineNo));
39 return result == okResult;
42 #define MAC_CHECKERROR(err, routinename) ASSERT_MSG(err == noErr, FORMAT_ARGS("%s returned error: %d\n", #routinename, err)) 44 #define MAC_CHECKRESULT(code) _CheckResultFunc("MAC_CHECKRESULT", (int32) code, (int32) noErr, #code,__FILE__,__LINE__) 48 #define SysPointH( point ) (point).x 49 #define SysPointV( point ) (point).y 51 inline SysCoord SysRectLeft(
const SysRect& sysRect)
52 {
return sysRect.origin.x; }
53 inline SysCoord SysRectTop(
const SysRect& sysRect)
54 {
return sysRect.origin.y; }
55 inline SysCoord SysRectRight(
const SysRect& sysRect)
56 {
return (sysRect.origin.x + sysRect.size.width); }
57 inline SysCoord SysRectBottom(
const SysRect& sysRect)
58 {
return (sysRect.origin.y + sysRect.size.height); }
59 inline SysCoord SysRectWidth(
const SysRect& sysRect)
60 {
return sysRect.size.width; }
61 inline SysCoord SysRectHeight(
const SysRect& sysRect )
62 {
return sysRect.size.height; }
63 inline SysCoord SysRectCenterH(
const SysRect& sysRect)
64 {
return int32(sysRect.origin.x + sysRect.size.width/2.); }
65 inline SysCoord SysRectCenterV(
const SysRect& sysRect )
66 {
return int32(sysRect.origin.y + sysRect.size.height/2.); }
73 void SetSysRectLeft(
SysRect& sysRect, SysCoord left);
74 void SetSysRectTop(
SysRect& sysRect, SysCoord top);
75 void SetSysRectRight(
SysRect& sysRect, SysCoord right);
76 void SetSysRectBottom(
SysRect& sysRect, SysCoord bottom);
77 void SetSysRectWidth(
SysRect& sysRect, SysCoord width);
78 void SetSysRectHeight(
SysRect& sysRect, SysCoord height);
79 void SetSysRect(
SysRect& rect, SysCoord left, SysCoord top, SysCoord right, SysCoord bottom);
80 void SetSysRectLTRB(
SysRect& rect, SysCoord left, SysCoord top, SysCoord right, SysCoord bottom);
81 void SetSysRectLTWH(
SysRect& rect, SysCoord left, SysCoord top, SysCoord width, SysCoord height);
85 inline void SetSysPoint(
SysPoint& pt, SysCoord x, SysCoord y)
91 #define SysRgnBBOX( rgn ) GetRegionRect(rgn) 92 inline SysRect GetRegionRect( ConstSysRgn rgn )
95 MTOOLBOX::HIShapeGetBounds(rgn,&aRect);
101 void GetRegionRectData( ConstSysRgn rgn, std::vector<SysRect>& rectsVec );
106 {
return (MTOOLBOX::CGRectContainsPoint( r, p ) ==
true); }
108 inline bool16 EmptySysRect(
const SysRect& r )
109 {
return (MTOOLBOX::CGRectIsEmpty( r ) ==
true); }
113 dst = MTOOLBOX::CGRectIntersection(src1, src2);
114 if(MTOOLBOX::CGRectIsNull(dst))
115 dst = MTOOLBOX::CGRectMake(0,0,0,0);
117 return (MTOOLBOX::CGRectIsEmpty(dst) !=
true);
121 { dst = MTOOLBOX::CGRectUnion(src1, src2); }
123 inline void InsetSysRect(
SysRect& rt, SysCoord deltaX, SysCoord deltaY)
124 { rt = MTOOLBOX::CGRectInset(rt, deltaX, deltaY); }
126 inline void OffsetSysRect(
SysRect& rt, SysCoord deltaX, SysCoord deltaY)
127 { rt = MTOOLBOX::CGRectOffset(rt, deltaX, deltaY); }
129 inline void SysRectMakeZeroOrigin(
SysRect& rt)
130 { rt = MTOOLBOX::CGRectOffset(rt, -rt.origin.x, -rt.origin.y); }
135 inline SysRgn CreateSysRgn()
136 {
return MTOOLBOX::HIShapeCreateMutable(); }
138 inline void DeleteSysRgn(ConstSysRgn sysRgn)
139 { MTOOLBOX::CFRelease (sysRgn); }
141 inline SysRgn CopySysRgn(ConstSysRgn sysRgn)
142 {
return MTOOLBOX::HIShapeCreateMutableCopy(sysRgn); }
144 inline void CopySysRgn(ConstSysRgn srcRgn, SysRgn dstRgn)
146 #if defined(ID_ENABLE_DEBUGGING) 149 MTOOLBOX::HIShapeSetWithShape(dstRgn, srcRgn);;
150 ASSERT_MSG(err == noErr,
"HIShapeSetWithShape failed!");
153 inline SysRgn CreateRectSysRgn (
const SysRect& sysRect)
154 {
return MTOOLBOX::HIShapeCreateMutableWithRect(&sysRect); }
156 inline bool16 SysPointInSysRgn(
const SysPoint& p, ConstSysRgn rgn)
159 return MTOOLBOX::HIShapeContainsPoint(rgn, &p);
164 inline bool16 SysRectIntersectsSysRgn(ConstSysRgn rgn,
const SysRect *rect)
168 return MTOOLBOX::HIShapeIntersectsRect(rgn, rect);
174 #define RectInSysRgn(rgn, rect) SysRectIntersectsSysRgn(rgn, rect) 176 inline bool16 EqualSysRgn(ConstSysRgn rgn1, ConstSysRgn rgn2)
178 if (MTOOLBOX::HIShapeIsEmpty(rgn1))
180 if (MTOOLBOX::HIShapeIsEmpty(rgn2))
185 else if (MTOOLBOX::HIShapeIsEmpty(rgn2))
191 HIShapeRef diffShape = MTOOLBOX::HIShapeCreateDifference(rgn1, rgn2);
192 bool16 result = MTOOLBOX::HIShapeIsEmpty(diffShape);
193 MTOOLBOX::CFRelease(diffShape);
197 inline void UnionSysRgn(ConstSysRgn srcRgn1, ConstSysRgn srcRgn2, SysRgn destRgn)
199 #if defined(ID_ENABLE_DEBUGGING) 202 MTOOLBOX::HIShapeUnion(srcRgn1, srcRgn2, destRgn);
203 ASSERT_MSG(err == noErr,
"HIShapeUnion failed!");
206 inline void DiffSysRgn(ConstSysRgn srcRgn, ConstSysRgn removeRgn, SysRgn destRgn)
208 #if defined(ID_ENABLE_DEBUGGING) 211 MTOOLBOX::HIShapeDifference(srcRgn, removeRgn, destRgn);
212 ASSERT_MSG(err == noErr,
"HIShapeDifference failed!");
215 inline void IntersectSysRgn(ConstSysRgn srcRgn1, ConstSysRgn srcRgn2, SysRgn destRgn)
217 #if defined(ID_ENABLE_DEBUGGING) 220 MTOOLBOX::HIShapeIntersect (srcRgn1, srcRgn2, destRgn);
221 ASSERT_MSG(err == noErr,
"HIShapeIntersect failed!");
224 inline bool16 EmptySysRgn(ConstSysRgn theRgn)
225 {
return (MTOOLBOX::HIShapeIsEmpty(theRgn) ==
true); }
227 inline void XorSysRgn(ConstSysRgn srcRgn1, ConstSysRgn srcRgn2, SysRgn destRgn)
229 #if defined(ID_ENABLE_DEBUGGING) 232 MTOOLBOX::HIShapeXor(srcRgn1, srcRgn2, destRgn);
233 ASSERT_MSG(err == noErr,
"HIShapeXor failed!");
236 inline void OffsetSysRgn(SysRgn rgn, SysCoord deltaX, SysCoord deltaY)
238 #if defined(ID_ENABLE_DEBUGGING) 241 MTOOLBOX::HIShapeOffset (rgn, deltaX, deltaY);
242 ASSERT_MSG(err == noErr,
"HIShapeOffset failed!");
245 inline void InsetSysRgn(SysRgn rgn, SysCoord deltaX, SysCoord deltaY)
247 #if defined(ID_ENABLE_DEBUGGING) 250 MTOOLBOX::HIShapeInset (rgn, deltaX, deltaY);
251 ASSERT_MSG(err == noErr,
"HIShapeInset failed!");
255 inline SysRect GetRegionRect( SysWireframe rgn )
256 { return ::GetRegionRect((ConstSysRgn) rgn); }
257 inline SysWireframe CreateSysWireframe()
258 { return ::CreateSysRgn(); }
260 inline SysWireframe CreateRectSysWireframe (
SysRect sysRect)
261 { return ::CreateRectSysRgn(sysRect); }
263 inline void DeleteSysWireframe(SysWireframe sysRgn)
264 { ::DeleteSysRgn(sysRgn); }
266 inline SysWireframe CopySysWireframe(SysWireframe sysRgn)
267 { return ::CopySysRgn(sysRgn); }
269 inline void CopySysWireframe(SysWireframe srcRgn, SysWireframe dstRgn)
270 { ::CopySysRgn(srcRgn, dstRgn); }
272 inline void OffsetSysWireframe(SysWireframe rgn, int32 deltaX, int32 deltaY)
273 { ::OffsetSysRgn(rgn, deltaX, deltaY); }
275 inline void InsetSysWireframe(SysWireframe rgn, int32 deltaX, int32 deltaY)
276 { ::InsetSysRgn(rgn, deltaX, deltaY); }
278 inline void UnionSysWireframe(SysWireframe srcRgn1, SysWireframe srcRgn2, SysWireframe destRgn)
279 { ::UnionSysRgn(srcRgn1, srcRgn2, destRgn); }
281 inline void DiffSysWireframe(SysWireframe srcRgn, SysWireframe removeRgn, SysWireframe destRgn)
282 { ::DiffSysRgn(srcRgn, removeRgn, destRgn); }
284 inline void IntersectSysWireframe(SysWireframe srcRgn1, SysWireframe srcRgn2, SysWireframe destRgn)
285 { ::IntersectSysRgn(srcRgn1, srcRgn2, destRgn); }
287 inline void XorSysWireframe(SysWireframe srcRgn1, SysWireframe srcRgn2, SysWireframe destRgn)
288 { ::XorSysRgn(srcRgn1, srcRgn2, destRgn); }
298 result.origin.x = rt1.origin.x - rt2.origin.x;
299 result.origin.y = rt1.origin.y - rt2.origin.y;
300 result.size.width = rt1.size.width - rt2.size.width;
301 result.size.height = rt1.size.height - rt2.size.height;
310 result.origin.x = rt1.origin.x + rt2.origin.x;
311 result.origin.y = rt1.origin.y + rt2.origin.y;
312 result.size.width = rt1.size.width + rt2.size.width;
313 result.size.height = rt1.size.height + rt2.size.height;
325 Boolean IsFrontProcess(
void);
328 inline uint32 GetCaretTime()
335 namespace SystemUtils
338 uint64 Milliseconds();
339 uint64 Microseconds();