home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 4
/
AACD04.ISO
/
CDTools
/
ClassAct
/
Examples
/
Palette
/
PaletteExample.c
< prev
next >
Wrap
C/C++ Source or Header
|
1997-07-09
|
4KB
|
163 lines
/**
** PaletteExample.c -- Palette class example.
**
** This is a simple example testing some of the capabilities of the
** Palette gadget class.
**
** This code opens a simple window and then creates a Palette gadget.
**
** Note that we are not using window or layout class here, we are
** using the gadget in a fairly direct form, but that's perfectly legal.
**
**/
#include <exec/types.h>
#include <exec/memory.h>
#include <intuition/intuition.h>
#include <intuition/gadgetclass.h>
#include <libraries/gadtools.h>
#include <utility/tagitem.h>
#include <clib/dos_protos.h>
#include <clib/exec_protos.h>
#include <clib/intuition_protos.h>
#include <clib/gadtools_protos.h>
#include <gadgets/palette.h>
#include <proto/palette.h>
#include <stdio.h>
/* Function prototypes.
*/
struct ClassLibrary * OpenClass(STRPTR, ULONG);
/* Global variables.
*/
struct ClassLibrary *PaletteBase;
struct Gadget *palette_gad;
/* This is the start of our programme.
*/
main()
{
struct Screen *screen = NULL;
/* We'll just open up on the Workbench screen, and use its screen font.
*/
if (screen = LockPubScreen("Workbench"))
{
struct Window *win = NULL;
/* Open the window, note how we size the window to perfectly fit
* all the gadgets.
*/
if (win = OpenWindowTags(NULL,
WA_Left, 0,
WA_Top, screen->Font->ta_YSize + 3,
WA_Width, 200,
WA_Height, (screen->WBorTop) + 5 + screen->Font->ta_YSize + 100,
WA_IDCMP, IDCMP_GADGETUP | IDCMP_REFRESHWINDOW |
IDCMP_CLOSEWINDOW | IDCMP_GADGETDOWN,
WA_Flags, WFLG_DRAGBAR | WFLG_DEPTHGADGET | WFLG_CLOSEGADGET |
WFLG_SIZEGADGET | WFLG_ACTIVATE | WFLG_SMART_REFRESH,
WA_Title, "Palette Demo",
WA_MinWidth, 60,
WA_MinHeight, (screen->WBorTop) + 5 + screen->Font->ta_YSize + 60,
WA_MaxWidth, -1,
WA_MaxHeight, -1,
TAG_DONE))
{
PutStr("Creating Palette class\n");
if (PaletteBase = OpenClass("gadgets/palette.gadget", 0))
{
PutStr("Creating Palette gadget 1\n");
if (palette_gad = (struct Gadget *)NewObject(PALETTE_GetClass(), NULL,
GA_ID, 2,
GA_Top, (win->BorderTop) + 5,
GA_Left, 10,
GA_RelWidth, -36,
GA_RelHeight, -(win->BorderTop + win->BorderBottom + 10),
GA_RelVerify, TRUE,
PALETTE_NumColours, 1 << screen->RastPort.BitMap->Depth,
TAG_END))
{
struct IntuiMessage *imsg;
BOOL ok = TRUE;
AddGList(win, palette_gad, -1, -1, NULL);
RefreshGList(palette_gad, win, NULL, -1);
/* Just wait around until the close gadget is pressed.
*/
while (ok)
{
struct Gadget *gadget;
WaitPort(win->UserPort);
while (imsg = (struct IntuiMessage *)GetMsg(win->UserPort))
{
switch(imsg->Class)
{
case IDCMP_CLOSEWINDOW:
ok = FALSE;
break;
case IDCMP_GADGETUP:
gadget = (struct Gadget *)imsg->IAddress;
Printf("Gadget: %ld Code: %ld\n",
(LONG)gadget->GadgetID, (LONG)imsg->Code );
break;
default:
break;
}
ReplyMsg((struct Message *)imsg);
}
}
RemoveGList(win, palette_gad, -1);
DisposeObject(palette_gad);
}
else
PutStr("ERROR: Couldn't create Palette gadget\n");
/* Free the class.
*/
PutStr("Freeing Palette class\n");
CloseLibrary((struct Library *)PaletteBase);
}
else
PutStr("ERROR: Couldn't create Palette class\n");
CloseWindow(win);
}
else
PutStr("ERROR: Couldn't open window\n");
UnlockPubScreen(0, screen);
}
else
PutStr("ERROR: Couldn't lock public screen\n");
}
/* Open a class library.
*/
struct ClassLibrary * OpenClass(STRPTR name, ULONG version)
{
struct Library *retval;
UBYTE buffer[256];
if ((retval = OpenLibrary(name, version)) == NULL)
{
sprintf (buffer, ":classes/%s", name);
if ((retval = OpenLibrary(buffer, version)) == NULL)
{
sprintf(buffer, "classes/%s", name);
retval = OpenLibrary(buffer, version);
}
}
return((struct ClassLibrary *)retval);
}