home *** CD-ROM | disk | FTP | other *** search
- #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;
- }
-