Tabs to spaces, more consistent formatting.
[AROS.git] / workbench / libs / muimaster / macros.h
blobf171dc74aea145c24c18a09c773df1d034701e7b
1 #ifndef _MUI_MACROS_H
2 #define _MUI_MACROS_H
4 /*
5 Copyright © 2002-2007, The AROS Development Team. All rights reserved.
6 $Id$
8 Macros available in original MUI and also some additional ones.
9 */
11 /* Some nice macrodefinitions for creating your object tree */
12 #define MenustripObject MUIOBJMACRO_START(MUIC_Menustrip)
13 #define MenuObject MUIOBJMACRO_START(MUIC_Menu)
14 #define MenuObjectT(name) MUIOBJMACRO_START(MUIC_Menu), MUIA_Menu_Title, name
15 #define MenuitemObject MUIOBJMACRO_START(MUIC_Menuitem)
16 #define WindowObject MUIOBJMACRO_START(MUIC_Window)
17 #define ImageObject MUIOBJMACRO_START(MUIC_Image)
18 #define ImagedisplayObject MUIOBJMACRO_START(MUIC_Imagedisplay)
19 #define BitmapObject MUIOBJMACRO_START(MUIC_Bitmap)
20 #define BodychunkObject MUIOBJMACRO_START(MUIC_Bodychunk)
21 #define ChunkyImageObject MUIOBJMACRO_START(MUIC_ChunkyImage)
22 #define NotifyObject MUIOBJMACRO_START(MUIC_Notify)
23 #define ApplicationObject MUIOBJMACRO_START(MUIC_Application)
24 #define TextObject MUIOBJMACRO_START(MUIC_Text)
25 #define RectangleObject MUIOBJMACRO_START(MUIC_Rectangle)
26 #define BalanceObject MUIOBJMACRO_START(MUIC_Balance)
27 #define ListObject MUIOBJMACRO_START(MUIC_List)
28 #define PropObject MUIOBJMACRO_START(MUIC_Prop)
29 #define StringObject MUIOBJMACRO_START(MUIC_String)
30 #define ScrollbarObject MUIOBJMACRO_START(MUIC_Scrollbar)
31 #define ListviewObject MUIOBJMACRO_START(MUIC_Listview)
32 #define RadioObject MUIOBJMACRO_START(MUIC_Radio)
33 #define VolumelistObject MUIOBJMACRO_START(MUIC_Volumelist)
34 #define FloattextObject MUIOBJMACRO_START(MUIC_Floattext)
35 #define DirlistObject MUIOBJMACRO_START(MUIC_Dirlist)
36 #define CycleObject MUIOBJMACRO_START(MUIC_Cycle)
37 #define GaugeObject MUIOBJMACRO_START(MUIC_Gauge)
38 #define ScaleObject MUIOBJMACRO_START(MUIC_Scale)
39 #define NumericObject MUIOBJMACRO_START(MUIC_Numeric)
40 #define SliderObject MUIOBJMACRO_START(MUIC_Slider)
41 #define NumericbuttonObject MUIOBJMACRO_START(MUIC_Numericbutton)
42 #define KnobObject MUIOBJMACRO_START(MUIC_Knob)
43 #define LevelmeterObject MUIOBJMACRO_START(MUIC_Levelmeter)
44 #define BoopsiObject MUIOBJMACRO_START(MUIC_Boopsi)
45 #define ColorfieldObject MUIOBJMACRO_START(MUIC_Colorfield)
46 #define PenadjustObject MUIOBJMACRO_START(MUIC_Penadjust)
47 #define ColoradjustObject MUIOBJMACRO_START(MUIC_Coloradjust)
48 #define PaletteObject MUIOBJMACRO_START(MUIC_Palette)
49 #define GroupObject MUIOBJMACRO_START(MUIC_Group)
50 #define RegisterObject MUIOBJMACRO_START(MUIC_Register)
51 #define VirtgroupObject MUIOBJMACRO_START(MUIC_Virtgroup)
52 #define ScrollgroupObject MUIOBJMACRO_START(MUIC_Scrollgroup)
53 #define PopstringObject MUIOBJMACRO_START(MUIC_Popstring)
54 #define PopobjectObject MUIOBJMACRO_START(MUIC_Popobject)
55 #define PoplistObject MUIOBJMACRO_START(MUIC_Poplist)
56 #define PopscreenObject MUIOBJMACRO_START(MUIC_Popscreen)
57 #define PopaslObject MUIOBJMACRO_START(MUIC_Popasl)
58 #define PendisplayObject MUIOBJMACRO_START(MUIC_Pendisplay)
59 #define PoppenObject MUIOBJMACRO_START(MUIC_Poppen)
60 #define CrawlingObject MUIOBJMACRO_START(MUIC_Crawling)
61 /* The following in zune only */
62 #define PopimageObject MUIOBJMACRO_START(MUIC_Popimage)
63 #define PopframeObject MUIOBJMACRO_START(MUIC_Popframe)
64 #define AboutmuiObject MUIOBJMACRO_START(MUIC_Aboutmui)
65 #define ScrmodelistObject MUIOBJMACRO_START(MUIC_Scrmodelist)
66 #define KeyentryObject MUIOBJMACRO_START(MUIC_Keyentry)
67 #define VGroup MUIOBJMACRO_START(MUIC_Group)
68 #define HGroup \
69 MUIOBJMACRO_START(MUIC_Group), MUIA_Group_Horiz, TRUE
70 #define ColGroup(columns) \
71 MUIOBJMACRO_START(MUIC_Group), MUIA_Group_Columns, (columns)
72 #define RowGroup(rows) \
73 MUIOBJMACRO_START(MUIC_Group), MUIA_Group_Rows , (rows)
74 #define PageGroup \
75 MUIOBJMACRO_START(MUIC_Group), MUIA_Group_PageMode, TRUE
76 #define VGroupV MUIOBJMACRO_START(MUIC_Virtgroup)
77 #define HGroupV \
78 MUIOBJMACRO_START(MUIC_Virtgroup), MUIA_Group_Horiz, TRUE
79 #define ColGroupV(columns) \
80 MUIOBJMACRO_START(MUIC_Virtgroup), MUIA_Group_Columns, (columns)
81 #define RowGroupV(rows) \
82 MUIOBJMACRO_START(MUIC_Virtgroup), MUIA_Group_Rows , (rows)
83 #define PageGroupV \
84 MUIOBJMACRO_START(MUIC_Virtgroup), MUIA_Group_PageMode, TRUE
85 #define RegisterGroup(ts) \
86 MUIOBJMACRO_START(MUIC_Register), MUIA_Register_Titles, ((IPTR) (ts))
88 #define End OBJMACRO_END
90 #define Child MUIA_Group_Child
91 #define SubWindow MUIA_Application_Window
92 #define WindowContents MUIA_Window_RootObject
95 /**************************************************************************
96 Zune/MUI's differnt frame types. Use one per object
97 **************************************************************************/
98 #define NoFrame MUIA_Frame, MUIV_Frame_None
99 #define ButtonFrame MUIA_Frame, MUIV_Frame_Button
100 #define ImageButtonFrame MUIA_Frame, MUIV_Frame_ImageButton
101 #define TextFrame MUIA_Frame, MUIV_Frame_Text
102 #define StringFrame MUIA_Frame, MUIV_Frame_String
103 #define ReadListFrame MUIA_Frame, MUIV_Frame_ReadList
104 #define InputListFrame MUIA_Frame, MUIV_Frame_InputList
105 #define PropFrame MUIA_Frame, MUIV_Frame_Prop
106 #define SliderFrame MUIA_Frame, MUIV_Frame_Slider
107 #define GaugeFrame MUIA_Frame, MUIV_Frame_Gauge
108 #define VirtualFrame MUIA_Frame, MUIV_Frame_Virtual
109 #define GroupFrame MUIA_Frame, MUIV_Frame_Group
110 #define GroupFrameT(t) MUIA_Frame, MUIV_Frame_Group, MUIA_FrameTitle, \
111 ((IPTR) (t)), MUIA_Background, MUII_GroupBack
114 /**************************************************************************
115 Space objects
116 **************************************************************************/
117 #define HVSpace MUI_NewObject(MUIC_Rectangle,TAG_DONE)
118 #define HSpace(x) MUI_MakeObject(MUIO_HSpace,x)
119 #define VSpace(x) MUI_MakeObject(MUIO_VSpace,x)
120 #define HBar(x) MUI_MakeObject(MUIO_HBar,x)
121 #define VBar(x) MUI_MakeObject(MUIO_VBar,x)
122 #define HCenter(obj) (HGroup, GroupSpacing(0), Child, (IPTR)HSpace(0), \
123 Child, (IPTR)(obj), Child, (IPTR)HSpace(0), End)
124 #define VCenter(obj) (VGroup, GroupSpacing(0), Child, (IPTR)VSpace(0), \
125 Child, (IPTR)(obj), Child, (IPTR)VSpace(0), End)
126 #define InnerSpacing(h, v) MUIA_InnerLeft, (h) ,MUIA_InnerRight, (h), \
127 MUIA_InnerTop, (v), MUIA_InnerBottom, (v)
128 #define GroupSpacing(x) MUIA_Group_Spacing, x
130 #ifdef MUI_OBSOLETE
131 /**************************************************************************
132 These macros will create a simple string gadget. Don't use this in
133 new code. Use MUI_MakeObject() instead.
134 **************************************************************************/
135 #define String(contents,maxlen)\
136 StringObject,\
137 StringFrame,\
138 MUIA_String_MaxLen , maxlen,\
139 MUIA_String_Contents, contents,\
142 #define KeyString(contents,maxlen,controlchar)\
143 StringObject,\
144 StringFrame,\
145 MUIA_ControlChar , controlchar,\
146 MUIA_String_MaxLen , maxlen,\
147 MUIA_String_Contents, contents,\
150 #endif
152 #ifdef MUI_OBSOLETE
153 /**************************************************************************
154 These macros will create a simple checkmark gadget. Don't use this in
155 new code. Use MUI_MakeObject() instead.
156 **************************************************************************/
157 #define CheckMark(sel) ImageObject, ImageButtonFrame, MUIA_InputMode, \
158 MUIV_InputMode_Toggle, MUIA_Image_Spec, MUII_CheckMark, \
159 MUIA_Image_FreeVert, TRUE, MUIA_Background, MUII_ButtonBack, \
160 MUIA_ShowSelState, FALSE, MUIA_Selected, sel, End
161 #define KeyCheckMark(sel,ctrl) ImageObject, ImageButtonFrame, \
162 MUIA_InputMode, MUIV_InputMode_Toggle, MUIA_Image_Spec, MUII_CheckMark, \
163 MUIA_Image_FreeVert, TRUE, MUIA_Background, MUII_ButtonBack, \
164 MUIA_ShowSelState, FALSE, MUIA_Selected, sel, MUIA_ControlChar, ctrl, End
165 #endif
168 /**************************************************************************
169 These macros will create a simple button. It's simply calling
170 MUI_MakeObject()
171 **************************************************************************/
172 #define SimpleButton(label) MUI_MakeObject(MUIO_Button,(IPTR)(label))
173 #define ImageButton(label, imagePath) MUI_MakeObject(MUIO_ImageButton, \
174 (IPTR) (label), (IPTR) (imagePath))
176 #define CoolImageButton(label,image) MUI_MakeObject(MUIO_CoolButton, \
177 (IPTR)(label), (IPTR)(image), 0)
178 #define CoolImageIDButton(label,imageid) MUI_MakeObject(MUIO_CoolButton, \
179 (IPTR)(label), imageid, MUIO_CoolButton_CoolImageID)
181 #ifdef MUI_OBSOLETE
182 /**************************************************************************
183 A Keybutton macro. The key should be in lower case.
184 Don't use this in new code. Use MUI_MakeObject() instead.
185 **************************************************************************/
186 #define KeyButton(name,key) TextObject, ButtonFrame, \
187 MUIA_Font, MUIV_Font_Button, MUIA_Text_Contents, (IPTR)(name), \
188 MUIA_Text_PreParse, "\33c", MUIA_Text_HiChar, (IPTR)(key), \
189 MUIA_ControlChar, key, MUIA_InputMode, MUIV_InputMode_RelVerify, \
190 MUIA_Background, MUII_ButtonBack, End
191 #endif
194 #ifdef MUI_OBSOLETE
195 /**************************************************************************
196 Obsolete Cycle macros
197 **************************************************************************/
198 #define Cycle(ent) CycleObject, MUIA_Font, MUIV_Font_Button, \
199 MUIA_Cycle_Entries, ent, End
200 #define KeyCycle(ent,key) CycleObject, MUIA_Font, MUIV_Font_Button, \
201 MUIA_Cycle_Entries, ent, MUIA_ControlChar, key, End
203 /**************************************************************************
204 Obsolete Radios macros
205 **************************************************************************/
206 #define Radio(name,array) RadioObject, GroupFrameT(name), \
207 MUIA_Radio_Entries, (IPTR)(array), End
208 #define KeyRadio(name,array,key) RadioObject, GroupFrameT(name), \
209 MUIA_Radio_Entries, (IPTR)(array), MUIA_ControlChar, (IPTR)(key), End
211 /**************************************************************************
212 Obsolete Slider macros
213 **************************************************************************/
214 #define Slider(min,max,level) SliderObject, MUIA_Numeric_Min, min, \
215 MUIA_Numeric_Max, max, MUIA_Numeric_Value, level, End
216 #define KeySlider(min,max,level,key) SliderObject, MUIA_Numeric_Min, min, \
217 MUIA_Numeric_Max, max, MUIA_Numeric_Value, level, MUIA_ControlChar, key, \
219 #endif
223 /**************************************************************************
224 Use this for getting a pop button
225 **************************************************************************/
226 #define PopButton(img) MUI_MakeObject(MUIO_PopButton, img)
229 /**************************************************************************
230 Macros for Labelobjects
231 Use them for example in a group containing 2 columns, in the first
232 columns the label and in the second columns the object.
234 These objects should be uses because the user might have set strange
235 values.
237 xxxLabel() is suited for Objects without frame
238 xxxLabel1() is suited for objects with a single frame, like buttons
239 xxxLabel2() is suited for objects with with double frames, like string gadgets
240 **************************************************************************/
242 /* Right aligned */
243 #define Label(label) MUI_MakeObject(MUIO_Label, (IPTR)(label), 0)
244 #define Label1(label) \
245 MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_SingleFrame)
246 #define Label2(label) \
247 MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_DoubleFrame)
249 /* Left aligned */
250 #define LLabel(label) \
251 MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_LeftAligned)
252 #define LLabel1(label) \
253 MUI_MakeObject(MUIO_Label, (IPTR)(label), \
254 MUIO_Label_LeftAligned | MUIO_Label_SingleFrame)
255 #define LLabel2(label) \
256 MUI_MakeObject(MUIO_Label, (IPTR)(label), \
257 MUIO_Label_LeftAligned | MUIO_Label_DoubleFrame)
259 /* Centered */
260 #define CLabel(label) \
261 MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_Centered)
262 #define CLabel1(label) MUI_MakeObject(MUIO_Label, (IPTR)(label), \
263 MUIO_Label_Centered | MUIO_Label_SingleFrame)
264 #define CLabel2(label) MUI_MakeObject(MUIO_Label, (IPTR)(label), \
265 MUIO_Label_Centered | MUIO_Label_DoubleFrame)
267 /* Freevert - Right aligned */
268 #define FreeLabel(label) MUI_MakeObject(MUIO_Label, (IPTR)(label), \
269 MUIO_Label_FreeVert)
270 #define FreeLabel1(label) MUI_MakeObject(MUIO_Label, (IPTR)(label), \
271 MUIO_Label_FreeVert | MUIO_Label_SingleFrame)
272 #define FreeLabel2(label) MUI_MakeObject(MUIO_Label, (IPTR)(label), \
273 MUIO_Label_FreeVert | MUIO_Label_DoubleFrame)
275 /* Freevert - Left aligned */
276 #define FreeLLabel(label) MUI_MakeObject(MUIO_Label, (IPTR)(label), \
277 MUIO_Label_FreeVert | MUIO_Label_LeftAligned)
278 #define FreeLLabel1(label) MUI_MakeObject(MUIO_Label, (IPTR)(label), \
279 MUIO_Label_FreeVert | MUIO_Label_LeftAligned | MUIO_Label_SingleFrame)
280 #define FreeLLabel2(label) MUI_MakeObject(MUIO_Label, (IPTR)(label), \
281 MUIO_Label_FreeVert | MUIO_Label_LeftAligned | MUIO_Label_DoubleFrame)
283 /* Freevert - Centered */
284 #define FreeCLabel(label) MUI_MakeObject(MUIO_Label, (IPTR)(label), \
285 MUIO_Label_FreeVert | MUIO_Label_Centered)
286 #define FreeCLabel1(label) MUI_MakeObject(MUIO_Label, (IPTR)(label), \
287 MUIO_Label_FreeVert | MUIO_Label_Centered | MUIO_Label_SingleFrame)
288 #define FreeCLabel2(label) MUI_MakeObject(MUIO_Label, (IPTR)(label), \
289 MUIO_Label_FreeVert | MUIO_Label_Centered | MUIO_Label_DoubleFrame)
291 /* The same as above + keys */
292 #define KeyLabel(label,key) MUI_MakeObject(MUIO_Label, (IPTR)(label), key)
293 #define KeyLabel1(label,key) MUI_MakeObject(MUIO_Label, (IPTR)(label), \
294 MUIO_Label_SingleFrame | (key))
295 #define KeyLabel2(label,key) MUI_MakeObject(MUIO_Label, (IPTR)(label), \
296 MUIO_Label_DoubleFrame | (key))
297 #define KeyLLabel(label,key) MUI_MakeObject(MUIO_Label, (IPTR)(label), \
298 MUIO_Label_LeftAligned | (key))
299 #define KeyLLabel1(label,key) MUI_MakeObject(MUIO_Label, (IPTR)(label), \
300 MUIO_Label_LeftAligned | MUIO_Label_SingleFrame|(key))
301 #define KeyLLabel2(label,key) MUI_MakeObject(MUIO_Label, (IPTR)(label), \
302 MUIO_Label_LeftAligned | MUIO_Label_DoubleFrame|(key))
303 #define KeyCLabel(label,key) MUI_MakeObject(MUIO_Label, (IPTR)(label), \
304 MUIO_Label_Centered | (key))
305 #define KeyCLabel1(label,key) MUI_MakeObject(MUIO_Label, (IPTR)(label), \
306 MUIO_Label_Centered | MUIO_Label_SingleFrame|(key))
307 #define KeyCLabel2(label,key) MUI_MakeObject(MUIO_Label, (IPTR)(label), \
308 MUIO_Label_Centered | MUIO_Label_DoubleFrame|(key))
310 #define FreeKeyLabel(label,key) MUI_MakeObject(MUIO_Label, (IPTR)(label), \
311 MUIO_Label_FreeVert | (key))
312 #define FreeKeyLabel1(label,key) MUI_MakeObject(MUIO_Label, (IPTR)(label), \
313 MUIO_Label_FreeVert | MUIO_Label_SingleFrame | (key))
314 #define FreeKeyLabel2(label,key) MUI_MakeObject(MUIO_Label, (IPTR)(label), \
315 MUIO_Label_FreeVert | MUIO_Label_DoubleFrame | (key))
316 #define FreeKeyLLabel(label,key) MUI_MakeObject(MUIO_Label, (IPTR)(label), \
317 MUIO_Label_FreeVert | MUIO_Label_LeftAligned | (key))
318 #define FreeKeyLLabel1(label,key) MUI_MakeObject(MUIO_Label, (IPTR)(label), \
319 MUIO_Label_FreeVert | MUIO_Label_LeftAligned | MUIO_Label_SingleFrame | (key))
320 #define FreeKeyLLabel2(label,key) MUI_MakeObject(MUIO_Label, (IPTR)(label), \
321 MUIO_Label_FreeVert | MUIO_Label_LeftAligned | MUIO_Label_DoubleFrame | (key))
322 #define FreeKeyCLabel(label,key) MUI_MakeObject(MUIO_Label, (IPTR)(label), \
323 MUIO_Label_FreeVert | MUIO_Label_Centered | (key))
324 #define FreeKeyCLabel1(label,key) MUI_MakeObject(MUIO_Label, (IPTR)(label), \
325 MUIO_Label_FreeVert | MUIO_Label_Centered | MUIO_Label_SingleFrame | (key))
326 #define FreeKeyCLabel2(label,key) MUI_MakeObject(MUIO_Label, (IPTR)(label), \
327 MUIO_Label_FreeVert | MUIO_Label_Centered | MUIO_Label_DoubleFrame | (key))
330 /* Some macros */
331 #ifndef __cplusplus
333 #ifdef __GNUC__
334 #define get(obj, attr, storage) \
335 ({ \
336 union { \
337 IPTR __zune_get_storage; \
338 typeof(*storage) __zune_val_storage; \
339 } __tmp; \
340 __tmp.__zune_val_storage = *storage; \
341 ULONG __zune_get_ret = GetAttr((attr), (obj), &__tmp.__zune_get_storage); \
342 *(storage) = __tmp.__zune_val_storage; \
343 __zune_get_ret; \
345 #else /* !__GNUC__ */
346 #define get(obj,attr,store) GetAttr(attr,obj,(IPTR *)store)
347 #endif /* !__GNUC__ */
349 #ifdef __GNUC__
350 #define XGET(object, attribute) \
351 ({ \
352 IPTR __storage = 0; \
353 GetAttr((attribute), (object), &__storage); \
354 __storage; \
356 #endif /* __GNUC__ */
358 #define set(obj, attr, value) SetAttrs(obj, attr, (IPTR)(value), TAG_DONE)
359 #define nnset(obj, attr, value) SetAttrs(obj, MUIA_NoNotify, TRUE, attr, \
360 (IPTR)(value), TAG_DONE)
362 /* Zune */
363 #define nfset(obj, attr, value) SetAttrs(obj, MUIA_Group_Forward, FALSE, \
364 attr, (IPTR)(value), TAG_DONE)
365 #define nnfset(obj, attr, value) SetAttrs(obj, MUIA_Group_Forward, FALSE, \
366 MUIA_NoNotify, TRUE, attr, (IPTR)(value), TAG_DONE)
368 /* Some aliases... */
369 #define GET(obj, attr, store) get(obj, attr, store)
370 #define SET(obj, attr, value) set(obj, attr, value)
371 #define NNSET(obj, attr, value) nnset(obj, attr, value)
372 #define NFSET(obj, attr, value) nfset(obj, attr, value)
373 #define NNFSET(obj, attr, value) nnfset(obj, attr, value)
375 #define setmutex(obj, n) set(obj, MUIA_Radio_Active, n)
376 #define setcycle(obj, n) set(obj, MUIA_Cycle_Active, n)
377 #define setstring(obj, s) set(obj, MUIA_String_Contents, (IPTR)(s))
378 #define setcheckmark(obj, b) set(obj, MUIA_Selected, b)
379 #define setslider(obj, l) set(obj, MUIA_Numeric_Value, l)
381 #endif /* __cplusplus */
384 /* We need the notify and area Instace Data at least here, but this stuff should be placed at the button anywhy */
385 #ifndef _MUI_CLASSES_NOTIFY_H
386 #include "classes/notify.h"
387 #endif
389 #ifndef _MUI_CLASSES_AREA_H
390 #include "classes/area.h"
391 #endif
393 struct __dummyAreaData__
395 struct MUI_NotifyData mnd;
396 struct MUI_AreaData mad;
399 #define muiNotifyData(obj) (&(((struct __dummyAreaData__ *)(obj))->mnd))
400 #define muiAreaData(obj) (&(((struct __dummyAreaData__ *)(obj))->mad))
402 #define muiGlobalInfo(obj) \
403 (((struct __dummyAreaData__ *)(obj))->mnd.mnd_GlobalInfo)
404 #define muiUserData(obj) \
405 (((struct __dummyAreaData__ *)(obj))->mnd.mnd_UserData)
406 #define muiRenderInfo(obj) \
407 (((struct __dummyAreaData__ *)(obj))->mad.mad_RenderInfo)
410 /* the following macros are only valid inbetween MUIM_Setup and MUIM_Cleanup */
411 #define _app(obj) (muiGlobalInfo(obj)->mgi_ApplicationObject)
412 #define _win(obj) (muiRenderInfo(obj)->mri_WindowObject)
413 #define _dri(obj) (muiRenderInfo(obj)->mri_DrawInfo)
414 #define _screen(obj) (muiRenderInfo(obj)->mri_Screen)
415 #define _pens(obj) (muiRenderInfo(obj)->mri_Pens)
416 #define _font(obj) (muiAreaData(obj)->mad_Font)
418 /* the following macros are only valid during MUIM_Draw */
419 #define _left(obj) (muiAreaData(obj)->mad_Box.Left)
420 #define _top(obj) (muiAreaData(obj)->mad_Box.Top)
421 #define _width(obj) (muiAreaData(obj)->mad_Box.Width)
422 #define _height(obj) (muiAreaData(obj)->mad_Box.Height)
423 #define _right(obj) (_left(obj) + _width(obj) - 1)
424 #define _bottom(obj) (_top(obj) + _height(obj) - 1)
425 #define _addleft(obj) (muiAreaData(obj)->mad_addleft )
426 #define _addtop(obj) (muiAreaData(obj)->mad_addtop )
427 #define _subwidth(obj) (muiAreaData(obj)->mad_subwidth )
428 #define _subheight(obj) (muiAreaData(obj)->mad_subheight)
429 #define _mleft(obj) (_left(obj) + _addleft(obj))
430 #define _mtop(obj) (_top(obj) + _addtop(obj))
431 #define _mwidth(obj) (_width(obj) - _subwidth(obj))
432 #define _mheight(obj) (_height(obj) - _subheight(obj))
433 #define _mright(obj) (_mleft(obj) + _mwidth(obj) - 1)
434 #define _mbottom(obj) (_mtop(obj) + _mheight(obj) - 1)
436 /* the following macros are only valid inbetween MUIM_Show and MUIM_Hide */
437 #define _window(obj) (muiRenderInfo(obj)->mri_Window)
438 #define _rp(obj) (muiRenderInfo(obj)->mri_RastPort)
439 #define _minwidth(obj) (muiAreaData(obj)->mad_MinMax.MinWidth)
440 #define _minheight(obj) (muiAreaData(obj)->mad_MinMax.MinHeight)
441 #define _maxwidth(obj) (muiAreaData(obj)->mad_MinMax.MaxWidth)
442 #define _maxheight(obj) (muiAreaData(obj)->mad_MinMax.MaxHeight)
443 #define _defwidth(obj) (muiAreaData(obj)->mad_MinMax.DefWidth)
444 #define _defheight(obj) (muiAreaData(obj)->mad_MinMax.DefHeight)
445 #define _flags(obj) (muiAreaData(obj)->mad_Flags)
449 #endif /* _MUI_MACROS_H */