home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 3
/
AACD03.BIN
/
CDTools
/
ClassAct
/
Examples
/
PenMap
/
PenMapExample.c
< prev
next >
Wrap
C/C++ Source or Header
|
1997-07-09
|
4KB
|
169 lines
/*
* Example for ClassAct penmap.image
*/
#include <stdio.h>
#include <clib/alib_protos.h>
#include <exec/types.h>
#include <proto/dos.h>
#include <proto/exec.h>
#include <proto/intuition.h>
#include <proto/graphics.h>
#include <intuition/imageclass.h>
#include <intuition/gadgetclass.h>
#include <intuition/intuition.h>
#include <images/penmap.h>
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);
}