Don't call InvertPixelArray with negative width and/or height.
[tangerine.git] / workbench / libs / muimaster / macros.h
blob992ee9d413b48d1db0959eef53ec8a3bfa47977b
1 #ifndef _MUI_MACROS_H
2 #define _MUI_MACROS_H
4 /*
5 Copyright © 2002-2003, 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 MUIOBJMACRO_START(MUIC_Group), MUIA_Group_Horiz, TRUE
69 #define ColGroup(columns) MUIOBJMACRO_START(MUIC_Group), MUIA_Group_Columns, (columns)
70 #define RowGroup(rows) MUIOBJMACRO_START(MUIC_Group), MUIA_Group_Rows , (rows)
71 #define PageGroup MUIOBJMACRO_START(MUIC_Group), MUIA_Group_PageMode, TRUE
72 #define VGroupV MUIOBJMACRO_START(MUIC_Virtgroup)
73 #define HGroupV MUIOBJMACRO_START(MUIC_Virtgroup), MUIA_Group_Horiz, TRUE
74 #define ColGroupV(columns) MUIOBJMACRO_START(MUIC_Virtgroup), MUIA_Group_Columns, (columns)
75 #define RowGroupV(rows) MUIOBJMACRO_START(MUIC_Virtgroup), MUIA_Group_Rows , (rows)
76 #define PageGroupV MUIOBJMACRO_START(MUIC_Virtgroup), MUIA_Group_PageMode, TRUE
77 #define RegisterGroup(ts) MUIOBJMACRO_START(MUIC_Register), MUIA_Register_Titles, ((IPTR) (ts))
78 #define IconListObject MUIOBJMACRO_START(MUIC_IconList)
79 #define IconVolumeListObject MUIOBJMACRO_START(MUIC_IconVolumeList)
80 #define IconDrawerListObject MUIOBJMACRO_START(MUIC_IconDrawerList)
81 #define IconListviewObject MUIOBJMACRO_START(MUIC_IconListview)
83 #define End OBJMACRO_END
85 #define Child MUIA_Group_Child
86 #define SubWindow MUIA_Application_Window
87 #define WindowContents MUIA_Window_RootObject
90 /**************************************************************************
91 Zune/MUI's differnt frame types. Use one per object
92 **************************************************************************/
93 #define NoFrame MUIA_Frame, MUIV_Frame_None
94 #define ButtonFrame MUIA_Frame, MUIV_Frame_Button
95 #define ImageButtonFrame MUIA_Frame, MUIV_Frame_ImageButton
96 #define TextFrame MUIA_Frame, MUIV_Frame_Text
97 #define StringFrame MUIA_Frame, MUIV_Frame_String
98 #define ReadListFrame MUIA_Frame, MUIV_Frame_ReadList
99 #define InputListFrame MUIA_Frame, MUIV_Frame_InputList
100 #define PropFrame MUIA_Frame, MUIV_Frame_Prop
101 #define SliderFrame MUIA_Frame, MUIV_Frame_Slider
102 #define GaugeFrame MUIA_Frame, MUIV_Frame_Gauge
103 #define VirtualFrame MUIA_Frame, MUIV_Frame_Virtual
104 #define GroupFrame MUIA_Frame, MUIV_Frame_Group
105 #define GroupFrameT(t) MUIA_Frame, MUIV_Frame_Group, MUIA_FrameTitle, ((IPTR) (t)), MUIA_Background, MUII_GroupBack
108 /**************************************************************************
109 Space objects
110 **************************************************************************/
111 #define HVSpace MUI_NewObject(MUIC_Rectangle,TAG_DONE)
112 #define HSpace(x) MUI_MakeObject(MUIO_HSpace,x)
113 #define VSpace(x) MUI_MakeObject(MUIO_VSpace,x)
114 #define HBar(x) MUI_MakeObject(MUIO_HBar,x)
115 #define VBar(x) MUI_MakeObject(MUIO_VBar,x)
116 #define HCenter(obj) (HGroup, GroupSpacing(0), Child, (IPTR)HSpace(0), Child, (IPTR)(obj), Child, (IPTR)HSpace(0), End)
117 #define VCenter(obj) (VGroup, GroupSpacing(0), Child, (IPTR)VSpace(0), Child, (IPTR)(obj), Child, (IPTR)VSpace(0), End)
118 #define InnerSpacing(h,v) MUIA_InnerLeft,(h),MUIA_InnerRight,(h),MUIA_InnerTop,(v),MUIA_InnerBottom,(v)
119 #define GroupSpacing(x) MUIA_Group_Spacing,x
121 #ifdef MUI_OBSOLETE
122 /**************************************************************************
123 These macros will create a simple string gadget. Don't use this in
124 new code. Use MUI_MakeObject() instead.
125 **************************************************************************/
126 #define String(contents,maxlen)\
127 StringObject,\
128 StringFrame,\
129 MUIA_String_MaxLen , maxlen,\
130 MUIA_String_Contents, contents,\
133 #define KeyString(contents,maxlen,controlchar)\
134 StringObject,\
135 StringFrame,\
136 MUIA_ControlChar , controlchar,\
137 MUIA_String_MaxLen , maxlen,\
138 MUIA_String_Contents, contents,\
141 #endif
143 #ifdef MUI_OBSOLETE
144 /**************************************************************************
145 These macros will create a simple checkmark gadget. Don't use this in
146 new code. Use MUI_MakeObject() instead.
147 **************************************************************************/
148 #define CheckMark(sel) ImageObject, ImageButtonFrame, MUIA_InputMode, MUIV_InputMode_Toggle, MUIA_Image_Spec, MUII_CheckMark, MUIA_Image_FreeVert, TRUE, MUIA_Background, MUII_ButtonBack, MUIA_ShowSelState, FALSE, MUIA_Selected, sel, End
149 #define KeyCheckMark(sel,ctrl) ImageObject, ImageButtonFrame, MUIA_InputMode, MUIV_InputMode_Toggle, MUIA_Image_Spec, MUII_CheckMark, MUIA_Image_FreeVert, TRUE, MUIA_Background, MUII_ButtonBack, MUIA_ShowSelState, FALSE, MUIA_Selected, sel, MUIA_ControlChar, ctrl, End
150 #endif
153 /**************************************************************************
154 These macros will create a simple button. It's simply calling
155 MUI_MakeObject()
156 **************************************************************************/
157 #define SimpleButton(label) MUI_MakeObject(MUIO_Button,(IPTR)label)
158 #define ImageButton(label, imagePath) MUI_MakeObject(MUIO_ImageButton, (IPTR) label, (IPTR) imagePath)
160 #define CoolImageButton(label,image) MUI_MakeObject(MUIO_CoolButton, (IPTR)(label), (IPTR)(image), 0)
161 #define CoolImageIDButton(label,imageid) MUI_MakeObject(MUIO_CoolButton, (IPTR)(label), imageid, MUIO_CoolButton_CoolImageID)
163 #ifdef MUI_OBSOLETE
164 /**************************************************************************
165 A Keybutton macro. The key should be in lower case.
166 Don't use this in new code. Use MUI_MakeObject() instead.
167 **************************************************************************/
168 #define KeyButton(name,key) TextObject, ButtonFrame, MUIA_Font, MUIV_Font_Button, MUIA_Text_Contents, (IPTR)(name), MUIA_Text_PreParse, "\33c", MUIA_Text_HiChar, (IPTR)(key), MUIA_ControlChar, key, MUIA_InputMode, MUIV_InputMode_RelVerify, MUIA_Background, MUII_ButtonBack, End
169 #endif
172 #ifdef MUI_OBSOLETE
173 /**************************************************************************
174 Obsolette Cycle macros
175 **************************************************************************/
176 #define Cycle(ent) CycleObject, MUIA_Font, MUIV_Font_Button, MUIA_Cycle_Entries, ent, End
177 #define KeyCycle(ent,key) CycleObject, MUIA_Font, MUIV_Font_Button, MUIA_Cycle_Entries, ent, MUIA_ControlChar, key, End
179 /**************************************************************************
180 Obsolette Radios macros
181 **************************************************************************/
182 #define Radio(name,array) RadioObject, GroupFrameT(name), MUIA_Radio_Entries, (IPTR)(array), End
183 #define KeyRadio(name,array,key) RadioObject, GroupFrameT(name), MUIA_Radio_Entries, (IPTR)(array), MUIA_ControlChar, (IPTR)(key), End
185 /**************************************************************************
186 Obsolette Slider macros
187 **************************************************************************/
188 #define Slider(min,max,level) SliderObject, MUIA_Numeric_Min, min, MUIA_Numeric_Max, max, MUIA_Numeric_Value, level, End
189 #define KeySlider(min,max,level,key) SliderObject, MUIA_Numeric_Min, min, MUIA_Numeric_Max, max, MUIA_Numeric_Value, level, MUIA_ControlChar, key, End
190 #endif
194 /**************************************************************************
195 Use this for getting a pop button
196 **************************************************************************/
197 #define PopButton(img) MUI_MakeObject(MUIO_PopButton, img)
200 /**************************************************************************
201 Macros for Labelobjects
202 Use them for example in a group containing 2 columns, in the first
203 columns the label and in the second columns the object.
205 These objects should be uses because the user might have set strange
206 values.
208 xxxLabel() is suited for Objects without frame
209 xxxLabel1() is suited for objects with a single frame, like buttons
210 xxxLabel2() is suited for objects with with double frames, like string gadgets
211 **************************************************************************/
213 /* Right aligned */
214 #define Label(label) MUI_MakeObject(MUIO_Label, (IPTR)(label), 0)
215 #define Label1(label) MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_SingleFrame)
216 #define Label2(label) MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_DoubleFrame)
218 /* Left aligned */
219 #define LLabel(label) MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_LeftAligned)
220 #define LLabel1(label) MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_LeftAligned | MUIO_Label_SingleFrame)
221 #define LLabel2(label) MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_LeftAligned | MUIO_Label_DoubleFrame)
223 /* Centered */
224 #define CLabel(label) MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_Centered)
225 #define CLabel1(label) MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_Centered | MUIO_Label_SingleFrame)
226 #define CLabel2(label) MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_Centered | MUIO_Label_DoubleFrame)
228 /* Freevert - Right aligned */
229 #define FreeLabel(label) MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_FreeVert)
230 #define FreeLabel1(label) MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_FreeVert | MUIO_Label_SingleFrame)
231 #define FreeLabel2(label) MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_FreeVert | MUIO_Label_DoubleFrame)
233 /* Freevert - Left aligned */
234 #define FreeLLabel(label) MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_FreeVert | MUIO_Label_LeftAligned)
235 #define FreeLLabel1(label) MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_FreeVert | MUIO_Label_LeftAligned | MUIO_Label_SingleFrame)
236 #define FreeLLabel2(label) MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_FreeVert | MUIO_Label_LeftAligned | MUIO_Label_DoubleFrame)
238 /* Freevert - Centered */
239 #define FreeCLabel(label) MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_FreeVert | MUIO_Label_Centered)
240 #define FreeCLabel1(label) MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_FreeVert | MUIO_Label_Centered | MUIO_Label_SingleFrame)
241 #define FreeCLabel2(label) MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_FreeVert | MUIO_Label_Centered | MUIO_Label_DoubleFrame)
243 /* The same as above + keys */
244 #define KeyLabel(label,key) MUI_MakeObject(MUIO_Label, (IPTR)(label), key)
245 #define KeyLabel1(label,key) MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_SingleFrame | (key))
246 #define KeyLabel2(label,key) MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_DoubleFrame | (key))
247 #define KeyLLabel(label,key) MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_LeftAligned | (key))
248 #define KeyLLabel1(label,key) MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_LeftAligned | MUIO_Label_SingleFrame|(key))
249 #define KeyLLabel2(label,key) MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_LeftAligned | MUIO_Label_DoubleFrame|(key))
250 #define KeyCLabel(label,key) MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_Centered | (key))
251 #define KeyCLabel1(label,key) MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_Centered | MUIO_Label_SingleFrame|(key))
252 #define KeyCLabel2(label,key) MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_Centered | MUIO_Label_DoubleFrame|(key))
254 #define FreeKeyLabel(label,key) MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_FreeVert | (key))
255 #define FreeKeyLabel1(label,key) MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_FreeVert | MUIO_Label_SingleFrame | (key))
256 #define FreeKeyLabel2(label,key) MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_FreeVert | MUIO_Label_DoubleFrame | (key))
257 #define FreeKeyLLabel(label,key) MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_FreeVert | MUIO_Label_LeftAligned | (key))
258 #define FreeKeyLLabel1(label,key) MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_FreeVert | MUIO_Label_LeftAligned | MUIO_Label_SingleFrame | (key))
259 #define FreeKeyLLabel2(label,key) MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_FreeVert | MUIO_Label_LeftAligned | MUIO_Label_DoubleFrame | (key))
260 #define FreeKeyCLabel(label,key) MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_FreeVert | MUIO_Label_Centered | (key))
261 #define FreeKeyCLabel1(label,key) MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_FreeVert | MUIO_Label_Centered | MUIO_Label_SingleFrame | (key))
262 #define FreeKeyCLabel2(label,key) MUI_MakeObject(MUIO_Label, (IPTR)(label), MUIO_Label_FreeVert | MUIO_Label_Centered | MUIO_Label_DoubleFrame | (key))
265 /* Some macros */
266 #ifdef __GNUC__
267 #define get(obj, attr, storage) \
268 ({ \
269 IPTR __zune_get_storage = (IPTR)(*(storage)); \
270 ULONG __zune_get_ret = GetAttr((attr), (obj), &__zune_get_storage); \
271 *(storage) = (typeof(*(storage)))__zune_get_storage; \
272 __zune_get_ret; \
274 #else /* !__GNUC__ */
275 #define get(obj,attr,store) GetAttr(attr,obj,(IPTR *)store)
276 #endif /* !__GNUC__ */
278 #ifdef __GNUC__
279 #define XGET(object, attribute) \
280 ({ \
281 IPTR __storage = 0; \
282 GetAttr((attribute), (object), &__storage); \
283 __storage; \
285 #endif /* __GNUC__ */
287 #define set(obj,attr,value) SetAttrs(obj,attr,(IPTR)value,TAG_DONE)
288 #define nnset(obj,attr,value) SetAttrs(obj,MUIA_NoNotify,TRUE,attr,(IPTR)value,TAG_DONE)
290 /* Zune */
291 #define nfset(obj,attr,value) SetAttrs(obj,MUIA_Group_Forward,FALSE,attr,(IPTR)value,TAG_DONE)
292 #define nnfset(obj,attr,value) SetAttrs(obj,MUIA_Group_Forward,FALSE,MUIA_NoNotify,TRUE,attr,(IPTR)value,TAG_DONE)
294 /* Some aliases... */
295 #define GET(obj,attr,store) get(obj,attr,store)
296 #define SET(obj,attr,value) set(obj,attr,value)
297 #define NNSET(obj,attr,value) nnset(obj,attr,value)
298 #define NFSET(obj,attr,value) nfset(obj,attr,value)
299 #define NNFSET(obj,attr,value) nnfset(obj,attr,value)
301 #define setmutex(obj,n) set(obj,MUIA_Radio_Active,n)
302 #define setcycle(obj,n) set(obj,MUIA_Cycle_Active,n)
303 #define setstring(obj,s) set(obj,MUIA_String_Contents,(IPTR)s)
304 #define setcheckmark(obj,b) set(obj,MUIA_Selected,b)
305 #define setslider(obj,l) set(obj,MUIA_Numeric_Value,l)
307 /* We need the notify and area Instace Data at least here, but this stuff should be placed at the button anywhy */
308 #ifndef _MUI_CLASSES_NOTIFY_H
309 #include "classes/notify.h"
310 #endif
312 #ifndef _MUI_CLASSES_AREA_H
313 #include "classes/area.h"
314 #endif
316 struct __dummyAreaData__
318 struct MUI_NotifyData mnd;
319 struct MUI_AreaData mad;
322 #define muiNotifyData(obj) (&(((struct __dummyAreaData__ *)(obj))->mnd))
323 #define muiAreaData(obj) (&(((struct __dummyAreaData__ *)(obj))->mad))
325 #define muiGlobalInfo(obj) (((struct __dummyAreaData__ *)(obj))->mnd.mnd_GlobalInfo)
326 #define muiUserData(obj) (((struct __dummyAreaData__ *)(obj))->mnd.mnd_UserData)
327 #define muiRenderInfo(obj) (((struct __dummyAreaData__ *)(obj))->mad.mad_RenderInfo)
330 /* the following macros are only valid inbetween MUIM_Setup and MUIM_Cleanup */
331 #define _app(obj) (muiGlobalInfo(obj)->mgi_ApplicationObject)
332 #define _win(obj) (muiRenderInfo(obj)->mri_WindowObject)
333 #define _dri(obj) (muiRenderInfo(obj)->mri_DrawInfo)
334 #define _screen(obj) (muiRenderInfo(obj)->mri_Screen)
335 #define _pens(obj) (muiRenderInfo(obj)->mri_Pens)
336 #define _font(obj) (muiAreaData(obj)->mad_Font)
338 /* the following macros are only valid during MUIM_Draw */
339 #define _left(obj) (muiAreaData(obj)->mad_Box.Left)
340 #define _top(obj) (muiAreaData(obj)->mad_Box.Top)
341 #define _width(obj) (muiAreaData(obj)->mad_Box.Width)
342 #define _height(obj) (muiAreaData(obj)->mad_Box.Height)
343 #define _right(obj) (_left(obj) + _width(obj) - 1)
344 #define _bottom(obj) (_top(obj) + _height(obj) - 1)
345 #define _addleft(obj) (muiAreaData(obj)->mad_addleft )
346 #define _addtop(obj) (muiAreaData(obj)->mad_addtop )
347 #define _subwidth(obj) (muiAreaData(obj)->mad_subwidth )
348 #define _subheight(obj) (muiAreaData(obj)->mad_subheight)
349 #define _mleft(obj) (_left(obj) + _addleft(obj))
350 #define _mtop(obj) (_top(obj) + _addtop(obj))
351 #define _mwidth(obj) (_width(obj) - _subwidth(obj))
352 #define _mheight(obj) (_height(obj) - _subheight(obj))
353 #define _mright(obj) (_mleft(obj) + _mwidth(obj) - 1)
354 #define _mbottom(obj) (_mtop(obj) + _mheight(obj) - 1)
356 /* the following macros are only valid inbetween MUIM_Show and MUIM_Hide */
357 #define _window(obj) (muiRenderInfo(obj)->mri_Window)
358 #define _rp(obj) (muiRenderInfo(obj)->mri_RastPort)
359 #define _minwidth(obj) (muiAreaData(obj)->mad_MinMax.MinWidth)
360 #define _minheight(obj) (muiAreaData(obj)->mad_MinMax.MinHeight)
361 #define _maxwidth(obj) (muiAreaData(obj)->mad_MinMax.MaxWidth)
362 #define _maxheight(obj) (muiAreaData(obj)->mad_MinMax.MaxHeight)
363 #define _defwidth(obj) (muiAreaData(obj)->mad_MinMax.DefWidth)
364 #define _defheight(obj) (muiAreaData(obj)->mad_MinMax.DefHeight)
365 #define _flags(obj) (muiAreaData(obj)->mad_Flags)
369 #endif /* _MUI_MACROS_H */