/* * Example for ClassAct penmap.image */ #include #include #include #include #include #include #include #include #include #include #include struct ClassLibrary *PenMapBase; struct Window *win; struct Image *image_object; ULONG image_object_palette[] = { 2, 0x00000000, 0x00000000, 0x00000000, 0xEEEEEEEE, 0xDDDDDDDD, 0x00000000 }; UBYTE happy_data[] = { 0,16, 0,14, 0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0, 0,0,0,1,1,2,2,2,2,2,2,1,1,0,0,0, 0,0,1,2,2,2,2,2,2,2,2,2,2,1,0,0, 0,1,2,2,2,2,2,2,2,2,2,2,2,2,1,0, 0,1,2,2,2,1,1,2,2,1,1,2,2,2,1,0, 1,2,2,2,2,1,1,2,2,1,1,2,2,2,2,1, 1,2,2,2,2,1,1,2,2,1,1,2,2,2,2,1, 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1, 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1, 0,1,2,2,2,1,2,2,2,2,1,2,2,2,1,0, 0,1,2,2,2,2,1,1,1,1,2,2,2,2,1,0, 0,0,1,2,2,2,2,2,2,2,2,2,2,1,0,0, 0,0,0,1,1,2,2,2,2,2,2,1,1,0,0,0, 0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0 }; UBYTE scared_data[] = { 0,16, 0,14, 0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0, 0,0,0,1,1,2,2,2,2,2,2,1,1,0,0,0, 0,0,1,2,2,2,2,2,2,2,2,2,2,1,0,0, 0,1,2,2,2,1,1,2,2,1,1,2,2,2,1,0, 0,1,2,2,1,2,2,2,2,2,2,1,2,2,1,0, 1,2,2,2,2,1,1,2,2,1,1,2,2,2,2,1, 1,2,2,2,2,1,1,2,2,1,1,2,2,2,2,1, 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1, 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1, 0,1,2,2,2,2,1,1,1,1,2,2,2,2,1,0, 0,1,2,2,2,1,1,1,1,1,1,2,2,2,1,0, 0,0,1,2,2,2,2,2,2,2,2,2,2,1,0,0, 0,0,0,1,1,2,2,2,2,2,2,1,1,0,0,0, 0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0 }; /* Try opening the class library from a number of common places */ struct ClassLibrary *OpenClass (STRPTR name, ULONG version) { struct ExecBase *SysBase = (*((struct ExecBase **) 4)); struct Library *retval; UBYTE buffer[256]; if ((retval = OpenLibrary (name, version)) == NULL) { sprintf (buffer, "SYS:Classes/%s", name); if ((retval = OpenLibrary (buffer, version)) == NULL) { sprintf (buffer, "Classes/%s", name); retval = OpenLibrary (buffer, version); } } return (struct ClassLibrary *) retval; } void main (void) { struct IntuiMessage *msg; BOOL done = FALSE; win = OpenWindowTags (NULL, WA_Flags, WFLG_DEPTHGADGET | WFLG_DRAGBAR | WFLG_CLOSEGADGET | WFLG_SIZEGADGET, WA_IDCMP, IDCMP_CLOSEWINDOW | IDCMP_NEWSIZE, WA_InnerWidth, 40, WA_InnerHeight, 30, WA_MaxWidth,-1, WA_MaxHeight,-1, WA_Activate, TRUE, WA_SmartRefresh, TRUE, WA_Title, "ClassAct penmap.image Demo", TAG_DONE); if (win) { if (PenMapBase = OpenClass("images/penmap.image", 40L)) { image_object = (struct Image *)NewObject (NULL, "penmap.image", PENMAP_RenderData, happy_data, PENMAP_SelectData, scared_data, PENMAP_Palette, image_object_palette, PENMAP_Screen, win->WScreen, TAG_DONE); if (image_object) { SetAttrs(image_object, IA_Width, win->Width - (win->BorderLeft + win->BorderRight + 10L), IA_Height, win->Height - (win->BorderTop + win->BorderBottom + 10L), TAG_DONE); DrawImageState (win->RPort, image_object, win->BorderLeft + 5L, win->BorderTop + 5L, IDS_SELECTED, NULL); while (!done) { WaitPort (win->UserPort); while (msg = (struct IntuiMessage *)GetMsg (win->UserPort)) { if (msg->Class == IDCMP_CLOSEWINDOW) done = TRUE; else if (msg->Class == IDCMP_NEWSIZE) { SetAttrs(image_object, IA_Width, win->Width - (win->BorderLeft + win->BorderRight + 10L), IA_Height, win->Height - (win->BorderTop + win->BorderBottom + 10L), TAG_DONE); SetAPen(win->RPort,0); RectFill(win->RPort, win->BorderLeft, win->BorderTop, win->BorderLeft + win->Width - (win->BorderRight + win->BorderLeft + 1), win->BorderTop + win->Height - (win->BorderTop + win->BorderBottom + 1)); DrawImageState(win->RPort, image_object, win->BorderLeft + 5L, win->BorderTop + 5L, IDS_SELECTED, NULL); } ReplyMsg ((struct Message *)msg); } } } } } if (image_object) DisposeObject (image_object); if (win) CloseWindow (win); if (PenMapBase) CloseLibrary ((struct Library *)PenMapBase); }