diff options
-rw-r--r-- | Picture.c | 145 |
1 files changed, 66 insertions, 79 deletions
@@ -7,7 +7,7 @@ #include <graphics/gfxbase.h> #include "Bobi.h" -#define MAX(a,b) ((a)>(b)?(a):(b)) + extern struct Screen *mainscreen; extern struct Screen *picturescreen; @@ -21,11 +21,9 @@ extern char PicName[]; extern BYTE arexxflag; extern char arexxfilename[]; -static struct RastPort *picturerastport; - /**************************************************************************** -** Ein IFF-Bild von Disk laden +** Ein IFF-Bild von Disk laden und auf Screen anzeigen */ void LoadPicFunc() @@ -48,104 +46,100 @@ void LoadPicFunc() if(ifffile = IFFL_OpenIFF(name, IFFL_MODE_READ)) { formptr = ifffile; - if(formptr[2]==ID_ANIM) formptr+=3; + if(formptr[2]==ID_ANIM) /* ANIMs enthalten ein FORM ILBM nach dem FORM ANIM */ + formptr+=3; if(bmhd = IFFL_GetBMHD(formptr)) { - CloseScreenFunc(); - if(picturerastport = CreateRastPort(bmhd->nPlanes, - MAX(bmhd->w,GfxBase->NormalDisplayColumns>>1), - MAX(bmhd->h,GfxBase->NormalDisplayRows))) + static struct TagItem mytagitems[] = { - static struct TagItem mytagitems[] = - { - SA_Overscan,OSCAN_TEXT, - SA_AutoScroll,TRUE, - }; - struct ExtNewScreen ns; - struct NewWindow nw; + SA_Overscan,OSCAN_TEXT, + SA_AutoScroll,TRUE, + }; + struct ExtNewScreen ns; + struct NewWindow nw; - ClearMem(&ns,sizeof(ns)); - ClearMem(&nw,sizeof(nw)); + ClearMem(&ns,sizeof(ns)); + ClearMem(&nw,sizeof(nw)); - if(OSVERSION(37)) - { - ns.Width = bmhd->w; - ns.Height = bmhd->h; - } - else - { - ns.Width = GfxBase->NormalDisplayColumns>>1; - ns.Height = GfxBase->NormalDisplayRows; - } - ns.Depth = bmhd->nPlanes; - // ns.Depth = (bmhd->nPlanes > 5) ? bmhd->nPlanes:5; - ns.ViewModes = IFFL_GetViewModes(formptr); - ns.CustomBitMap = picturerastport->BitMap; - ns.Type = CUSTOMSCREEN|CUSTOMBITMAP|SCREENQUIET|SCREENBEHIND|NS_EXTENDED; - ns.Extension = mytagitems; - - nw.IDCMPFlags = IDCMP_MOUSEBUTTONS | IDCMP_MOUSEMOVE | IDCMP_DELTAMOVE; - nw.Flags = WFLG_BACKDROP | WFLG_BORDERLESS - | WFLG_SIMPLE_REFRESH | WFLG_NOCAREREFRESH - | WFLG_REPORTMOUSE | WFLG_RMBTRAP; - nw.Type = CUSTOMSCREEN; - - if(picturescreen = OpenScreen(&ns)) + if(OSVERSION(37)) + { + ns.Width = bmhd->w; + ns.Height = bmhd->h; + } + else + { + ns.Width = GfxBase->NormalDisplayColumns>>1; + ns.Height = GfxBase->NormalDisplayRows; + } + ns.Depth = bmhd->nPlanes; + ns.ViewModes = IFFL_GetViewModes(formptr); + ns.Type = CUSTOMSCREEN|SCREENQUIET|SCREENBEHIND|NS_EXTENDED; + ns.Extension = mytagitems; + nw.IDCMPFlags = IDCMP_MOUSEBUTTONS | IDCMP_MOUSEMOVE | IDCMP_DELTAMOVE; + nw.Flags = WFLG_BACKDROP | WFLG_BORDERLESS + | WFLG_SIMPLE_REFRESH | WFLG_NOCAREREFRESH + | WFLG_REPORTMOUSE | WFLG_RMBTRAP; + nw.Type = CUSTOMSCREEN; + + CloseScreenFunc(); + + if(picturescreen = OpenScreen(&ns)) + { + nw.Screen = picturescreen; + nw.Width = picturescreen->Width; + nw.Height = picturescreen->Height; + if(picturewindow = OpenWindow(&nw)) { - nw.Screen = picturescreen; - nw.Width = picturescreen->Width; - nw.Height = picturescreen->Height; - if(picturewindow = OpenWindow(&nw)) + ShowTitle(picturescreen,FALSE); + count = IFFL_GetColorTab(formptr,(WORD *)picturepalette); + if(count>32) + count = 32; + CopyMem(picturepalette,mainpalette,count*2); + LoadRGB4(&picturescreen->ViewPort,picturepalette,count); + WaitBlit(); /* sonst ist der obere Teil des Bildes manchmal kaputt ?! */ + + if(IFFL_DecodePic(formptr,&(picturescreen->BitMap))) { - ShowTitle(picturescreen,FALSE); - count = IFFL_GetColorTab(formptr,(WORD *)picturepalette); - if(count>32) count = 32; - CopyMem(picturepalette,mainpalette,count*2); - LoadRGB4(&picturescreen->ViewPort,picturepalette,count); - - if(IFFL_DecodePic(formptr,&(picturescreen->BitMap))) + if(!arexxflag) { - if(!arexxflag) - { - ScreenToFront(picturescreen); - MoveScreen(mainscreen,0,-255); - MoveScreen(mainscreen,0,255); - Delay(15); - ScreenToFront(mainscreen); - for(count=28; count>0; --count) - MoveScreen(mainscreen,0,-10); - } - } - else - { - CloseScreenFunc(); - ShowIFFError("Error decoding picture"); + ScreenToFront(picturescreen); + MoveScreen(mainscreen,0,-255); + MoveScreen(mainscreen,0,255); + Delay(15); + ScreenToFront(mainscreen); + for(count=28; count>0; --count) + MoveScreen(mainscreen,0,-10); } } else { CloseScreenFunc(); - ShowMonoReq2("Can't open window!"); + ShowIFFError("Error decoding picture"); } } else { CloseScreenFunc(); - ShowMonoReq2("Can't open screen!"); + ShowMonoReq2("Can't open window!"); } } - else ShowMonoReq2("No mem for rastport!"); + else + { + CloseScreenFunc(); + ShowMonoReq2("Can't open screen!"); + } } else ShowIFFError("Mangled IFF picture"); IFFL_CloseIFF(ifffile); } else ShowIFFError(name); + } - } /* if(FileRequest()) */ UnLockWindows(); } + /**************************************************************************** ** Picture-Screen schliessen und Bild freigeben */ @@ -163,12 +157,5 @@ void CloseScreenFunc() CloseScreen(picturescreen); picturescreen = 0; } - - if(picturerastport) - { - DeleteRastPort(picturerastport); - picturerastport = 0; - } - } |