/* ******************************************************************** */ /* C code generated by: */ /* Visual Arts Version 2.1 */ /* Copyright 1994-95 Danny Y. Wong All rights reserved */ /* Calgary, Alberta (CANADA) */ /* Partial of the code is copyright by Jaba Development */ /* ******************************************************************** */ #include #include #define ID_ObjID7 0 #define ID_ObjID8 1 #define SuperBitMapDepth 2 #define SuperBitMapMaxX 640 #define SuperBitMapMaxY 200 #define ID_SuperBitMapLeft 2 #define ID_SuperBitMapRight 3 #define ID_SuperBitMapUp 4 #define ID_SuperBitMapDown 5 #define ID_SuperBitMapHoriz 6 #define ID_SuperBitMapVert 7 #define SuperBitMapNumGads 2 #include "SuperBitmap_func.c" #include "SuperBitmap_images.c" int ObjID7Obj(struct VAobject VAObject); int ObjID8Obj(struct VAobject VAObject); BOOL SetupSuperBitMapScrollerWindow(void); void SuperBitMapScrollBitmap(ULONG x, ULONG y); void SuperBitMapInitNewBitmap(void); void SuperBitMapFreeBitmap(void); void SuperBitMapdoNewSize(void); int GetPubScreen(void); void ClosePubScreen(void); int OpenSuperBitMapWindow(char windtitle[]); void CloseSuperBitMapWindow(void); int SuperBitMapHandler(void); int SuperBitMapMainHandler(void); void DrawSuperBitMapObjs(void); int main(int argc, char *argv[]); Object *SuperBitMapSizeImage = NULL, *SuperBitMapLeftImage = NULL, *SuperBitMapRightImage = NULL, *SuperBitMapUpImage = NULL, *SuperBitMapDownImage = NULL; struct Gadget *SuperBitMapHorizGadget = NULL, *SuperBitMapVertGadget = NULL, *SuperBitMapLeftGadget = NULL, *SuperBitMapRightGadget = NULL, *SuperBitMapUpGadget = NULL, *SuperBitMapDownGadget = NULL; struct BitMap *SuperBitMapBitmap = NULL; UBYTE *PubScrName = "Workbench"; struct DrawInfo *ScrDrawInfo = NULL; APTR VisualInfo = NULL; struct Screen *Scr = NULL; struct Window *SuperBitMapWnd = NULL; struct Gadget *SuperBitMapGList = NULL; struct Gadget *SuperBitMapGadgets[SuperBitMapNumGads]; struct IntuiMessage SuperBitMapMsg; UWORD SuperBitMapLeft = 97; UWORD SuperBitMapTop = 46; UWORD SuperBitMapWidth = 395; UWORD SuperBitMapHeight = 129; struct TextAttr topaz8 = { (STRPTR)"topaz.font", 8, 0x00, 0x01 }; struct TextAttr topaz800 = { (STRPTR)"topaz.font", 8, 0x00, 0x00 }; WORD SuperBitMapGadTypes[] = { BUTTON_KIND, CHECKBOX_KIND, }; struct NewGadget SuperBitMapNGads[] = { 269, 10, 91, 12, (UBYTE *)"Button",&topaz800, ID_ObjID7, PLACETEXT_IN, NULL, (APTR)ObjID7Obj, 334, 89, 26, 11, (UBYTE *)"Cool!", &topaz800, ID_ObjID8, PLACETEXT_LEFT, NULL, (APTR)ObjID8Obj, }; ULONG SuperBitMapNTags[] = { TAG_DONE, TAG_DONE, }; int GetPubScreen(void) { if (!(Scr = LockPubScreen(PubScrName))) return(1L); if (!(VisualInfo = GetVisualInfo(Scr, TAG_DONE))) return(2L); if (!(ScrDrawInfo = GetScreenDrawInfo(Scr))) return(3L); return(0L); } void ClosePubScreen(void) { if (VisualInfo) FreeVisualInfo(VisualInfo); if (Scr) UnlockPubScreen(NULL, Scr); if (ScrDrawInfo) FreeScreenDrawInfo(Scr, ScrDrawInfo); } BOOL SetupSuperBitMapScrollerWindow(void) { ULONG resolution = SysISize(); WORD topborder = Scr->WBorTop + Scr->Font->ta_YSize + 1; WORD w = IM(SuperBitMapSizeImage)->Width; WORD h = IM(SuperBitMapSizeImage)->Height; WORD bw = resolution == SYSISIZE_LOWRES ? 1 : 2; WORD bh = resolution == SYSISIZE_HIRES ? 2 : 1; WORD rw = resolution == SYSISIZE_HIRES ? 3 : 2; WORD rh = resolution == SYSISIZE_HIRES ? 2 : 1; WORD gw = 0, gh = 0, gap = 0; gh = MAX(IM(SuperBitMapLeftImage)->Height, h); gh = MAX(IM(SuperBitMapRightImage)->Height, gh); gw = MAX(IM(SuperBitMapUpImage)->Width, w); gw = MAX(IM(SuperBitMapDownImage)->Width, gw); /* If you have gadgets in the left window border, set 'gap' to the * width of these gadgets. */ gap = 1; SuperBitMapHorizGadget = NewPropObject(FREEHORIZ, GA_ID, ID_SuperBitMapHoriz, GA_Left, rw + gap, GA_RelBottom, bh - gh + 2, GA_RelWidth, -gw - gap - IM(SuperBitMapLeftImage)->Width - IM(SuperBitMapRightImage)->Width - rw - rw, GA_Height, gh - bh - bh - 2, GA_BottomBorder, TRUE, GA_Immediate, TRUE, GA_RelVerify, TRUE, GA_GZZGadget, TRUE, GA_UserData, NULL, ICA_TARGET, ICTARGET_IDCMP, TAG_DONE); SuperBitMapVertGadget = NewPropObject(FREEVERT, GA_ID, ID_SuperBitMapVert, GA_RelRight, bw - gw + 3, GA_Top, topborder + rh, GA_Width, gw - bw - bw - 4, GA_RelHeight, -topborder - h - IM(SuperBitMapUpImage)->Height - IM(SuperBitMapDownImage)->Height - rh - rh, GA_RightBorder, TRUE, GA_Previous, SuperBitMapHorizGadget, GA_Immediate, TRUE, GA_RelVerify, TRUE, GA_GZZGadget, TRUE, GA_UserData, NULL, ICA_TARGET, ICTARGET_IDCMP, TAG_DONE); SuperBitMapLeftGadget = NewButtonObject(SuperBitMapLeftImage, GA_ID, ID_SuperBitMapLeft, GA_RelRight, 1 - IM(SuperBitMapLeftImage)->Width - IM(SuperBitMapRightImage)->Width - gw, GA_RelBottom, 1 - IM(SuperBitMapLeftImage)->Height, GA_BottomBorder, TRUE, GA_Previous, SuperBitMapVertGadget, GA_Immediate, TRUE, GA_RelVerify, TRUE, GA_GZZGadget, TRUE, GA_UserData, NULL, ICA_TARGET, ICTARGET_IDCMP, TAG_DONE); SuperBitMapRightGadget = NewButtonObject(SuperBitMapRightImage, GA_ID, ID_SuperBitMapRight, GA_RelRight, 1 - IM(SuperBitMapRightImage)->Width - gw, GA_RelBottom, 1 - IM(SuperBitMapRightImage)->Height, GA_BottomBorder, TRUE, GA_Previous, SuperBitMapLeftGadget, GA_Immediate, TRUE, GA_RelVerify, TRUE, GA_GZZGadget, TRUE, GA_UserData, NULL, ICA_TARGET, ICTARGET_IDCMP, TAG_DONE); SuperBitMapUpGadget = NewButtonObject(SuperBitMapUpImage, GA_ID, ID_SuperBitMapUp, GA_RelRight, 1 - IM(SuperBitMapUpImage)->Width, GA_RelBottom, 1 - IM(SuperBitMapUpImage)->Height - IM(SuperBitMapDownImage)->Height - h, GA_RightBorder, TRUE, GA_Previous, SuperBitMapRightGadget, GA_Immediate, TRUE, GA_RelVerify, TRUE, GA_GZZGadget, TRUE, GA_UserData, NULL, ICA_TARGET, ICTARGET_IDCMP, TAG_DONE); SuperBitMapDownGadget = NewButtonObject(SuperBitMapDownImage, GA_ID, ID_SuperBitMapDown, GA_RelRight, 1 - IM(SuperBitMapDownImage)->Width, GA_RelBottom, 1 - IM(SuperBitMapDownImage)->Height - h, GA_RightBorder, TRUE, GA_Previous, SuperBitMapUpGadget, GA_Immediate, TRUE, GA_RelVerify, TRUE, GA_GZZGadget, TRUE, GA_UserData, NULL, ICA_TARGET, ICTARGET_IDCMP, TAG_DONE); if (!SuperBitMapSizeImage || !SuperBitMapLeftImage || !SuperBitMapRightImage || !SuperBitMapUpImage || !SuperBitMapDownImage) return(FALSE); if (SuperBitMapDownGadget) return(TRUE); return(FALSE); } int OpenSuperBitMapWindow(char windtitle[80]) { struct NewGadget NewGad; struct Gadget *Gad; register UWORD i, j; UWORD offsetx = Scr->WBorLeft; UWORD offsety = Scr->WBorTop + Scr->Font->ta_YSize + 1; SuperBitMapInitNewBitmap(); if (SuperBitMapBitmap == NULL) return(1L); SuperBitMapSizeImage = NewImageObject(SIZEIMAGE); SuperBitMapLeftImage = NewImageObject(LEFTIMAGE); SuperBitMapRightImage = NewImageObject(RIGHTIMAGE); SuperBitMapUpImage = NewImageObject(UPIMAGE); SuperBitMapDownImage = NewImageObject(DOWNIMAGE); if (!SetupSuperBitMapScrollerWindow()) return(1L); if (!(Gad = CreateContext(&SuperBitMapGList))) return(1L); for (i=0, j=0; i < SuperBitMapNumGads; i++) { CopyMem((char *)&SuperBitMapNGads[i], (char *)&NewGad, (long)sizeof(struct NewGadget)); NewGad.ng_VisualInfo = VisualInfo; NewGad.ng_LeftEdge += offsetx; NewGad.ng_TopEdge += offsety; SuperBitMapGadgets[i] = Gad = CreateGadgetA((ULONG)SuperBitMapGadTypes[i], Gad, &NewGad, (struct TagItem *)&SuperBitMapNTags[j]); while (SuperBitMapNTags[j]) j +=2; j++; if (!Gad) return(2L); } SuperBitMapGadgets[i-1]->NextGadget = SuperBitMapHorizGadget; if (!(SuperBitMapWnd = OpenWindowTags(NULL, WA_Left, SuperBitMapLeft, WA_Top, SuperBitMapTop, WA_Width, SuperBitMapWidth, WA_Height, SuperBitMapHeight + kWindowOffSetY, WA_NewLookMenus, TRUE, WA_IDCMP, IDCMP_CLOSEWINDOW | IDCMP_NEWSIZE | IDCMP_GADGETUP | IDCMP_IDCMPUPDATE , WA_Flags, WFLG_CLOSEGADGET | WFLG_SIZEGADGET | WFLG_SIZEBBOTTOM | WFLG_SIZEBRIGHT | WFLG_DEPTHGADGET | WFLG_SMART_REFRESH | WFLG_RMBTRAP | WFLG_ACTIVATE | WFLG_DRAGBAR | WFLG_GIMMEZEROZERO | WFLG_SUPER_BITMAP , WA_Gadgets, SuperBitMapGList, WA_Title, windtitle, WA_ScreenTitle, "Visual Arts V2.2 Copyright 1994-95 Danny Y. Wong All Rights Reserved.", WA_PubScreen, Scr, WA_MinWidth, 160, WA_MinHeight, 50, WA_MaxWidth, 640, WA_MaxHeight, 200, WA_SuperBitMap, SuperBitMapBitmap, TAG_DONE))) return(3L); InitTempArea(); SuperBitMapWnd->RPort->TmpRas=&Temprast; SuperBitMapWnd->RPort->AreaInfo=&areaInfo; DrawSuperBitMapObjs(); DrawImage(SuperBitMapWnd->RPort, &VALogo1Image, 68, 31 + kWindowOffSetY); SuperBitMapdoNewSize(); GT_RefreshWindow(SuperBitMapWnd, NULL); RefreshGadgets(SuperBitMapGadgets[0], SuperBitMapWnd, NULL); return(0L); } void CloseSuperBitMapWindow(void) { if (SuperBitMapWnd) CloseWindow(SuperBitMapWnd); if (SuperBitMapGList) FreeGadgets(SuperBitMapGList); if (SuperBitMapBitmap) SuperBitMapFreeBitmap(); DisposeObject(SuperBitMapHorizGadget); DisposeObject(SuperBitMapVertGadget); DisposeObject(SuperBitMapLeftGadget); DisposeObject(SuperBitMapRightGadget); DisposeObject(SuperBitMapUpGadget); DisposeObject(SuperBitMapDownGadget); DisposeObject(SuperBitMapSizeImage); DisposeObject(SuperBitMapLeftImage); DisposeObject(SuperBitMapRightImage); DisposeObject(SuperBitMapUpImage); DisposeObject(SuperBitMapDownImage); } int SuperBitMapHandler(void) { struct IntuiMessage *msg; struct TagItem *TagList = NULL; ULONG temp=0, dx=0, dy=0; struct VAobject VAObject; int running = 1; int (*func)(struct VAobject VAObject); ULONG class; UWORD code; while (msg=GT_GetIMsg(SuperBitMapWnd->UserPort)) { CopyMem((char *)msg, (char *)&SuperBitMapMsg, (long)sizeof(struct IntuiMessage)); TagList = (struct TagItem *)msg->IAddress; class = msg->Class; code = msg->Code; VAObject.va_Window = (struct Window *)SuperBitMapWnd; VAObject.va_Gadget = (struct Gadget *)msg->IAddress; VAObject.va_IntuiMsg = (struct IntuiMessage *)msg; VAObject.va_Flags = 0; VAObject.va_UserData = 0; GT_ReplyIMsg(msg); switch(class) { case IDCMP_NEWSIZE: SuperBitMapdoNewSize(); break; case IDCMP_IDCMPUPDATE: switch(GetTagData(GA_ID, 0, TagList)) { case ID_SuperBitMapHoriz: temp = SuperBitMapMaxX - SuperBitMapWnd->GZZWidth; temp = temp * ((struct PropInfo *)SuperBitMapHorizGadget->SpecialInfo)->HorizPot; temp = temp / MAX_LEVEL; dx = temp - LAYERXOFFSET(SuperBitMapWnd); if (dx) SuperBitMapScrollBitmap(dx, 0); break; case ID_SuperBitMapVert: temp = SuperBitMapMaxY - SuperBitMapWnd->GZZHeight; temp = temp * ((struct PropInfo *)SuperBitMapVertGadget->SpecialInfo)->VertPot; temp = temp / MAX_LEVEL; dy = temp - LAYERYOFFSET(SuperBitMapWnd); if (dy) SuperBitMapScrollBitmap(0, dy); break; case ID_SuperBitMapLeft: if (LAYERXOFFSET(SuperBitMapWnd) > 4) { SuperBitMapScrollBitmap(-5, 0); NewModifyProp(SuperBitMapHorizGadget, SuperBitMapWnd, NULL, AUTOKNOB | FREEHORIZ, (MAX_LEVEL * LAYERXOFFSET(SuperBitMapWnd)) / (SuperBitMapMaxX - SuperBitMapWnd->GZZWidth), NULL, (MAX_LEVEL * SuperBitMapWnd->GZZWidth) / SuperBitMapMaxX, MAX_LEVEL, 1); } break; case ID_SuperBitMapRight: if ((SuperBitMapWnd->GZZWidth + LAYERXOFFSET(SuperBitMapWnd)) < SuperBitMapMaxX - 6) { SuperBitMapScrollBitmap(5, 0); NewModifyProp(SuperBitMapHorizGadget, SuperBitMapWnd, NULL, AUTOKNOB | FREEHORIZ, (MAX_LEVEL * LAYERXOFFSET(SuperBitMapWnd)) / (SuperBitMapMaxX - SuperBitMapWnd->GZZWidth), NULL, (MAX_LEVEL * SuperBitMapWnd->GZZWidth) / SuperBitMapMaxX, MAX_LEVEL, 1); } break; case ID_SuperBitMapUp: if (LAYERYOFFSET(SuperBitMapWnd) > 2) { SuperBitMapScrollBitmap(0, -3); NewModifyProp(SuperBitMapVertGadget, SuperBitMapWnd, NULL, AUTOKNOB | FREEVERT, NULL, (MAX_LEVEL * LAYERYOFFSET(SuperBitMapWnd)) / (SuperBitMapMaxY - SuperBitMapWnd->GZZHeight), MAX_LEVEL, (MAX_LEVEL * SuperBitMapWnd->GZZHeight) / SuperBitMapMaxY, 1); } break; case ID_SuperBitMapDown: if ((SuperBitMapWnd->GZZHeight + LAYERYOFFSET(SuperBitMapWnd)) < SuperBitMapMaxY - 3) { SuperBitMapScrollBitmap(0, 3); NewModifyProp(SuperBitMapVertGadget, SuperBitMapWnd, NULL, AUTOKNOB | FREEVERT, NULL, (MAX_LEVEL * LAYERYOFFSET(SuperBitMapWnd)) / (SuperBitMapMaxY - SuperBitMapWnd->GZZHeight), MAX_LEVEL, (MAX_LEVEL * SuperBitMapWnd->GZZHeight) / SuperBitMapMaxY, 1); } break; } break; case IDCMP_CLOSEWINDOW: return(0); break; case IDCMP_GADGETUP: func = (void *)((struct Gadget *)SuperBitMapMsg.IAddress)->UserData; if (func != NULL) running = func(VAObject); break; } } return(running); } void DrawSuperBitMapObjs(void) { SuperBitMapDrawRects(SuperBitMapWnd); SuperBitMapDrawCircles(SuperBitMapWnd); SuperBitMapDrawLine(SuperBitMapWnd); } int SuperBitMapMainHandler(void) { int running = 1; ULONG windsig, signals; windsig = 1L << SuperBitMapWnd->UserPort->mp_SigBit; while (running == 1) { signals = Wait( windsig ); if (signals & windsig) { running = SuperBitMapHandler(); } } return(running); } int main(int argc, char *argv[]) { int rc; if (!(GetPubScreen())) { if (!(OpenSuperBitMapWindow("SuperBitMap Demo"))) { rc = SuperBitMapMainHandler(); CloseSuperBitMapWindow(); } ClosePubScreen(); } return(0L); } void SuperBitMapdoNewSize(void) { ULONG temp; temp = LAYERXOFFSET(SuperBitMapWnd) + SuperBitMapWnd->GZZWidth; if (temp >= SuperBitMapMaxX) SuperBitMapScrollBitmap(SuperBitMapMaxX - temp, 0); NewModifyProp(SuperBitMapHorizGadget, SuperBitMapWnd, NULL, AUTOKNOB | FREEHORIZ, (MAX_LEVEL * LAYERXOFFSET(SuperBitMapWnd)) / (SuperBitMapMaxX - SuperBitMapWnd->GZZWidth), NULL, (MAX_LEVEL * SuperBitMapWnd->GZZWidth) / SuperBitMapMaxX, MAX_LEVEL, 1); temp = LAYERYOFFSET(SuperBitMapWnd) + SuperBitMapWnd->GZZHeight; if (temp >= SuperBitMapMaxY) SuperBitMapScrollBitmap(0, SuperBitMapMaxY - temp); NewModifyProp(SuperBitMapVertGadget, SuperBitMapWnd, NULL, AUTOKNOB | FREEVERT, NULL, (MAX_LEVEL * LAYERYOFFSET(SuperBitMapWnd)) / (SuperBitMapMaxY - SuperBitMapWnd->GZZHeight), MAX_LEVEL, (MAX_LEVEL * SuperBitMapWnd->GZZHeight) / SuperBitMapMaxY, 1); } void SuperBitMapFreeBitmap(void) { short x; for (x=0; x < SuperBitMapDepth; x++) { if (SuperBitMapBitmap->Planes[x] != NULL) FreeRaster(SuperBitMapBitmap->Planes[x], SuperBitMapMaxX, SuperBitMapMaxY); } FreeMem(SuperBitMapBitmap, sizeof(struct BitMap)); SuperBitMapBitmap = NULL; } void SuperBitMapInitNewBitmap(void) { short x; if (SuperBitMapBitmap = AllocMem(sizeof(struct BitMap), MEMF_PUBLIC | MEMF_CLEAR)) { InitBitMap(SuperBitMapBitmap, SuperBitMapDepth, SuperBitMapMaxX, SuperBitMapMaxY); for (x=0; x < SuperBitMapDepth; x++) { if ((SuperBitMapBitmap->Planes[x] = AllocRaster(SuperBitMapMaxX, SuperBitMapMaxY)) == NULL) return; BltClear(SuperBitMapBitmap->Planes[x], RASSIZE(SuperBitMapMaxX, SuperBitMapMaxY), 0); } } } void SuperBitMapScrollBitmap(ULONG x, ULONG y) { ScrollLayer(0, SuperBitMapWnd->RPort->Layer, x ,y); WaitTOF(); }