Tabs to spaces, more consistent formatting.
[AROS.git] / workbench / libs / muimaster / classes / framedisplay.c
blob3878b835e2b1a16839834f85f1734191744c30dd
1 /*
2 Copyright 2002-2003, The AROS Development Team. All rights reserved.
3 $Id$
4 */
6 #define MUIMASTER_YES_INLINE_STDARG
8 #include <stdio.h>
10 #include <graphics/gfx.h>
11 #include <graphics/view.h>
12 #include <clib/alib_protos.h>
13 #include <proto/exec.h>
14 #include <proto/graphics.h>
15 #include <proto/utility.h>
16 #include <proto/intuition.h>
17 #include <proto/muimaster.h>
19 #include <string.h>
21 /* #define MYDEBUG 1 */
22 #include "debug.h"
23 #include "mui.h"
24 #include "muimaster_intern.h"
25 #include "support.h"
26 #include "support_classes.h"
27 #include "frame.h"
28 #include "framedisplay_private.h"
30 extern struct Library *MUIMasterBase;
33 IPTR Framedisplay__OM_NEW(struct IClass *cl, Object *obj,
34 struct opSet *msg)
36 struct Framedisplay_DATA *data;
37 struct TagItem *tags;
38 struct TagItem *tag;
40 D(bug("Framedisplay_New starts\n"));
42 obj = (Object *) DoSuperMethodA(cl, obj, (Msg) msg);
43 if (!obj)
44 return FALSE;
46 data = INST_DATA(cl, obj);
48 /* parse initial taglist */
50 for (tags = msg->ops_AttrList; (tag = NextTagItem(&tags));)
52 switch (tag->ti_Tag)
54 case MUIA_Framedisplay_Spec:
55 zune_frame_spec_to_intern((CONST_STRPTR) tag->ti_Data,
56 &data->fs_intern);
57 break;
61 D(bug("Framedisplay_New(%lx) spec=%lx\n", obj, data->fs_intern));
62 return (IPTR) obj;
65 IPTR Framedisplay__OM_SET(struct IClass *cl, Object *obj,
66 struct opSet *msg)
68 struct Framedisplay_DATA *data = INST_DATA(cl, obj);
69 struct TagItem *tags;
70 struct TagItem *tag;
72 for (tags = msg->ops_AttrList; (tag = NextTagItem(&tags));)
74 switch (tag->ti_Tag)
76 case MUIA_Framedisplay_Spec:
77 zune_frame_spec_to_intern((CONST_STRPTR) tag->ti_Data,
78 &data->fs_intern);
79 MUI_Redraw(obj, MADF_DRAWOBJECT);
80 break;
84 return (IPTR) DoSuperMethodA(cl, obj, (Msg) msg);
87 IPTR Framedisplay__OM_GET(struct IClass *cl, Object *obj,
88 struct opGet *msg)
90 struct Framedisplay_DATA *data = INST_DATA(cl, obj);
91 switch (msg->opg_AttrID)
93 case MUIA_Framedisplay_Spec:
94 zune_frame_intern_to_spec(&data->fs_intern, (STRPTR) data->spec);
95 *msg->opg_Storage = (IPTR) data->spec;
96 return (TRUE);
99 return (IPTR) DoSuperMethodA(cl, obj, (Msg) msg);
102 IPTR Framedisplay__MUIM_AskMinMax(struct IClass *cl, Object *obj,
103 struct MUIP_AskMinMax *msg)
105 DoSuperMethodA(cl, obj, (Msg) msg);
107 msg->MinMaxInfo->MinWidth += 8;
108 msg->MinMaxInfo->MinHeight += 8;
110 msg->MinMaxInfo->DefWidth += 16;
111 msg->MinMaxInfo->DefHeight += 16;
113 msg->MinMaxInfo->MaxWidth = MUI_MAXMAX;
114 msg->MinMaxInfo->MaxHeight = MUI_MAXMAX;
116 return 1;
119 IPTR Framedisplay__MUIM_Draw(struct IClass *cl, Object *obj,
120 struct MUIP_Draw *msg)
122 struct Framedisplay_DATA *data = INST_DATA(cl, obj);
123 const struct ZuneFrameGfx *zframe;
124 APTR region;
125 WORD ileft, itop, iright, ibottom;
126 int i;
128 DoSuperMethodA(cl, obj, (Msg) msg);
130 if (!(msg->flags & MADF_DRAWOBJECT))
131 return 0;
133 zframe = zune_zframe_get(obj, &data->fs_intern);
134 if (!zframe)
135 return 0;
136 zframe->draw(zframe->customframe, muiRenderInfo(obj), _mleft(obj),
137 _mtop(obj), _mwidth(obj), _mheight(obj), _mleft(obj), _mtop(obj),
138 _mwidth(obj), _mheight(obj));
140 ileft = _mleft(obj) + zframe->ileft + data->fs_intern.innerLeft;
141 itop = _mtop(obj) + zframe->itop + data->fs_intern.innerTop;
142 iright = _mright(obj) - zframe->iright - data->fs_intern.innerRight;
143 ibottom = _mbottom(obj) - zframe->ibottom - data->fs_intern.innerBottom;
145 SetAPen(_rp(obj), _pens(obj)[MPEN_SHADOW]);
147 region = MUI_AddClipping(muiRenderInfo(obj), ileft, itop,
148 iright - ileft + 1, ibottom - itop + 1);
150 for (i = itop; i < ibottom + iright - ileft; i++)
152 if (!(i % 4))
154 Move(_rp(obj), ileft, i);
155 Draw(_rp(obj), ileft + i - itop, itop);
159 MUI_RemoveClipping(muiRenderInfo(obj), region);
161 return 1;
164 IPTR Framedisplay__MUIM_DragQuery(struct IClass *cl, Object *obj,
165 struct MUIP_DragQuery *msg)
167 struct MUI_FrameSpec *dummy = NULL;
169 if (msg->obj == obj)
170 return MUIV_DragQuery_Refuse;
171 if (!get(msg->obj, MUIA_Framedisplay_Spec, &dummy))
172 return MUIV_DragQuery_Refuse;
173 return MUIV_DragQuery_Accept;
176 IPTR Framedisplay__MUIM_DragDrop(struct IClass *cl, Object *obj,
177 struct MUIP_DragDrop *msg)
179 struct MUI_FrameSpec *spec = NULL;
181 get(msg->obj, MUIA_Framedisplay_Spec, &spec);
182 set(obj, MUIA_Framedisplay_Spec, (IPTR) spec);
183 return 0;
187 #if ZUNE_BUILTIN_FRAMEDISPLAY
188 BOOPSI_DISPATCHER(IPTR, Framedisplay_Dispatcher, cl, obj, msg)
190 switch (msg->MethodID)
192 case OM_NEW:
193 return Framedisplay__OM_NEW(cl, obj, (struct opSet *)msg);
194 case OM_SET:
195 return Framedisplay__OM_SET(cl, obj, (APTR) msg);
196 case OM_GET:
197 return Framedisplay__OM_GET(cl, obj, (APTR) msg);
198 case MUIM_AskMinMax:
199 return Framedisplay__MUIM_AskMinMax(cl, obj, (APTR) msg);
200 case MUIM_Draw:
201 return Framedisplay__MUIM_Draw(cl, obj, (APTR) msg);
202 case MUIM_DragQuery:
203 return Framedisplay__MUIM_DragQuery(cl, obj, (APTR) msg);
204 case MUIM_DragDrop:
205 return Framedisplay__MUIM_DragDrop(cl, obj, (APTR) msg);
206 default:
207 return DoSuperMethodA(cl, obj, msg);
210 BOOPSI_DISPATCHER_END
212 const struct __MUIBuiltinClass _MUI_Framedisplay_desc =
214 MUIC_Framedisplay,
215 MUIC_Area,
216 sizeof(struct Framedisplay_DATA),
217 (void *) Framedisplay_Dispatcher
219 #endif /* ZUNE_BUILTIN_FRAMEDISPLAY */