home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 6 / AACD06.ISO / AACD / Programming / ImageManager / Examples / Simple.c < prev   
C/C++ Source or Header  |  2000-01-27  |  2KB  |  99 lines

  1. #include <stdio.h>
  2. #include <proto/exec.h>
  3. #include <proto/imagemanager.h>
  4. #include <proto/intuition.h>
  5. #include <exec/memory.h>
  6.  
  7. #ifndef REG
  8. #define REG(x) register __ ## x
  9. #endif
  10.  
  11. struct Library *ImageManagerBase;
  12.  
  13. ULONG MyHookCode (REG(a0) struct Hook *hook, REG(a1) struct IMP_NewFrame *msg, REG(a2) Object *obj)
  14. {
  15.     ULONG result = FALSE;
  16.     switch(msg->MethodID)
  17.     {
  18.         case IMM_NewFrame:
  19.         {
  20.             struct Window *win;
  21.             struct Screen *scr = (Screen *)hook->h_Data;
  22.             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))
  23.             {
  24.                 Object *raster;
  25.                 if(GetAttr(IMA_Next, obj, (ULONG *)&raster), raster)
  26.                     SetAttrs(raster, IMA_Raster_RastPort, win->RPort, IMA_Raster_Left, win->BorderLeft, IMA_Raster_Top, win->BorderTop, TAG_DONE);
  27.                 result = TRUE;
  28.             }
  29.             UnlockPubScreen(NULL, scr);
  30.         }
  31.         break;
  32.  
  33.         case IMM_ReceiveData:
  34.         {
  35.             struct Window *win = (Window *)hook->h_Data;
  36.             result = !(SetSignal(0L, 0L) & (1 << win->UserPort->mp_SigBit));
  37.         }
  38.         break;
  39.     }
  40.     return result;
  41. }
  42.  
  43. int main (int argc, char **argv)
  44. {
  45.     if(ImageManagerBase = OpenLibrary("ImageManager.library", 1))
  46.     {
  47.         STRPTR filename = argc == 2 ? argv[1] : "Download:/«99.03.02»/001_ScrollBarGrab.PNG";
  48.  
  49.         struct Screen *scr = LockPubScreen(NULL);
  50.         struct Hook MyHook = { { NULL, NULL }, (HOOKFUNC)MyHookCode, (HOOKFUNC)FilePart(filename), scr };
  51.  
  52.         Object **chain = IM_CreateChain(0L,
  53.  
  54.             IMC_NewObject, "File",
  55.                 TAG_DONE,
  56.             IMC_NewObject, "Decoder",
  57.                 TAG_DONE,
  58. /*            IMC_NewObject, "ScaleX",
  59.                 IMA_ScaleX_Width, 800,
  60.                 TAG_DONE,
  61.             IMC_NewObject, "ScaleY",
  62.                 IMA_ScaleY_Height, 600,
  63.                 TAG_DONE,
  64. */
  65.             IMC_NewObject, "Container",
  66.                 IMA_Container_Screen, scr,
  67.                 TAG_DONE,
  68.             IMC_NewObject, "Probe",
  69.                 IMA_Probe_NewFrameHook, &MyHook,
  70.                 IMA_Probe_ReceiveDataHook, &MyHook,
  71.                 TAG_DONE,
  72.             IMC_NewObject, "Raster",
  73.                 TAG_DONE,
  74.  
  75.             IMC_EndChain);
  76.  
  77.         if(chain)
  78.         {
  79.             DoMethod(chain[0], IMM_File_Load, filename);
  80.  
  81.             struct Window *win = (Window *)MyHook.h_Data;
  82.             if(win && ((APTR)win != (APTR)scr))
  83.             {
  84.                 WaitPort(win->UserPort);
  85.                 CloseWindow(win);
  86.             }
  87.             else
  88.             {
  89.                 UnlockPubScreen(NULL, scr);
  90.             }
  91.  
  92.             IM_DeleteChain(chain);
  93.         }
  94.  
  95.         CloseLibrary(ImageManagerBase);
  96.     }
  97.     return 0;
  98. }
  99.