home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 6
/
AACD06.ISO
/
AACD
/
Programming
/
ImageManager
/
Examples
/
Simple.c
< prev
Wrap
C/C++ Source or Header
|
2000-01-27
|
2KB
|
99 lines
#include <stdio.h>
#include <proto/exec.h>
#include <proto/imagemanager.h>
#include <proto/intuition.h>
#include <exec/memory.h>
#ifndef REG
#define REG(x) register __ ## x
#endif
struct Library *ImageManagerBase;
ULONG MyHookCode (REG(a0) struct Hook *hook, REG(a1) struct IMP_NewFrame *msg, REG(a2) Object *obj)
{
ULONG result = FALSE;
switch(msg->MethodID)
{
case IMM_NewFrame:
{
struct Window *win;
struct Screen *scr = (Screen *)hook->h_Data;
if(hook->h_Data = win = OpenWindowTags(NULL, WA_Title, hook->h_SubEntry, WA_PubScreen, scr, WA_Activate, TRUE, WA_IDCMP, IDCMP_CLOSEWINDOW, WA_CloseGadget, TRUE, WA_DragBar, TRUE, WA_DepthGadget, TRUE, WA_InnerWidth, msg->Width, WA_InnerHeight, msg->Height, TAG_DONE))
{
Object *raster;
if(GetAttr(IMA_Next, obj, (ULONG *)&raster), raster)
SetAttrs(raster, IMA_Raster_RastPort, win->RPort, IMA_Raster_Left, win->BorderLeft, IMA_Raster_Top, win->BorderTop, TAG_DONE);
result = TRUE;
}
UnlockPubScreen(NULL, scr);
}
break;
case IMM_ReceiveData:
{
struct Window *win = (Window *)hook->h_Data;
result = !(SetSignal(0L, 0L) & (1 << win->UserPort->mp_SigBit));
}
break;
}
return result;
}
int main (int argc, char **argv)
{
if(ImageManagerBase = OpenLibrary("ImageManager.library", 1))
{
STRPTR filename = argc == 2 ? argv[1] : "Download:/«99.03.02»/001_ScrollBarGrab.PNG";
struct Screen *scr = LockPubScreen(NULL);
struct Hook MyHook = { { NULL, NULL }, (HOOKFUNC)MyHookCode, (HOOKFUNC)FilePart(filename), scr };
Object **chain = IM_CreateChain(0L,
IMC_NewObject, "File",
TAG_DONE,
IMC_NewObject, "Decoder",
TAG_DONE,
/* IMC_NewObject, "ScaleX",
IMA_ScaleX_Width, 800,
TAG_DONE,
IMC_NewObject, "ScaleY",
IMA_ScaleY_Height, 600,
TAG_DONE,
*/
IMC_NewObject, "Container",
IMA_Container_Screen, scr,
TAG_DONE,
IMC_NewObject, "Probe",
IMA_Probe_NewFrameHook, &MyHook,
IMA_Probe_ReceiveDataHook, &MyHook,
TAG_DONE,
IMC_NewObject, "Raster",
TAG_DONE,
IMC_EndChain);
if(chain)
{
DoMethod(chain[0], IMM_File_Load, filename);
struct Window *win = (Window *)MyHook.h_Data;
if(win && ((APTR)win != (APTR)scr))
{
WaitPort(win->UserPort);
CloseWindow(win);
}
else
{
UnlockPubScreen(NULL, scr);
}
IM_DeleteChain(chain);
}
CloseLibrary(ImageManagerBase);
}
return 0;
}