home *** CD-ROM | disk | FTP | other *** search
- #include <classes/BOOPSI/images.h>
- #include <classes/BOOPSI/boopsilib.h>
-
- #pragma -
- #include <pragma/utility_lib.h>
- #include <clib/alib_protos.h>
- #include <pragma/intuition_lib.h>
- #include <pragma/graphics_lib.h>
- #pragma +
-
- struct InstanceData {
- struct Image *image;
- UWORD bpen;
- };
-
- PictureClass::PictureClass()
- : BoopsiClass(sizeof(struct InstanceData),(ULONG (*)()) &dispatcher,IMAGECLASS,NULL)
- {
- }
-
- ULONG PictureClass::dispatcher(Class *cl, Object *o, Msg msg)
- {
- struct InstanceData *data;
- ULONG retval = FALSE;
- switch (msg->MethodID)
- {
- case OM_NEW:
- {
- Object *object;
- if (object = (Object *) DoSuperMethodA(cl,o,msg))
- {
- data = (struct InstanceData *) INST_DATA(cl,object);
- data->image = NULL;
- data->bpen = BACKGROUNDPEN;
- TagItemCursorC tic(((struct opSet *) msg)->ops_AttrList);
- while (!tic.isDone()) {
- /* register */ ULONG ticData = tic.itemData();
- switch (tic.itemTag())
- {
- case IA_BGPen:
- data->bpen = (UWORD) ticData;
- break;
- case PICA_Image:
- data->image = (struct Image *) ticData;
- break;
- default:
- break;
- };
- tic.next();
- };
- retval = (ULONG) object;
- };
- break;
- };
- case OM_DISPOSE:
- {
- data = (struct InstanceData *) INST_DATA(cl,o);
- retval = DoSuperMethodA(cl,o,msg);
- break;
- };
- case OM_GET:
- {
- data = (struct InstanceData *) INST_DATA(cl,o);
- switch (((struct opGet *) msg)->opg_AttrID)
- {
- case IA_Left:
- *(((struct opGet *) msg)->opg_Storage) = ((struct Gadget *) o)->LeftEdge;
- retval = TRUE;
- break;
- case IA_Top:
- *(((struct opGet *) msg)->opg_Storage) = ((struct Gadget *) o)->TopEdge;
- retval = TRUE;
- break;
- case IA_Width:
- *(((struct opGet *) msg)->opg_Storage) = ((struct Gadget *) o)->Width;
- retval = TRUE;
- break;
- case IA_Height:
- *(((struct opGet *) msg)->opg_Storage) = ((struct Gadget *) o)->Height;
- retval = TRUE;
- break;
- case IA_BGPen:
- *(((struct opGet *) msg)->opg_Storage) = (ULONG) data->bpen;
- retval = TRUE;
- break;
- case PICA_Image:
- *(((struct opGet *) msg)->opg_Storage) = (ULONG) data->image;
- retval = TRUE;
- break;
- default:
- retval = DoSuperMethodA(cl,o,msg);
- break;
- };
- break;
- };
- case OM_SET:
- {
- data = (struct InstanceData *) INST_DATA(cl,o);
- TagItemCursorC tic(((struct opSet *) msg)->ops_AttrList);
- while (!tic.isDone()) {
- /* register */ ULONG ticData = tic.itemData();
- switch (tic.itemTag())
- {
- case IA_BGPen:
- data->bpen = (UWORD) ticData;
- break;
- case PICA_Image:
- data->image = (struct Image *) ticData;
- break;
- default:
- break;
- };
- tic.next();
- };
- retval = DoSuperMethodA(cl,o,msg);
- break;
- };
- case IM_DRAW:
- {
- data = (struct InstanceData *) INST_DATA(cl,o);
- render(cl,(struct Image *) o, (struct impDraw *) msg, data);
- break;
- };
- /*
- case IM_HITTEST:
- {
- retval = TRUE;
- break;
- };
- case IM_ERASE:
- {
- data = (struct InstanceData *) INST_DATA(cl,o);
- break;
- };
- case IM_DRAWFRAME:
- {
- data = (struct InstanceData *) INST_DATA(cl,o);
- render(cl,(struct Image *) o, (struct impDraw *) msg, data);
- break;
- };
- case IM_HITFRAME:
- {
- retval = TRUE;
- break;
- };
- case IM_ERASEFRAME:
- {
- data = (struct InstanceData *) INST_DATA(cl,o);
- break;
- };
- case IM_FRAMEBOX:
- {
- data = (struct InstanceData *) INST_DATA(cl,o);
- break;
- };
- */
- default:
- {
- retval = DoSuperMethodA(cl,o,msg);
- break;
- };
- };
- return retval;
- }
-
- ULONG PictureClass::render(Class *cl, struct Image *im,
- struct impDraw *msg, struct InstanceData *data)
- {
- WORD x = im->LeftEdge + msg->imp_Offset.X;
- WORD y = im->TopEdge + msg->imp_Offset.Y;
- if (msg->imp_DrInfo)
- SetAPen(msg->imp_RPort,msg->imp_DrInfo->dri_Pens[data->bpen])
- else
- SetAPen(msg->imp_RPort,0);
- SetDrMd(msg->imp_RPort,JAM1);
- RectFill(msg->imp_RPort, x, y,
- x + im->Width - 1, y + im->Height - 1);
- SuperDrawImageState(msg->imp_RPort, data->image,NULL,
- im->LeftEdge + msg->imp_Offset.X,
- im->TopEdge + msg->imp_Offset.Y,
- im->Width, im->Height,
- msg->imp_State, msg->imp_DrInfo);
- return TRUE;
- }
-
- // *************************************************************
-
- PictureClass PictureC::pic;
-
- // *************************************************************
-
-