Mercurial > sdl-ios-xcode
diff src/video/cybergfx/SDL_cgxvideo.c @ 1895:c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 10 Jul 2006 21:04:37 +0000 |
parents | 8d9bb0cf2c2a |
children |
line wrap: on
line diff
--- a/src/video/cybergfx/SDL_cgxvideo.c Thu Jul 06 18:01:37 2006 +0000 +++ b/src/video/cybergfx/SDL_cgxvideo.c Mon Jul 10 21:04:37 2006 +0000 @@ -43,1333 +43,1402 @@ #include "SDL_cgximage_c.h" /* Initialization/Query functions */ -static int CGX_VideoInit(_THIS, SDL_PixelFormat *vformat); -static SDL_Surface *CGX_SetVideoMode(_THIS, SDL_Surface *current, int width, int height, int bpp, Uint32 flags); +static int CGX_VideoInit(_THIS, SDL_PixelFormat * vformat); +static SDL_Surface *CGX_SetVideoMode(_THIS, SDL_Surface * current, int width, + int height, int bpp, Uint32 flags); static int CGX_ToggleFullScreen(_THIS, int on); static void CGX_UpdateMouse(_THIS); -static int CGX_SetColors(_THIS, int firstcolor, int ncolors, SDL_Color *colors); +static int CGX_SetColors(_THIS, int firstcolor, int ncolors, + SDL_Color * colors); static void CGX_VideoQuit(_THIS); /* CGX driver bootstrap functions */ -struct Library *CyberGfxBase=NULL; -struct IntuitionBase *IntuitionBase=NULL; -struct GfxBase *GfxBase=NULL; +struct Library *CyberGfxBase = NULL; +struct IntuitionBase *IntuitionBase = NULL; +struct GfxBase *GfxBase = NULL; -int CGX_SetGamma(_THIS, float red, float green, float blue) +int +CGX_SetGamma(_THIS, float red, float green, float blue) { SDL_SetError("Gamma correction not supported"); return -1; } -int CGX_GetGamma(_THIS, float red, float green, float blue) +int +CGX_GetGamma(_THIS, float red, float green, float blue) { SDL_SetError("Gamma correction not supported"); return -1; } -int CGX_SetGammaRamp(_THIS, Uint16 *ramp) +int +CGX_SetGammaRamp(_THIS, Uint16 * ramp) { #if 0 - Int i, ncolors; - XColor xcmap[256]; + Int i, ncolors; + XColor xcmap[256]; - /* See if actually setting the gamma is supported */ - if ( SDL_Visual->class != DirectColor ) { - SDL_SetError("Gamma correction not supported on this visual"); - return(-1); - } + /* See if actually setting the gamma is supported */ + if (SDL_Visual->class != DirectColor) { + SDL_SetError("Gamma correction not supported on this visual"); + return (-1); + } - /* Calculate the appropriate palette for the given gamma ramp */ - ncolors = SDL_Visual->map_entries; - for ( i=0; i<ncolors; ++i ) { - Uint8 c = (256 * i / ncolors); - xcmap[i].pixel = SDL_MapRGB(this->screen->format, c, c, c); - xcmap[i].red = ramp[0*256+c]; - xcmap[i].green = ramp[1*256+c]; - xcmap[i].blue = ramp[2*256+c]; - xcmap[i].flags = (DoRed|DoGreen|DoBlue); - } - XStoreColors(GFX_Display, SDL_XColorMap, xcmap, ncolors); - XSync(GFX_Display, False); + /* Calculate the appropriate palette for the given gamma ramp */ + ncolors = SDL_Visual->map_entries; + for (i = 0; i < ncolors; ++i) { + Uint8 c = (256 * i / ncolors); + xcmap[i].pixel = SDL_MapRGB(this->screen->format, c, c, c); + xcmap[i].red = ramp[0 * 256 + c]; + xcmap[i].green = ramp[1 * 256 + c]; + xcmap[i].blue = ramp[2 * 256 + c]; + xcmap[i].flags = (DoRed | DoGreen | DoBlue); + } + XStoreColors(GFX_Display, SDL_XColorMap, xcmap, ncolors); + XSync(GFX_Display, False); - return(0); + return (0); #else SDL_SetError("Gamma correction not supported on this visual"); - return(-1); + return (-1); #endif } -static void DestroyScreen(_THIS) +static void +DestroyScreen(_THIS) { - if(currently_fullscreen) - { - if(this->hidden->dbuffer) - { - extern struct MsgPort *safeport,*dispport; + if (currently_fullscreen) { + if (this->hidden->dbuffer) { + extern struct MsgPort *safeport, *dispport; - this->hidden->dbuffer=0; + this->hidden->dbuffer = 0; - if(safeport) - { - while(GetMsg(safeport)!=NULL); - DeleteMsgPort(safeport); - } - if(dispport) - { - while(GetMsg(dispport)!=NULL); - DeleteMsgPort(dispport); - } + if (safeport) { + while (GetMsg(safeport) != NULL); + DeleteMsgPort(safeport); + } + if (dispport) { + while (GetMsg(dispport) != NULL); + DeleteMsgPort(dispport); + } - this->hidden->SB[0]->sb_DBufInfo->dbi_SafeMessage.mn_ReplyPort=this->hidden->SB[0]->sb_DBufInfo->dbi_DispMessage.mn_ReplyPort=NULL; - this->hidden->SB[1]->sb_DBufInfo->dbi_SafeMessage.mn_ReplyPort=this->hidden->SB[1]->sb_DBufInfo->dbi_DispMessage.mn_ReplyPort=NULL; + this->hidden->SB[0]->sb_DBufInfo->dbi_SafeMessage. + mn_ReplyPort = + this->hidden->SB[0]->sb_DBufInfo->dbi_DispMessage. + mn_ReplyPort = NULL; + this->hidden->SB[1]->sb_DBufInfo->dbi_SafeMessage. + mn_ReplyPort = + this->hidden->SB[1]->sb_DBufInfo->dbi_DispMessage. + mn_ReplyPort = NULL; - if(this->hidden->SB[1]) - FreeScreenBuffer(SDL_Display,this->hidden->SB[1]); - if(this->hidden->SB[0]) - FreeScreenBuffer(SDL_Display,this->hidden->SB[0]); + if (this->hidden->SB[1]) + FreeScreenBuffer(SDL_Display, this->hidden->SB[1]); + if (this->hidden->SB[0]) + FreeScreenBuffer(SDL_Display, this->hidden->SB[0]); - this->hidden->SB[0]=this->hidden->SB[1]=NULL; + this->hidden->SB[0] = this->hidden->SB[1] = NULL; - if(SDL_RastPort && SDL_RastPort != &SDL_Display->RastPort) - SDL_free(SDL_RastPort); + if (SDL_RastPort && SDL_RastPort != &SDL_Display->RastPort) + SDL_free(SDL_RastPort); - SDL_RastPort=NULL; - } - CloseScreen(GFX_Display); - currently_fullscreen=0; - } - else if(GFX_Display) - UnlockPubScreen(NULL,GFX_Display); + SDL_RastPort = NULL; + } + CloseScreen(GFX_Display); + currently_fullscreen = 0; + } else if (GFX_Display) + UnlockPubScreen(NULL, GFX_Display); - GFX_Display = NULL; + GFX_Display = NULL; } -static int CGX_Available(void) +static int +CGX_Available(void) { - struct Library *l; + struct Library *l; - l = OpenLibrary("cybergraphics.library",0L); + l = OpenLibrary("cybergraphics.library", 0L); - if ( l != NULL ) { - D(bug("CGX video device AVAILABLE\n")); - CloseLibrary(l); - } - D(else bug("**CGX video device UNAVAILABLE\n")); + if (l != NULL) { + D(bug("CGX video device AVAILABLE\n")); + CloseLibrary(l); + } + D( + else + bug("**CGX video device UNAVAILABLE\n")); - return(l != NULL); + return (l != NULL); } -static void CGX_DeleteDevice(SDL_VideoDevice *device) +static void +CGX_DeleteDevice(SDL_VideoDevice * device) { - if ( device ) { - if ( device->hidden ) { - SDL_free(device->hidden); - } - if ( device->gl_data ) { - SDL_free(device->gl_data); - } - SDL_free(device); - } + if (device) { + if (device->hidden) { + SDL_free(device->hidden); + } + if (device->gl_data) { + SDL_free(device->gl_data); + } + SDL_free(device); + } } -static SDL_VideoDevice *CGX_CreateDevice(int devindex) +static SDL_VideoDevice * +CGX_CreateDevice(int devindex) { - SDL_VideoDevice *device; + SDL_VideoDevice *device; - /* Initialize all variables that we clean on shutdown */ - device = (SDL_VideoDevice *)SDL_malloc(sizeof(SDL_VideoDevice)); - if ( device ) { - SDL_memset(device, 0, (sizeof *device)); - device->hidden = (struct SDL_PrivateVideoData *) - SDL_malloc((sizeof *device->hidden)); - device->gl_data = (struct SDL_PrivateGLData *) - SDL_malloc((sizeof *device->gl_data)); - } - if ( (device == NULL) || (device->hidden == NULL) || - (device->gl_data == NULL) ) { - D(bug("Unable to create video device!\n")); - SDL_OutOfMemory(); - CGX_DeleteDevice(device); - return(0); - } - SDL_memset(device->hidden, 0, sizeof(*device->hidden)); - SDL_memset(device->gl_data, 0, sizeof(*device->gl_data)); + /* Initialize all variables that we clean on shutdown */ + device = (SDL_VideoDevice *) SDL_malloc(sizeof(SDL_VideoDevice)); + if (device) { + SDL_memset(device, 0, (sizeof *device)); + device->hidden = (struct SDL_PrivateVideoData *) + SDL_malloc((sizeof *device->hidden)); + device->gl_data = (struct SDL_PrivateGLData *) + SDL_malloc((sizeof *device->gl_data)); + } + if ((device == NULL) || (device->hidden == NULL) || + (device->gl_data == NULL)) { + D(bug("Unable to create video device!\n")); + SDL_OutOfMemory(); + CGX_DeleteDevice(device); + return (0); + } + SDL_memset(device->hidden, 0, sizeof(*device->hidden)); + SDL_memset(device->gl_data, 0, sizeof(*device->gl_data)); - /* Set the driver flags */ - device->handles_any_size = 1; + /* Set the driver flags */ + device->handles_any_size = 1; - /* Set the function pointers */ - device->VideoInit = CGX_VideoInit; - device->ListModes = CGX_ListModes; - device->SetVideoMode = CGX_SetVideoMode; - device->ToggleFullScreen = CGX_ToggleFullScreen; - device->UpdateMouse = CGX_UpdateMouse; - device->SetColors = CGX_SetColors; - device->UpdateRects = NULL; - device->VideoQuit = CGX_VideoQuit; - device->AllocHWSurface = CGX_AllocHWSurface; - device->CheckHWBlit = CGX_CheckHWBlit; - device->FillHWRect = CGX_FillHWRect; - device->SetHWColorKey = CGX_SetHWColorKey; - device->SetHWAlpha = NULL; - device->LockHWSurface = CGX_LockHWSurface; - device->UnlockHWSurface = CGX_UnlockHWSurface; - device->FlipHWSurface = CGX_FlipHWSurface; - device->FreeHWSurface = CGX_FreeHWSurface; - device->SetGamma = CGX_SetGamma; - device->GetGamma = CGX_GetGamma; - device->SetGammaRamp = CGX_SetGammaRamp; - device->GetGammaRamp = NULL; + /* Set the function pointers */ + device->VideoInit = CGX_VideoInit; + device->ListModes = CGX_ListModes; + device->SetVideoMode = CGX_SetVideoMode; + device->ToggleFullScreen = CGX_ToggleFullScreen; + device->UpdateMouse = CGX_UpdateMouse; + device->SetColors = CGX_SetColors; + device->UpdateRects = NULL; + device->VideoQuit = CGX_VideoQuit; + device->AllocHWSurface = CGX_AllocHWSurface; + device->CheckHWBlit = CGX_CheckHWBlit; + device->FillHWRect = CGX_FillHWRect; + device->SetHWColorKey = CGX_SetHWColorKey; + device->SetHWAlpha = NULL; + device->LockHWSurface = CGX_LockHWSurface; + device->UnlockHWSurface = CGX_UnlockHWSurface; + device->FlipHWSurface = CGX_FlipHWSurface; + device->FreeHWSurface = CGX_FreeHWSurface; + device->SetGamma = CGX_SetGamma; + device->GetGamma = CGX_GetGamma; + device->SetGammaRamp = CGX_SetGammaRamp; + device->GetGammaRamp = NULL; #if SDL_VIDEO_OPENGL - device->GL_LoadLibrary = CGX_GL_LoadLibrary; - device->GL_GetProcAddress = CGX_GL_GetProcAddress; - device->GL_GetAttribute = CGX_GL_GetAttribute; - device->GL_MakeCurrent = CGX_GL_MakeCurrent; - device->GL_SwapBuffers = CGX_GL_SwapBuffers; + device->GL_LoadLibrary = CGX_GL_LoadLibrary; + device->GL_GetProcAddress = CGX_GL_GetProcAddress; + device->GL_GetAttribute = CGX_GL_GetAttribute; + device->GL_MakeCurrent = CGX_GL_MakeCurrent; + device->GL_SwapBuffers = CGX_GL_SwapBuffers; #endif - device->SetIcon = CGX_SetIcon; - device->SetCaption = CGX_SetCaption; - device->IconifyWindow = NULL; /* CGX_IconifyWindow; */ - device->GrabInput = NULL /* CGX_GrabInput*/; - device->GetWMInfo = CGX_GetWMInfo; - device->FreeWMCursor = amiga_FreeWMCursor; - device->CreateWMCursor = amiga_CreateWMCursor; - device->ShowWMCursor = amiga_ShowWMCursor; - device->WarpWMCursor = amiga_WarpWMCursor; - device->CheckMouseMode = amiga_CheckMouseMode; - device->InitOSKeymap = amiga_InitOSKeymap; - device->PumpEvents = amiga_PumpEvents; + device->SetIcon = CGX_SetIcon; + device->SetCaption = CGX_SetCaption; + device->IconifyWindow = NULL; /* CGX_IconifyWindow; */ + device->GrabInput = NULL /* CGX_GrabInput */ ; + device->GetWMInfo = CGX_GetWMInfo; + device->FreeWMCursor = amiga_FreeWMCursor; + device->CreateWMCursor = amiga_CreateWMCursor; + device->ShowWMCursor = amiga_ShowWMCursor; + device->WarpWMCursor = amiga_WarpWMCursor; + device->CheckMouseMode = amiga_CheckMouseMode; + device->InitOSKeymap = amiga_InitOSKeymap; + device->PumpEvents = amiga_PumpEvents; - device->free = CGX_DeleteDevice; + device->free = CGX_DeleteDevice; - return device; + return device; } VideoBootStrap CGX_bootstrap = { - "CGX", "AmigaOS CyberGraphics", CGX_Available, CGX_CreateDevice + "CGX", "AmigaOS CyberGraphics", CGX_Available, CGX_CreateDevice }; -Uint32 MakeBitMask(_THIS,int type,int format,int *bpp) +Uint32 +MakeBitMask(_THIS, int type, int format, int *bpp) { - D(if(type==0)bug("REAL pixel format: ")); + D(if (type == 0) bug("REAL pixel format: ")); - if(this->hidden->depth==*bpp) - { + if (this->hidden->depth == *bpp) { - switch(format) - { - case PIXFMT_LUT8: - D(if(type==0)bug("LUT8\n")); - return 0; - case PIXFMT_BGR15: - case PIXFMT_RGB15PC: - switch(type) - { - case 0: - D(bug("RGB15PC/BGR15\n")); - return 31; - case 1: - return 992; - case 2: - return 31744; - } - case PIXFMT_RGB15: - case PIXFMT_BGR15PC: - switch(type) - { - case 0: - D(bug("RGB15/BGR15PC\n")); - return 31744; - case 1: - return 992; - case 2: - return 31; - } - case PIXFMT_BGR16PC: - case PIXFMT_RGB16: - switch(type) - { - case 0: - D(bug("RGB16PC\n")); - return 63488; - case 1: - return 2016; - case 2: - return 31; - } - case PIXFMT_BGR16: - case PIXFMT_RGB16PC: - switch(type) - { - case 0: - D(bug("RGB16PC/BGR16\n")); - return 31; - case 1: - return 2016; - case 2: - return 63488; - } + switch (format) { + case PIXFMT_LUT8: + D(if (type == 0) bug("LUT8\n")); + return 0; + case PIXFMT_BGR15: + case PIXFMT_RGB15PC: + switch (type) { + case 0: + D(bug("RGB15PC/BGR15\n")); + return 31; + case 1: + return 992; + case 2: + return 31744; + } + case PIXFMT_RGB15: + case PIXFMT_BGR15PC: + switch (type) { + case 0: + D(bug("RGB15/BGR15PC\n")); + return 31744; + case 1: + return 992; + case 2: + return 31; + } + case PIXFMT_BGR16PC: + case PIXFMT_RGB16: + switch (type) { + case 0: + D(bug("RGB16PC\n")); + return 63488; + case 1: + return 2016; + case 2: + return 31; + } + case PIXFMT_BGR16: + case PIXFMT_RGB16PC: + switch (type) { + case 0: + D(bug("RGB16PC/BGR16\n")); + return 31; + case 1: + return 2016; + case 2: + return 63488; + } - case PIXFMT_RGB24: - switch(type) - { - case 0: - D(bug("RGB24/BGR24\n")); - return 0xff0000; - case 1: - return 0xff00; - case 2: - return 0xff; - } - case PIXFMT_BGR24: - switch(type) - { - case 0: - D(bug("BGR24\n")); - return 0xff; - case 1: - return 0xff00; - case 2: - return 0xff0000; - } - case PIXFMT_ARGB32: - switch(type) - { - case 0: - D(bug("ARGB32\n")); - return 0xff0000; - case 1: - return 0xff00; - case 2: - return 0xff; - } - case PIXFMT_BGRA32: - switch(type) - { - case 0: - D(bug("BGRA32\n")); - return 0xff00; - case 1: - return 0xff0000; - case 2: - return 0xff000000; - } - case PIXFMT_RGBA32: - switch(type) - { - case 0: - D(bug("RGBA32\n")); - return 0xff000000; - case 1: - return 0xff0000; - case 2: - return 0xff00; - } - default: - D(bug("Unknown pixel format! Default to 24bit\n")); - return (Uint32) (255<<(type*8)); - } - } - else - { - D(if(type==0)bug("DIFFERENT from screen.\nAllocated screen format: ")); + case PIXFMT_RGB24: + switch (type) { + case 0: + D(bug("RGB24/BGR24\n")); + return 0xff0000; + case 1: + return 0xff00; + case 2: + return 0xff; + } + case PIXFMT_BGR24: + switch (type) { + case 0: + D(bug("BGR24\n")); + return 0xff; + case 1: + return 0xff00; + case 2: + return 0xff0000; + } + case PIXFMT_ARGB32: + switch (type) { + case 0: + D(bug("ARGB32\n")); + return 0xff0000; + case 1: + return 0xff00; + case 2: + return 0xff; + } + case PIXFMT_BGRA32: + switch (type) { + case 0: + D(bug("BGRA32\n")); + return 0xff00; + case 1: + return 0xff0000; + case 2: + return 0xff000000; + } + case PIXFMT_RGBA32: + switch (type) { + case 0: + D(bug("RGBA32\n")); + return 0xff000000; + case 1: + return 0xff0000; + case 2: + return 0xff00; + } + default: + D(bug("Unknown pixel format! Default to 24bit\n")); + return (Uint32) (255 << (type * 8)); + } + } else { + D(if (type == 0) + bug("DIFFERENT from screen.\nAllocated screen format: ")); - switch(*bpp) - { - case 32: - D(if(type==0) bug("RGBA32\n")); - switch(type) - { - case 0: - return 0xff000000; - case 1: - return 0xff0000; - case 2: - return 0xff00; - } - break; - case 24: -use_truecolor: - switch(type) - { - case 0: - D(bug("RGB24\n")); - return 0xff0000; - case 1: - return 0xff00; - case 2: - return 0xff; - } - case 16: - case 15: - D(if(type==0) bug("Not supported, switching to 24bit!\n")); - *bpp=24; - goto use_truecolor; - break; - default: - D(if(type==0)bug("This is a chunky display\n")); + switch (*bpp) { + case 32: + D(if (type == 0) bug("RGBA32\n")); + switch (type) { + case 0: + return 0xff000000; + case 1: + return 0xff0000; + case 2: + return 0xff00; + } + break; + case 24: + use_truecolor: + switch (type) { + case 0: + D(bug("RGB24\n")); + return 0xff0000; + case 1: + return 0xff00; + case 2: + return 0xff; + } + case 16: + case 15: + D(if (type == 0) + bug("Not supported, switching to 24bit!\n")); + *bpp = 24; + goto use_truecolor; + break; + default: + D(if (type == 0) bug("This is a chunky display\n")); // For chunky display mask is always 0; - return 0; - } - } - return 0; + return 0; + } + } + return 0; } -static int CGX_VideoInit(_THIS, SDL_PixelFormat *vformat) +static int +CGX_VideoInit(_THIS, SDL_PixelFormat * vformat) { - int i; - struct Library *RTGBase; + int i; + struct Library *RTGBase; - D(bug("VideoInit... Opening libraries\n")); + D(bug("VideoInit... Opening libraries\n")); - if(!IntuitionBase) { - if( !(IntuitionBase=(struct IntuitionBase *)OpenLibrary("intuition.library",39L))) { - SDL_SetError("Couldn't open intuition V39+"); - return -1; - } - } + if (!IntuitionBase) { + if (! + (IntuitionBase = + (struct IntuitionBase *) OpenLibrary("intuition.library", + 39L))) { + SDL_SetError("Couldn't open intuition V39+"); + return -1; + } + } - if(!GfxBase) { - if( !(GfxBase=(struct GfxBase *)OpenLibrary("graphics.library",39L))) { - SDL_SetError("Couldn't open graphics V39+"); - return -1; - } - } + if (!GfxBase) { + if (! + (GfxBase = + (struct GfxBase *) OpenLibrary("graphics.library", 39L))) { + SDL_SetError("Couldn't open graphics V39+"); + return -1; + } + } - if(!CyberGfxBase) { - if( !(CyberGfxBase=OpenLibrary("cybergraphics.library",40L))) { - SDL_SetError("Couldn't open cybergraphics."); - return(-1); - } - } + if (!CyberGfxBase) { + if (!(CyberGfxBase = OpenLibrary("cybergraphics.library", 40L))) { + SDL_SetError("Couldn't open cybergraphics."); + return (-1); + } + } - if(RTGBase=OpenLibrary("libs:picasso96/rtg.library",0L)) { - extern int use_picasso96; + if (RTGBase = OpenLibrary("libs:picasso96/rtg.library", 0L)) { + extern int use_picasso96; - CloseLibrary(RTGBase); - use_picasso96=1; - } + CloseLibrary(RTGBase); + use_picasso96 = 1; + } - D(bug("Library intialized, locking screen...\n")); - - SDL_Display = LockPubScreen(NULL); + D(bug("Library intialized, locking screen...\n")); - if ( SDL_Display == NULL ) { - D(bug("Cannot lock display...\n")); - SDL_SetError("Couldn't lock the display"); - return(-1); - } - this->info.current_w = SDL_Display->Width; - this->info.current_h = SDL_Display->Height; + SDL_Display = LockPubScreen(NULL); - D(bug("Checking if we are using a CGX native display...\n")); + if (SDL_Display == NULL) { + D(bug("Cannot lock display...\n")); + SDL_SetError("Couldn't lock the display"); + return (-1); + } + this->info.current_w = SDL_Display->Width; + this->info.current_h = SDL_Display->Height; - if(!IsCyberModeID(GetVPModeID(&SDL_Display->ViewPort))) - { - Uint32 okid=BestCModeIDTags(CYBRBIDTG_NominalWidth,SDL_Display->Width, - CYBRBIDTG_NominalHeight,SDL_Display->Height, - CYBRBIDTG_Depth,8, - TAG_DONE); + D(bug("Checking if we are using a CGX native display...\n")); - D(bug("Default visual is not CGX native!\n")); + if (!IsCyberModeID(GetVPModeID(&SDL_Display->ViewPort))) { + Uint32 okid = + BestCModeIDTags(CYBRBIDTG_NominalWidth, SDL_Display->Width, + CYBRBIDTG_NominalHeight, SDL_Display->Height, + CYBRBIDTG_Depth, 8, + TAG_DONE); - UnlockPubScreen(NULL,SDL_Display); + D(bug("Default visual is not CGX native!\n")); - GFX_Display=NULL; + UnlockPubScreen(NULL, SDL_Display); + + GFX_Display = NULL; - if(okid!=INVALID_ID) - { - GFX_Display=OpenScreenTags(NULL, - SA_Width,SDL_Display->Width, - SA_Height,SDL_Display->Height, - SA_Depth,8,SA_Quiet,TRUE, - SA_ShowTitle,FALSE, - SA_DisplayID,okid, - TAG_DONE); - } + if (okid != INVALID_ID) { + GFX_Display = OpenScreenTags(NULL, + SA_Width, SDL_Display->Width, + SA_Height, SDL_Display->Height, + SA_Depth, 8, SA_Quiet, TRUE, + SA_ShowTitle, FALSE, + SA_DisplayID, okid, TAG_DONE); + } - if(!GFX_Display) - { - SDL_SetError("Unable to open a suited CGX display"); - return -1; - } - else SDL_Display=GFX_Display; + if (!GFX_Display) { + SDL_SetError("Unable to open a suited CGX display"); + return -1; + } else + SDL_Display = GFX_Display; - } - else GFX_Display = SDL_Display; + } else + GFX_Display = SDL_Display; - /* See whether or not we need to swap pixels */ + /* See whether or not we need to swap pixels */ - swap_pixels = 0; + swap_pixels = 0; // Non e' detto che sia cosi' pero', alcune schede potrebbero gestire i modi in modo differente - if ( SDL_BYTEORDER == SDL_LIL_ENDIAN ) { - swap_pixels = 1; - } + if (SDL_BYTEORDER == SDL_LIL_ENDIAN) { + swap_pixels = 1; + } - D(bug("Before GetVideoModes....\n")); + D(bug("Before GetVideoModes....\n")); - /* Get the available video modes */ - if(CGX_GetVideoModes(this) < 0) - return -1; + /* Get the available video modes */ + if (CGX_GetVideoModes(this) < 0) + return -1; - /* Determine the default screen depth: - Use the default visual (or at least one with the same depth) */ + /* Determine the default screen depth: + Use the default visual (or at least one with the same depth) */ - for(i = 0; i < this->hidden->nvisuals; i++) - if(this->hidden->visuals[i].depth == GetCyberMapAttr(SDL_Display->RastPort.BitMap,CYBRMATTR_DEPTH)) - break; - if(i == this->hidden->nvisuals) { - /* default visual was useless, take the deepest one instead */ - i = 0; - } - SDL_Visual = this->hidden->visuals[i].visual; + for (i = 0; i < this->hidden->nvisuals; i++) + if (this->hidden->visuals[i].depth == + GetCyberMapAttr(SDL_Display->RastPort.BitMap, CYBRMATTR_DEPTH)) + break; + if (i == this->hidden->nvisuals) { + /* default visual was useless, take the deepest one instead */ + i = 0; + } + SDL_Visual = this->hidden->visuals[i].visual; -// SDL_XColorMap = SDL_DisplayColormap; +// SDL_XColorMap = SDL_DisplayColormap; - this->hidden->depth = this->hidden->visuals[i].depth; - D(bug("Init: Setting screen depth to: %ld\n",this->hidden->depth)); - vformat->BitsPerPixel = this->hidden->visuals[i].depth; /* this->hidden->visuals[i].bpp; */ + this->hidden->depth = this->hidden->visuals[i].depth; + D(bug("Init: Setting screen depth to: %ld\n", this->hidden->depth)); + vformat->BitsPerPixel = this->hidden->visuals[i].depth; /* this->hidden->visuals[i].bpp; */ - { - int form; - APTR handle; - struct DisplayInfo info; + { + int form; + APTR handle; + struct DisplayInfo info; - if(!(handle=FindDisplayInfo(this->hidden->visuals[i].visual))) - { - D(bug("Unable to get visual info...\n")); - return -1; - } + if (!(handle = FindDisplayInfo(this->hidden->visuals[i].visual))) { + D(bug("Unable to get visual info...\n")); + return -1; + } - if(!GetDisplayInfoData(handle,(char *)&info,sizeof(struct DisplayInfo),DTAG_DISP,NULL)) { - D(bug("Unable to get visual info data...\n")); - return -1; - } + if (!GetDisplayInfoData + (handle, (char *) &info, sizeof(struct DisplayInfo), DTAG_DISP, + NULL)) { + D(bug("Unable to get visual info data...\n")); + return -1; + } - form=GetCyberIDAttr(CYBRIDATTR_PIXFMT,SDL_Visual); + form = GetCyberIDAttr(CYBRIDATTR_PIXFMT, SDL_Visual); // In this case I use makebitmask in a way that I'm sure I'll get PIXFMT pixel mask - if ( vformat->BitsPerPixel > 8 ) - { - vformat->Rmask = MakeBitMask(this,0,form,&this->hidden->depth); - vformat->Gmask = MakeBitMask(this,1,form,&this->hidden->depth); - vformat->Bmask = MakeBitMask(this,2,form,&this->hidden->depth); - } - } + if (vformat->BitsPerPixel > 8) { + vformat->Rmask = MakeBitMask(this, 0, form, &this->hidden->depth); + vformat->Gmask = MakeBitMask(this, 1, form, &this->hidden->depth); + vformat->Bmask = MakeBitMask(this, 2, form, &this->hidden->depth); + } + } - /* See if we have been passed a window to use */ + /* See if we have been passed a window to use */ /* SDL_windowid = SDL_getenv("SDL_WINDOWID"); */ - SDL_windowid=NULL; + SDL_windowid = NULL; - /* Create the blank cursor */ - SDL_BlankCursor = AllocMem(16,MEMF_CHIP|MEMF_CLEAR); + /* Create the blank cursor */ + SDL_BlankCursor = AllocMem(16, MEMF_CHIP | MEMF_CLEAR); - /* Fill in some window manager capabilities */ - this->info.wm_available = 1; - this->info.blit_hw = 1; - this->info.blit_hw_CC = 1; - this->info.blit_sw = 1; - this->info.blit_fill = 1; - this->info.video_mem=2000000; // Not always true but almost any Amiga card has this memory! + /* Fill in some window manager capabilities */ + this->info.wm_available = 1; + this->info.blit_hw = 1; + this->info.blit_hw_CC = 1; + this->info.blit_sw = 1; + this->info.blit_fill = 1; + this->info.video_mem = 2000000; // Not always true but almost any Amiga card has this memory! - this->hidden->same_format=0; - SDL_RastPort=&SDL_Display->RastPort; - /* We're done! */ - D(bug("End of CGX_VideoInit\n")); + this->hidden->same_format = 0; + SDL_RastPort = &SDL_Display->RastPort; + /* We're done! */ + D(bug("End of CGX_VideoInit\n")); - return(0); + return (0); } -void CGX_DestroyWindow(_THIS, SDL_Surface *screen) +void +CGX_DestroyWindow(_THIS, SDL_Surface * screen) { - D(bug("Destroy Window...\n")); + D(bug("Destroy Window...\n")); - if ( ! SDL_windowid ) { - /* Hide the managed window */ - int was_fullscreen=0; + if (!SDL_windowid) { + /* Hide the managed window */ + int was_fullscreen = 0; - /* Clean up OpenGL */ - if ( screen ) { - screen->flags &= ~(SDL_OPENGL|SDL_OPENGLBLIT); - } + /* Clean up OpenGL */ + if (screen) { + screen->flags &= ~SDL_INTERNALOPENGL; + } - if ( screen && (screen->flags & SDL_FULLSCREEN) ) { - was_fullscreen=1; - screen->flags &= ~SDL_FULLSCREEN; -// CGX_LeaveFullScreen(this); tolto x crash - } - - /* Destroy the output window */ - if ( SDL_Window ) { - CloseWindow(SDL_Window); - SDL_Window=NULL; - } + if (screen && (screen->flags & SDL_FULLSCREEN)) { + was_fullscreen = 1; + screen->flags &= ~SDL_FULLSCREEN; +// CGX_LeaveFullScreen(this); tolto x crash + } - /* Free the colormap entries */ - if ( SDL_XPixels ) { - int numcolors; - unsigned long pixel; + /* Destroy the output window */ + if (SDL_Window) { + CloseWindow(SDL_Window); + SDL_Window = NULL; + } - if(this->screen->format&&this->hidden->depth==8&&!was_fullscreen) - { - numcolors = 1<<this->screen->format->BitsPerPixel; + /* Free the colormap entries */ + if (SDL_XPixels) { + int numcolors; + unsigned long pixel; - if(numcolors>256) - numcolors=256; + if (this->screen->format && this->hidden->depth == 8 + && !was_fullscreen) { + numcolors = 1 << this->screen->format->BitsPerPixel; - if(!was_fullscreen&&this->hidden->depth==8) - { - for ( pixel=0; pixel<numcolors; pixel++ ) - { - if(SDL_XPixels[pixel]>=0) - ReleasePen(GFX_Display->ViewPort.ColorMap,SDL_XPixels[pixel]); - } - } - } - SDL_free(SDL_XPixels); - SDL_XPixels = NULL; - } - } + if (numcolors > 256) + numcolors = 256; + + if (!was_fullscreen && this->hidden->depth == 8) { + for (pixel = 0; pixel < numcolors; pixel++) { + if (SDL_XPixels[pixel] >= 0) + ReleasePen(GFX_Display->ViewPort. + ColorMap, SDL_XPixels[pixel]); + } + } + } + SDL_free(SDL_XPixels); + SDL_XPixels = NULL; + } + } } -static void CGX_SetSizeHints(_THIS, int w, int h, Uint32 flags) +static void +CGX_SetSizeHints(_THIS, int w, int h, Uint32 flags) { - if ( flags & SDL_RESIZABLE ) { - WindowLimits(SDL_Window, 32, 32,4096,4096); - } else { - WindowLimits(SDL_Window, w,h,w,h); - } - if ( flags & SDL_FULLSCREEN ) { - flags&=~SDL_RESIZABLE; - } else if ( SDL_getenv("SDL_VIDEO_CENTERED") ) { - int display_w, display_h; + if (flags & SDL_RESIZABLE) { + WindowLimits(SDL_Window, 32, 32, 4096, 4096); + } else { + WindowLimits(SDL_Window, w, h, w, h); + } + if (flags & SDL_FULLSCREEN) { + flags &= ~SDL_RESIZABLE; + } else if (SDL_getenv("SDL_VIDEO_CENTERED")) { + int display_w, display_h; - display_w = SDL_Display->Width; - display_h = SDL_Display->Height; - ChangeWindowBox(SDL_Window,(display_w - w - SDL_Window->BorderLeft-SDL_Window->BorderRight)/2, - (display_h - h - SDL_Window->BorderTop-SDL_Window->BorderBottom)/2, - w+SDL_Window->BorderLeft+SDL_Window->BorderRight, - h+SDL_Window->BorderTop+SDL_Window->BorderBottom); - } + display_w = SDL_Display->Width; + display_h = SDL_Display->Height; + ChangeWindowBox(SDL_Window, + (display_w - w - SDL_Window->BorderLeft - + SDL_Window->BorderRight) / 2, + (display_h - h - SDL_Window->BorderTop - + SDL_Window->BorderBottom) / 2, + w + SDL_Window->BorderLeft + + SDL_Window->BorderRight, + h + SDL_Window->BorderTop + SDL_Window->BorderBottom); + } } -int CGX_CreateWindow(_THIS, SDL_Surface *screen, - int w, int h, int bpp, Uint32 flags) +int +CGX_CreateWindow(_THIS, SDL_Surface * screen, + int w, int h, int bpp, Uint32 flags) { #if 0 - int i, depth; - Uint32 vis; + int i, depth; + Uint32 vis; #endif - D(bug("CGX_CreateWindow\n")); + D(bug("CGX_CreateWindow\n")); - /* If a window is already present, destroy it and start fresh */ - if ( SDL_Window ) { - CGX_DestroyWindow(this, screen); - } + /* If a window is already present, destroy it and start fresh */ + if (SDL_Window) { + CGX_DestroyWindow(this, screen); + } - /* See if we have been given a window id */ - if ( SDL_windowid ) { - SDL_Window = (struct Window *)atol(SDL_windowid); - } else { - SDL_Window = 0; - } + /* See if we have been given a window id */ + if (SDL_windowid) { + SDL_Window = (struct Window *) atol(SDL_windowid); + } else { + SDL_Window = 0; + } - /* find out which visual we are going to use */ + /* find out which visual we are going to use */ #if 0 /* questo l'ho spostato nell'apertura dello schermo, in quanto su Amiga le finestre hanno il pixel mode degli schermi. */ - /*if ( flags & SDL_OPENGL ) { - SDL_SetError("OpenGL not supported by the Amiga SDL!"); - return -1; - } - else {*/ - for ( i = 0; i < this->hidden->nvisuals; i++ ) { - if ( this->hidden->visuals[i].depth == bpp ) /* era .depth */ - break; - } - if ( i == this->hidden->nvisuals ) { - SDL_SetError("No matching visual for requested depth"); - return -1; /* should never happen */ - } - vis = this->hidden->visuals[i].visual; - depth = this->hidden->visuals[i].depth; -// } - SDL_Visual = vis; - this->hidden->depth = depth; - D(bug("Setting screen depth to: %ld\n",this->hidden->depth)); + /*if ( flags & SDL_INTERNALOPENGL ) { + SDL_SetError("OpenGL not supported by the Amiga SDL!"); + return -1; + } + else { */ + for (i = 0; i < this->hidden->nvisuals; i++) { + if (this->hidden->visuals[i].depth == bpp) /* era .depth */ + break; + } + if (i == this->hidden->nvisuals) { + SDL_SetError("No matching visual for requested depth"); + return -1; /* should never happen */ + } + vis = this->hidden->visuals[i].visual; + depth = this->hidden->visuals[i].depth; +// } + SDL_Visual = vis; + this->hidden->depth = depth; + D(bug("Setting screen depth to: %ld\n", this->hidden->depth)); #endif - /* Allocate the new pixel format for this video mode */ - { - Uint32 form; - APTR handle; - struct DisplayInfo info; + /* Allocate the new pixel format for this video mode */ + { + Uint32 form; + APTR handle; + struct DisplayInfo info; - if(!(handle=FindDisplayInfo(SDL_Visual))) - return -1; - - if(!GetDisplayInfoData(handle,(char *)&info,sizeof(struct DisplayInfo),DTAG_DISP,NULL)) - return -1; + if (!(handle = FindDisplayInfo(SDL_Visual))) + return -1; - form=GetCyberIDAttr(CYBRIDATTR_PIXFMT,SDL_Visual); + if (!GetDisplayInfoData + (handle, (char *) &info, sizeof(struct DisplayInfo), DTAG_DISP, + NULL)) + return -1; + + form = GetCyberIDAttr(CYBRIDATTR_PIXFMT, SDL_Visual); - if(flags&SDL_HWSURFACE) - { - if(bpp!=this->hidden->depth) - { - bpp=this->hidden->depth; - D(bug("Accel forces bpp to be equal (%ld)\n",bpp)); - } - } + if (flags & SDL_HWSURFACE) { + if (bpp != this->hidden->depth) { + bpp = this->hidden->depth; + D(bug("Accel forces bpp to be equal (%ld)\n", bpp)); + } + } - D(bug("BEFORE screen allocation: bpp:%ld (real:%ld)\n",bpp,this->hidden->depth)); + D(bug + ("BEFORE screen allocation: bpp:%ld (real:%ld)\n", bpp, + this->hidden->depth)); /* With this call if needed I'll revert the wanted bpp to a bpp best suited for the display, actually occurs only with requested format 15/16bit and display format != 15/16bit */ - if ( ! SDL_ReallocFormat(screen, bpp, - MakeBitMask(this,0,form,&bpp), MakeBitMask(this,1,form,&bpp), MakeBitMask(this,2,form,&bpp), 0) ) - return -1; + if (!SDL_ReallocFormat(screen, bpp, + MakeBitMask(this, 0, form, &bpp), + MakeBitMask(this, 1, form, &bpp), + MakeBitMask(this, 2, form, &bpp), 0)) + return -1; - D(bug("AFTER screen allocation: bpp:%ld (real:%ld)\n",bpp,this->hidden->depth)); + D(bug + ("AFTER screen allocation: bpp:%ld (real:%ld)\n", bpp, + this->hidden->depth)); - } + } - /* Create the appropriate colormap */ + /* Create the appropriate colormap */ /* if ( SDL_XColorMap != SDL_DisplayColormap ) { XFreeColormap(SDL_Display, SDL_XColorMap); } */ - if ( GetCyberMapAttr(SDL_Display->RastPort.BitMap,CYBRMATTR_PIXFMT)==PIXFMT_LUT8 || bpp==8 ) { - int ncolors,i; - D(bug("XPixels palette allocation...\n")); + if (GetCyberMapAttr(SDL_Display->RastPort.BitMap, CYBRMATTR_PIXFMT) == + PIXFMT_LUT8 || bpp == 8) { + int ncolors, i; + D(bug("XPixels palette allocation...\n")); - /* Allocate the pixel flags */ + /* Allocate the pixel flags */ - if(bpp==8) - ncolors=256; - else - ncolors = 1 << screen->format->BitsPerPixel; + if (bpp == 8) + ncolors = 256; + else + ncolors = 1 << screen->format->BitsPerPixel; - SDL_XPixels = (Sint32 *)SDL_malloc(ncolors * sizeof(Sint32)); + SDL_XPixels = (Sint32 *) SDL_malloc(ncolors * sizeof(Sint32)); - if(SDL_XPixels == NULL) { - SDL_OutOfMemory(); - return -1; - } + if (SDL_XPixels == NULL) { + SDL_OutOfMemory(); + return -1; + } - for(i=0;i<ncolors;i++) - SDL_XPixels[i]=-1; + for (i = 0; i < ncolors; i++) + SDL_XPixels[i] = -1; - /* always allocate a private colormap on non-default visuals */ - if(bpp==8) - flags |= SDL_HWPALETTE; + /* always allocate a private colormap on non-default visuals */ + if (bpp == 8) + flags |= SDL_HWPALETTE; - if ( flags & SDL_HWPALETTE ) - screen->flags |= SDL_HWPALETTE; - } + if (flags & SDL_HWPALETTE) + screen->flags |= SDL_HWPALETTE; + } - /* resize the (possibly new) window manager window */ + /* resize the (possibly new) window manager window */ - /* Create (or use) the X11 display window */ + /* Create (or use) the X11 display window */ - if ( !SDL_windowid ) { - if( flags & SDL_FULLSCREEN ) - { - SDL_Window = OpenWindowTags(NULL,WA_Width,w,WA_Height,h, - WA_Flags,WFLG_ACTIVATE|WFLG_RMBTRAP|WFLG_BORDERLESS|WFLG_BACKDROP|WFLG_REPORTMOUSE, - WA_IDCMP,IDCMP_RAWKEY|IDCMP_MOUSEBUTTONS|IDCMP_MOUSEMOVE, - WA_CustomScreen,(ULONG)SDL_Display, - TAG_DONE); + if (!SDL_windowid) { + if (flags & SDL_FULLSCREEN) { + SDL_Window = OpenWindowTags(NULL, WA_Width, w, WA_Height, h, + WA_Flags, + WFLG_ACTIVATE | WFLG_RMBTRAP | + WFLG_BORDERLESS | WFLG_BACKDROP | + WFLG_REPORTMOUSE, WA_IDCMP, + IDCMP_RAWKEY | IDCMP_MOUSEBUTTONS + | IDCMP_MOUSEMOVE, + WA_CustomScreen, + (ULONG) SDL_Display, TAG_DONE); - D(bug("Opening backdrop window %ldx%ld on display %lx!\n",w,h,SDL_Display)); - } - else - { - /* Create GimmeZeroZero window when OpenGL is used */ - unsigned long gzz = FALSE; - if( flags & SDL_OPENGL ) { - gzz = TRUE; - } + D(bug + ("Opening backdrop window %ldx%ld on display %lx!\n", w, h, + SDL_Display)); + } else { + /* Create GimmeZeroZero window when OpenGL is used */ + unsigned long gzz = FALSE; + if (flags & SDL_INTERNALOPENGL) { + gzz = TRUE; + } - SDL_Window = OpenWindowTags(NULL,WA_InnerWidth,w,WA_InnerHeight,h, - WA_Flags,WFLG_REPORTMOUSE|WFLG_ACTIVATE|WFLG_RMBTRAP | ((flags&SDL_NOFRAME) ? 0 : (WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_DRAGBAR | ((flags&SDL_RESIZABLE) ? WFLG_SIZEGADGET|WFLG_SIZEBBOTTOM : 0))), - WA_IDCMP,IDCMP_RAWKEY|IDCMP_CLOSEWINDOW|IDCMP_MOUSEBUTTONS|IDCMP_NEWSIZE|IDCMP_MOUSEMOVE, - WA_PubScreen,(ULONG)SDL_Display, - WA_GimmeZeroZero, gzz, - TAG_DONE); - D(bug("Opening WB window of size: %ldx%ld!\n",w,h)); - } - - if(!SDL_Window) - return -1; - } - - this->hidden->BytesPerPixel=GetCyberMapAttr(SDL_Window->RPort->BitMap,CYBRMATTR_BPPIX); + SDL_Window = + OpenWindowTags(NULL, WA_InnerWidth, w, WA_InnerHeight, h, + WA_Flags, + WFLG_REPORTMOUSE | WFLG_ACTIVATE | + WFLG_RMBTRAP | ((flags & SDL_NOFRAME) ? 0 + : (WFLG_DEPTHGADGET | + WFLG_CLOSEGADGET | + WFLG_DRAGBAR | + ((flags & + SDL_RESIZABLE) ? + WFLG_SIZEGADGET | + WFLG_SIZEBBOTTOM : + 0))), WA_IDCMP, + IDCMP_RAWKEY | IDCMP_CLOSEWINDOW | + IDCMP_MOUSEBUTTONS | IDCMP_NEWSIZE | + IDCMP_MOUSEMOVE, WA_PubScreen, + (ULONG) SDL_Display, WA_GimmeZeroZero, + gzz, TAG_DONE); + D(bug("Opening WB window of size: %ldx%ld!\n", w, h)); + } - if(screen->flags & SDL_DOUBLEBUF) - { - if(SDL_RastPort=SDL_malloc(sizeof(struct RastPort))) - { - InitRastPort(SDL_RastPort); - SDL_RastPort->BitMap=this->hidden->SB[1]->sb_BitMap; - } - else - return -1; - } - else SDL_RastPort=SDL_Window->RPort; + if (!SDL_Window) + return -1; + } + + this->hidden->BytesPerPixel = + GetCyberMapAttr(SDL_Window->RPort->BitMap, CYBRMATTR_BPPIX); - if(flags&SDL_HWSURFACE) - screen->flags|=SDL_HWSURFACE; + if (screen->flags & SDL_DOUBLEBUF) { + if (SDL_RastPort = SDL_malloc(sizeof(struct RastPort))) { + InitRastPort(SDL_RastPort); + SDL_RastPort->BitMap = this->hidden->SB[1]->sb_BitMap; + } else + return -1; + } else + SDL_RastPort = SDL_Window->RPort; - if( !SDL_windowid ) { - CGX_SetSizeHints(this, w, h, flags); - } + if (flags & SDL_HWSURFACE) + screen->flags |= SDL_HWSURFACE; - /* Set our colormaps when not setting a GL mode */ + if (!SDL_windowid) { + CGX_SetSizeHints(this, w, h, flags); + } + + /* Set our colormaps when not setting a GL mode */ /* - if ( ! (flags & SDL_OPENGL) ) { + if ( ! (flags & SDL_INTERNALOPENGL) ) { XSetWindowColormap(SDL_Display, SDL_Window, SDL_XColorMap); } */ - /* Map them both and go fullscreen, if requested */ - if ( ! SDL_windowid ) { - if ( flags & SDL_FULLSCREEN ) { - screen->flags |= SDL_FULLSCREEN; - currently_fullscreen=1; -// CGX_EnterFullScreen(this); Ci siamo gia'! - } else { - screen->flags &= ~SDL_FULLSCREEN; - } - } - screen->w = w; - screen->h = h; - screen->pitch = SDL_CalculatePitch(screen); - CGX_ResizeImage(this, screen, flags); + /* Map them both and go fullscreen, if requested */ + if (!SDL_windowid) { + if (flags & SDL_FULLSCREEN) { + screen->flags |= SDL_FULLSCREEN; + currently_fullscreen = 1; +// CGX_EnterFullScreen(this); Ci siamo gia'! + } else { + screen->flags &= ~SDL_FULLSCREEN; + } + } + screen->w = w; + screen->h = h; + screen->pitch = SDL_CalculatePitch(screen); + CGX_ResizeImage(this, screen, flags); - /* Make OpenGL Context if needed*/ - if(flags & SDL_OPENGL) { - if(this->gl_data->gl_active == 0) { - if(CGX_GL_Init(this) < 0) - return -1; - else - screen->flags |= SDL_OPENGL; - } - else { - if(CGX_GL_Update(this) < 0) - return -1; - else - screen->flags |= SDL_OPENGL; - } - } + /* Make OpenGL Context if needed */ + if (flags & SDL_INTERNALOPENGL) { + if (this->gl_data->gl_active == 0) { + if (CGX_GL_Init(this) < 0) + return -1; + else + screen->flags |= SDL_INTERNALOPENGL; + } else { + if (CGX_GL_Update(this) < 0) + return -1; + else + screen->flags |= SDL_INTERNALOPENGL; + } + } } -int CGX_ResizeWindow(_THIS, - SDL_Surface *screen, int w, int h, Uint32 flags) +int +CGX_ResizeWindow(_THIS, SDL_Surface * screen, int w, int h, Uint32 flags) { - D(bug("CGX_ResizeWindow\n")); + D(bug("CGX_ResizeWindow\n")); - if ( ! SDL_windowid ) { - /* Resize the window manager window */ - CGX_SetSizeHints(this, w, h, flags); + if (!SDL_windowid) { + /* Resize the window manager window */ + CGX_SetSizeHints(this, w, h, flags); - ChangeWindowBox(SDL_Window,SDL_Window->LeftEdge,SDL_Window->TopEdge, w+SDL_Window->BorderLeft+SDL_Window->BorderRight, - h+SDL_Window->BorderTop+SDL_Window->BorderBottom); + ChangeWindowBox(SDL_Window, SDL_Window->LeftEdge, + SDL_Window->TopEdge, + w + SDL_Window->BorderLeft + + SDL_Window->BorderRight, + h + SDL_Window->BorderTop + SDL_Window->BorderBottom); - screen->w = w; - screen->h = h; - screen->pitch = SDL_CalculatePitch(screen); - CGX_ResizeImage(this, screen, flags); - } - return(0); + screen->w = w; + screen->h = h; + screen->pitch = SDL_CalculatePitch(screen); + CGX_ResizeImage(this, screen, flags); + } + return (0); } -static SDL_Surface *CGX_SetVideoMode(_THIS, SDL_Surface *current, - int width, int height, int bpp, Uint32 flags) +static SDL_Surface * +CGX_SetVideoMode(_THIS, SDL_Surface * current, + int width, int height, int bpp, Uint32 flags) { - Uint32 saved_flags; - int needcreate=0; + Uint32 saved_flags; + int needcreate = 0; - D(bug("CGX_SetVideoMode current:%lx\n",current)); + D(bug("CGX_SetVideoMode current:%lx\n", current)); - /* Lock the event thread, in multi-threading environments */ - SDL_Lock_EventThread(); + /* Lock the event thread, in multi-threading environments */ + SDL_Lock_EventThread(); // Check if the window needs to be closed or can be resized - if( (flags&SDL_FULLSCREEN) || (current && current->flags&SDL_FULLSCREEN && !(flags&SDL_FULLSCREEN))) - needcreate=1; + if ((flags & SDL_FULLSCREEN) + || (current && current->flags & SDL_FULLSCREEN + && !(flags & SDL_FULLSCREEN))) + needcreate = 1; // Check if we need to close an already existing videomode... - if(current && current->flags&SDL_FULLSCREEN && !(flags&SDL_FULLSCREEN)) { - unsigned long i; - D(bug("Destroying image, window & screen!\n")); + if (current && current->flags & SDL_FULLSCREEN + && !(flags & SDL_FULLSCREEN)) { + unsigned long i; + D(bug("Destroying image, window & screen!\n")); - CGX_DestroyImage(this,current); - CGX_DestroyWindow(this,current); - DestroyScreen(this); - GFX_Display=SDL_Display=LockPubScreen(NULL); + CGX_DestroyImage(this, current); + CGX_DestroyWindow(this, current); + DestroyScreen(this); + GFX_Display = SDL_Display = LockPubScreen(NULL); - bpp=this->hidden->depth=GetCyberMapAttr(SDL_Display->RastPort.BitMap,CYBRMATTR_DEPTH); + bpp = this->hidden->depth = + GetCyberMapAttr(SDL_Display->RastPort.BitMap, CYBRMATTR_DEPTH); - for ( i = 0; i < this->hidden->nvisuals; i++ ) { - if ( this->hidden->visuals[i].depth == bpp ) /* era .depth */ - break; - } - if ( i == this->hidden->nvisuals ) { - SDL_SetError("No matching visual for requested depth"); - return NULL; /* should never happen */ - } - SDL_Visual = this->hidden->visuals[i].visual; + for (i = 0; i < this->hidden->nvisuals; i++) { + if (this->hidden->visuals[i].depth == bpp) /* era .depth */ + break; + } + if (i == this->hidden->nvisuals) { + SDL_SetError("No matching visual for requested depth"); + return NULL; /* should never happen */ + } + SDL_Visual = this->hidden->visuals[i].visual; - D(bug("Setting screen depth to: %ld\n",this->hidden->depth)); + D(bug("Setting screen depth to: %ld\n", this->hidden->depth)); - } - /* Check the combination of flags we were passed */ - if ( flags & SDL_FULLSCREEN ) { - int i; + } + /* Check the combination of flags we were passed */ + if (flags & SDL_FULLSCREEN) { + int i; - /* Clear fullscreen flag if not supported */ - if ( SDL_windowid ) { - flags &= ~SDL_FULLSCREEN; - } - else if(current && current->flags&SDL_FULLSCREEN ) { - if(current->w!=width || - current->h!=height || - (this->hidden && this->hidden->depth!=bpp)) - { - D(bug("Deleting previous window...\n")); - CGX_DestroyImage(this,current); - CGX_DestroyWindow(this,current); - DestroyScreen(this); - goto buildnewscreen; - } - } - else -buildnewscreen: - { - Uint32 okid=BestCModeIDTags(CYBRBIDTG_NominalWidth,width, - CYBRBIDTG_NominalHeight,height, - CYBRBIDTG_Depth,bpp, - TAG_DONE); + /* Clear fullscreen flag if not supported */ + if (SDL_windowid) { + flags &= ~SDL_FULLSCREEN; + } else if (current && current->flags & SDL_FULLSCREEN) { + if (current->w != width || + current->h != height || + (this->hidden && this->hidden->depth != bpp)) { + D(bug("Deleting previous window...\n")); + CGX_DestroyImage(this, current); + CGX_DestroyWindow(this, current); + DestroyScreen(this); + goto buildnewscreen; + } + } else + buildnewscreen: + { + Uint32 okid = BestCModeIDTags(CYBRBIDTG_NominalWidth, width, + CYBRBIDTG_NominalHeight, + height, + CYBRBIDTG_Depth, bpp, + TAG_DONE); - GFX_Display=NULL; + GFX_Display = NULL; + + D(bug("Opening screen...\n")); - D(bug("Opening screen...\n")); - - if(okid!=INVALID_ID) - GFX_Display=OpenScreenTags(NULL, - SA_Width,width, - SA_Height,height, - SA_Quiet,TRUE,SA_ShowTitle,FALSE, - SA_Depth,bpp, - SA_DisplayID,okid, - TAG_DONE); + if (okid != INVALID_ID) + GFX_Display = OpenScreenTags(NULL, + SA_Width, width, + SA_Height, height, + SA_Quiet, TRUE, + SA_ShowTitle, FALSE, + SA_Depth, bpp, SA_DisplayID, + okid, TAG_DONE); - if(!GFX_Display) { - GFX_Display=SDL_Display; - flags &= ~SDL_FULLSCREEN; - flags &= ~SDL_DOUBLEBUF; - } - else { - UnlockPubScreen(NULL,SDL_Display); - SDL_Display=GFX_Display; - - D(bug("Screen opened.\n")); + if (!GFX_Display) { + GFX_Display = SDL_Display; + flags &= ~SDL_FULLSCREEN; + flags &= ~SDL_DOUBLEBUF; + } else { + UnlockPubScreen(NULL, SDL_Display); + SDL_Display = GFX_Display; + + D(bug("Screen opened.\n")); - if(flags&SDL_DOUBLEBUF) { - int ok=0; - D(bug("Start of DBuffering allocations...\n")); + if (flags & SDL_DOUBLEBUF) { + int ok = 0; + D(bug("Start of DBuffering allocations...\n")); - if(this->hidden->SB[0]=AllocScreenBuffer(SDL_Display,NULL,SB_SCREEN_BITMAP)) { + if (this->hidden->SB[0] = + AllocScreenBuffer(SDL_Display, NULL, + SB_SCREEN_BITMAP)) { + + if (this->hidden->SB[1] = + AllocScreenBuffer(SDL_Display, NULL, 0L)) { + extern struct MsgPort *safeport, *dispport; - if(this->hidden->SB[1]=AllocScreenBuffer(SDL_Display,NULL,0L)) { - extern struct MsgPort *safeport,*dispport; - - safeport=CreateMsgPort(); - dispport=CreateMsgPort(); + safeport = CreateMsgPort(); + dispport = CreateMsgPort(); - if(!safeport || !dispport) { - if(safeport) { - DeleteMsgPort(safeport); - safeport=NULL; - } - if(dispport) { - DeleteMsgPort(dispport); - dispport=NULL; - } - FreeScreenBuffer(SDL_Display,this->hidden->SB[0]); - FreeScreenBuffer(SDL_Display,this->hidden->SB[1]); - } - else { - extern ULONG safe_sigbit,disp_sigbit; - int i; + if (!safeport || !dispport) { + if (safeport) { + DeleteMsgPort(safeport); + safeport = NULL; + } + if (dispport) { + DeleteMsgPort(dispport); + dispport = NULL; + } + FreeScreenBuffer(SDL_Display, + this->hidden->SB[0]); + FreeScreenBuffer(SDL_Display, + this->hidden->SB[1]); + } else { + extern ULONG safe_sigbit, disp_sigbit; + int i; - safe_sigbit=1L<< safeport->mp_SigBit; - disp_sigbit=1L<< dispport->mp_SigBit; + safe_sigbit = 1L << safeport->mp_SigBit; + disp_sigbit = 1L << dispport->mp_SigBit; - for(i=0;i<2;i++) { - this->hidden->SB[i]->sb_DBufInfo->dbi_SafeMessage.mn_ReplyPort=safeport; - this->hidden->SB[i]->sb_DBufInfo->dbi_DispMessage.mn_ReplyPort=dispport; - } + for (i = 0; i < 2; i++) { + this->hidden->SB[i]-> + sb_DBufInfo-> + dbi_SafeMessage. + mn_ReplyPort = safeport; + this->hidden->SB[i]-> + sb_DBufInfo-> + dbi_DispMessage. + mn_ReplyPort = dispport; + } - ok=1; - D(bug("Dbuffering enabled!\n")); - this->hidden->dbuffer=1; - current->flags|=SDL_DOUBLEBUF; - } - } - else { - FreeScreenBuffer(SDL_Display,this->hidden->SB[1]); - this->hidden->SB[0]=NULL; - } - } + ok = 1; + D(bug("Dbuffering enabled!\n")); + this->hidden->dbuffer = 1; + current->flags |= SDL_DOUBLEBUF; + } + } else { + FreeScreenBuffer(SDL_Display, + this->hidden->SB[1]); + this->hidden->SB[0] = NULL; + } + } - if(!ok) - flags&=~SDL_DOUBLEBUF; - } - } + if (!ok) + flags &= ~SDL_DOUBLEBUF; + } + } - if(GetCyberMapAttr(SDL_Display->RastPort.BitMap,CYBRMATTR_DEPTH)==bpp) - this->hidden->same_format=1; - } + if (GetCyberMapAttr + (SDL_Display->RastPort.BitMap, CYBRMATTR_DEPTH) == bpp) + this->hidden->same_format = 1; + } - bpp=this->hidden->depth=GetCyberMapAttr(SDL_Display->RastPort.BitMap,CYBRMATTR_DEPTH); - D(bug("Setting screen depth to: %ld\n",this->hidden->depth)); + bpp = this->hidden->depth = + GetCyberMapAttr(SDL_Display->RastPort.BitMap, CYBRMATTR_DEPTH); + D(bug("Setting screen depth to: %ld\n", this->hidden->depth)); - for ( i = 0; i < this->hidden->nvisuals; i++ ) - if ( this->hidden->visuals[i].depth == bpp ) /* era .depth */ - break; + for (i = 0; i < this->hidden->nvisuals; i++) + if (this->hidden->visuals[i].depth == bpp) /* era .depth */ + break; - if ( i == this->hidden->nvisuals ) { - SDL_SetError("No matching visual for requested depth"); - return NULL; /* should never happen */ - } - SDL_Visual = this->hidden->visuals[i].visual; + if (i == this->hidden->nvisuals) { + SDL_SetError("No matching visual for requested depth"); + return NULL; /* should never happen */ + } + SDL_Visual = this->hidden->visuals[i].visual; - } + } - /* Set up the X11 window */ - saved_flags = current->flags; + /* Set up the X11 window */ + saved_flags = current->flags; - if (SDL_Window && (saved_flags&SDL_OPENGL) == (flags&SDL_OPENGL) - && bpp == current->format->BitsPerPixel && !needcreate) { - if (CGX_ResizeWindow(this, current, width, height, flags) < 0) { - current = NULL; - goto done; - } - } else { - if (CGX_CreateWindow(this,current,width,height,bpp,flags) < 0) { - current = NULL; - goto done; - } - } + if (SDL_Window + && (saved_flags & SDL_INTERNALOPENGL) == (flags & SDL_INTERNALOPENGL) + && bpp == current->format->BitsPerPixel && !needcreate) { + if (CGX_ResizeWindow(this, current, width, height, flags) < 0) { + current = NULL; + goto done; + } + } else { + if (CGX_CreateWindow(this, current, width, height, bpp, flags) < 0) { + current = NULL; + goto done; + } + } #if 0 - /* Set up the new mode framebuffer */ - if ( ((current->w != width) || (current->h != height)) || - ((saved_flags&SDL_OPENGL) != (flags&SDL_OPENGL)) ) { - current->w = width; - current->h = height; - current->pitch = SDL_CalculatePitch(current); - CGX_ResizeImage(this, current, flags); - } + /* Set up the new mode framebuffer */ + if (((current->w != width) || (current->h != height)) || + ((saved_flags & SDL_INTERNALOPENGL) != (flags & SDL_INTERNALOPENGL))) + { + current->w = width; + current->h = height; + current->pitch = SDL_CalculatePitch(current); + CGX_ResizeImage(this, current, flags); + } #endif - current->flags |= (flags&SDL_RESIZABLE); // Resizable only if the user asked it + current->flags |= (flags & SDL_RESIZABLE); // Resizable only if the user asked it done: - /* Release the event thread */ - SDL_Unlock_EventThread(); + /* Release the event thread */ + SDL_Unlock_EventThread(); - /* We're done! */ - return(current); + /* We're done! */ + return (current); } -static int CGX_ToggleFullScreen(_THIS, int on) +static int +CGX_ToggleFullScreen(_THIS, int on) { - Uint32 event_thread; + Uint32 event_thread; - /* Don't switch if we don't own the window */ - if ( SDL_windowid ) { - return(0); - } + /* Don't switch if we don't own the window */ + if (SDL_windowid) { + return (0); + } - /* Don't lock if we are the event thread */ - event_thread = SDL_EventThreadID(); - if ( event_thread && (SDL_ThreadID() == event_thread) ) { - event_thread = 0; - } - if ( event_thread ) { - SDL_Lock_EventThread(); - } - if ( on ) { - this->screen->flags |= SDL_FULLSCREEN; - CGX_EnterFullScreen(this); - } else { - this->screen->flags &= ~SDL_FULLSCREEN; - CGX_LeaveFullScreen(this); - } + /* Don't lock if we are the event thread */ + event_thread = SDL_EventThreadID(); + if (event_thread && (SDL_ThreadID() == event_thread)) { + event_thread = 0; + } + if (event_thread) { + SDL_Lock_EventThread(); + } + if (on) { + this->screen->flags |= SDL_FULLSCREEN; + CGX_EnterFullScreen(this); + } else { + this->screen->flags &= ~SDL_FULLSCREEN; + CGX_LeaveFullScreen(this); + } - CGX_RefreshDisplay(this); - if ( event_thread ) { - SDL_Unlock_EventThread(); - } + CGX_RefreshDisplay(this); + if (event_thread) { + SDL_Unlock_EventThread(); + } - SDL_ResetKeyboard(); + SDL_ResetKeyboard(); - return(1); + return (1); } -static void SetSingleColor(Uint32 fmt, unsigned char r, unsigned char g, unsigned char b, unsigned char *c) +static void +SetSingleColor(Uint32 fmt, unsigned char r, unsigned char g, unsigned char b, + unsigned char *c) { - switch(fmt) - { - case PIXFMT_BGR15: - case PIXFMT_RGB15PC: - { - Uint16 *t=(Uint16 *)c; - *t=(r>>3) | ((g>>3)<<5) | ((b>>3)<<10) ; - } - break; - case PIXFMT_RGB15: - case PIXFMT_BGR15PC: - { - Uint16 *t=(Uint16 *)c; - *t=(b>>3) | ((g>>3)<<5) | ((r>>3)<<10) ; - } - break; - case PIXFMT_BGR16PC: - case PIXFMT_RGB16: - { - Uint16 *t=(Uint16 *)c; - *t=(b>>3) | ((g>>2)<<5) | ((r>>3)<<11) ; - } - break; - case PIXFMT_BGR16: - case PIXFMT_RGB16PC: - { - Uint16 *t=(Uint16 *)c; - *t=(r>>3) | ((g>>2)<<5) | ((b>>3)<<11) ; - } - break; - case PIXFMT_RGB24: - c[0]=r; - c[1]=g; - c[2]=b; - c[3]=0; - break; - case PIXFMT_BGR24: - c[0]=b; - c[1]=g; - c[2]=r; - c[3]=0; - break; - case PIXFMT_ARGB32: - c[0]=0; - c[1]=r; - c[2]=g; - c[3]=b; - break; - case PIXFMT_BGRA32: - c[0]=b; - c[1]=g; - c[2]=r; - c[3]=0; - break; - case PIXFMT_RGBA32: - c[0]=r; - c[1]=g; - c[2]=b; - c[3]=0; - break; + switch (fmt) { + case PIXFMT_BGR15: + case PIXFMT_RGB15PC: + { + Uint16 *t = (Uint16 *) c; + *t = (r >> 3) | ((g >> 3) << 5) | ((b >> 3) << 10); + } + break; + case PIXFMT_RGB15: + case PIXFMT_BGR15PC: + { + Uint16 *t = (Uint16 *) c; + *t = (b >> 3) | ((g >> 3) << 5) | ((r >> 3) << 10); + } + break; + case PIXFMT_BGR16PC: + case PIXFMT_RGB16: + { + Uint16 *t = (Uint16 *) c; + *t = (b >> 3) | ((g >> 2) << 5) | ((r >> 3) << 11); + } + break; + case PIXFMT_BGR16: + case PIXFMT_RGB16PC: + { + Uint16 *t = (Uint16 *) c; + *t = (r >> 3) | ((g >> 2) << 5) | ((b >> 3) << 11); + } + break; + case PIXFMT_RGB24: + c[0] = r; + c[1] = g; + c[2] = b; + c[3] = 0; + break; + case PIXFMT_BGR24: + c[0] = b; + c[1] = g; + c[2] = r; + c[3] = 0; + break; + case PIXFMT_ARGB32: + c[0] = 0; + c[1] = r; + c[2] = g; + c[3] = b; + break; + case PIXFMT_BGRA32: + c[0] = b; + c[1] = g; + c[2] = r; + c[3] = 0; + break; + case PIXFMT_RGBA32: + c[0] = r; + c[1] = g; + c[2] = b; + c[3] = 0; + break; - default: - D(bug("Error, SetSingleColor with PIXFMT %ld!\n",fmt)); - } + default: + D(bug("Error, SetSingleColor with PIXFMT %ld!\n", fmt)); + } } /* Update the current mouse state and position */ -static void CGX_UpdateMouse(_THIS) +static void +CGX_UpdateMouse(_THIS) { - /* Lock the event thread, in multi-threading environments */ - SDL_Lock_EventThread(); + /* Lock the event thread, in multi-threading environments */ + SDL_Lock_EventThread(); - if(currently_fullscreen) - { - SDL_PrivateAppActive(1, SDL_APPMOUSEFOCUS); - SDL_PrivateMouseMotion(0, 0, SDL_Display->MouseX, SDL_Display->MouseY); - } - else - { - if( SDL_Display->MouseX>=(SDL_Window->LeftEdge+SDL_Window->BorderLeft) && SDL_Display->MouseX<(SDL_Window->LeftEdge+SDL_Window->Width-SDL_Window->BorderRight) && - SDL_Display->MouseY>=(SDL_Window->TopEdge+SDL_Window->BorderLeft) && SDL_Display->MouseY<(SDL_Window->TopEdge+SDL_Window->Height-SDL_Window->BorderBottom) - ) - { - SDL_PrivateAppActive(1, SDL_APPMOUSEFOCUS); - SDL_PrivateMouseMotion(0, 0, SDL_Display->MouseX-SDL_Window->LeftEdge-SDL_Window->BorderLeft, - SDL_Display->MouseY-SDL_Window->TopEdge-SDL_Window->BorderTop); - } - else - { - SDL_PrivateAppActive(0, SDL_APPMOUSEFOCUS); - } - } - SDL_Unlock_EventThread(); + if (currently_fullscreen) { + SDL_PrivateAppActive(1, SDL_APPMOUSEFOCUS); + SDL_PrivateMouseMotion(0, 0, SDL_Display->MouseX, + SDL_Display->MouseY); + } else { + if (SDL_Display->MouseX >= + (SDL_Window->LeftEdge + SDL_Window->BorderLeft) + && SDL_Display->MouseX < + (SDL_Window->LeftEdge + SDL_Window->Width - + SDL_Window->BorderRight) + && SDL_Display->MouseY >= + (SDL_Window->TopEdge + SDL_Window->BorderLeft) + && SDL_Display->MouseY < + (SDL_Window->TopEdge + SDL_Window->Height - + SDL_Window->BorderBottom)) { + SDL_PrivateAppActive(1, SDL_APPMOUSEFOCUS); + SDL_PrivateMouseMotion(0, 0, + SDL_Display->MouseX - + SDL_Window->LeftEdge - + SDL_Window->BorderLeft, + SDL_Display->MouseY - + SDL_Window->TopEdge - + SDL_Window->BorderTop); + } else { + SDL_PrivateAppActive(0, SDL_APPMOUSEFOCUS); + } + } + SDL_Unlock_EventThread(); } -static int CGX_SetColors(_THIS, int firstcolor, int ncolors, SDL_Color *colors) +static int +CGX_SetColors(_THIS, int firstcolor, int ncolors, SDL_Color * colors) { - int i; + int i; - /* Check to make sure we have a colormap allocated */ + /* Check to make sure we have a colormap allocated */ - /* It's easy if we have a hidden colormap */ - if ( (this->screen->flags & SDL_HWPALETTE) && currently_fullscreen ) - { - ULONG xcmap[256*3+2]; + /* It's easy if we have a hidden colormap */ + if ((this->screen->flags & SDL_HWPALETTE) && currently_fullscreen) { + ULONG xcmap[256 * 3 + 2]; - xcmap[0]=(ncolors<<16); - xcmap[0]+=firstcolor; + xcmap[0] = (ncolors << 16); + xcmap[0] += firstcolor; -// D(bug("Setting %ld colors on an HWPALETTE screen\n",ncolors)); +// D(bug("Setting %ld colors on an HWPALETTE screen\n",ncolors)); - for ( i=0; i<ncolors; i++ ) { - xcmap[i*3+1] = colors[i+firstcolor].r<<24; - xcmap[i*3+2] = colors[i+firstcolor].g<<24; - xcmap[i*3+3] = colors[i+firstcolor].b<<24; - } - xcmap[ncolors*3+1]=0; - LoadRGB32(&GFX_Display->ViewPort,xcmap); - } else { + for (i = 0; i < ncolors; i++) { + xcmap[i * 3 + 1] = colors[i + firstcolor].r << 24; + xcmap[i * 3 + 2] = colors[i + firstcolor].g << 24; + xcmap[i * 3 + 3] = colors[i + firstcolor].b << 24; + } + xcmap[ncolors * 3 + 1] = 0; + LoadRGB32(&GFX_Display->ViewPort, xcmap); + } else { // XPixels are not needed on 8bit screen with hwpalette - unsigned long pixel; + unsigned long pixel; - if ( SDL_XPixels == NULL ) { - D(bug("SetColors without colormap!")); - return(0); - } + if (SDL_XPixels == NULL) { + D(bug("SetColors without colormap!")); + return (0); + } + + if (this->hidden->depth == 8) { +// In this case I have to unalloc and realloc the full palette + D(bug("Obtaining %ld colors on the screen\n", ncolors)); - if(this->hidden->depth==8) - { -// In this case I have to unalloc and realloc the full palette - D(bug("Obtaining %ld colors on the screen\n",ncolors)); + /* Free existing allocated colors */ + for (pixel = 0; + pixel < this->screen->format->palette->ncolors; ++pixel) { + if (SDL_XPixels[pixel] >= 0) + ReleasePen(GFX_Display->ViewPort.ColorMap, + SDL_XPixels[pixel]); + } - /* Free existing allocated colors */ - for ( pixel=0; pixel<this->screen->format->palette->ncolors; ++pixel ) { - if(SDL_XPixels[pixel]>=0) - ReleasePen(GFX_Display->ViewPort.ColorMap,SDL_XPixels[pixel]); - } + /* Try to allocate all the colors */ + for (i = 0; i < this->screen->format->palette->ncolors; ++i) { + SDL_XPixels[i] = + ObtainBestPenA(GFX_Display->ViewPort.ColorMap, + colors[i].r << 24, + colors[i].g << 24, + colors[i].b << 24, NULL); + } + } else { +#ifndef USE_CGX_WRITELUTPIXEL + Uint32 fmt; + D(bug("Preparing a conversion pixel table...\n")); - /* Try to allocate all the colors */ - for ( i=0; i<this->screen->format->palette->ncolors; ++i ) { - SDL_XPixels[i]=ObtainBestPenA(GFX_Display->ViewPort.ColorMap,colors[i].r<<24,colors[i].g<<24,colors[i].b<<24,NULL); - } - } - else - { -#ifndef USE_CGX_WRITELUTPIXEL - Uint32 fmt; - D(bug("Preparing a conversion pixel table...\n")); + fmt = + GetCyberMapAttr(SDL_Display->RastPort.BitMap, + CYBRMATTR_PIXFMT); - fmt=GetCyberMapAttr(SDL_Display->RastPort.BitMap,CYBRMATTR_PIXFMT); - - for(i=0;i<ncolors;i++) - { - SetSingleColor(fmt,colors[firstcolor+i].r,colors[firstcolor+i].g,colors[firstcolor+i].b,(unsigned char *)&SDL_XPixels[firstcolor+i]); - } + for (i = 0; i < ncolors; i++) { + SetSingleColor(fmt, colors[firstcolor + i].r, + colors[firstcolor + i].g, + colors[firstcolor + i].b, (unsigned char *) + &SDL_XPixels[firstcolor + i]); + } #else -// D(bug("Executing XPixel(%lx) remapping: (from %ld, %ld colors) first: r%ld g%ld b%ld\n",SDL_XPixels,firstcolor,ncolors,colors[firstcolor].r,colors[firstcolor].g,colors[firstcolor].b)); - for(i=0;i<ncolors;i++) - SDL_XPixels[i+firstcolor]=(colors[firstcolor+i].r<<16)+(colors[firstcolor+i].g<<8)+colors[firstcolor+i].b; +// D(bug("Executing XPixel(%lx) remapping: (from %ld, %ld colors) first: r%ld g%ld b%ld\n",SDL_XPixels,firstcolor,ncolors,colors[firstcolor].r,colors[firstcolor].g,colors[firstcolor].b)); + for (i = 0; i < ncolors; i++) + SDL_XPixels[i + firstcolor] = + (colors[firstcolor + i].r << 16) + + (colors[firstcolor + i].g << 8) + colors[firstcolor + + i].b; #endif - } - } + } + } // Actually it cannot fail! - return 1; + return 1; } /* Note: If we are terminated, this could be called in the middle of another SDL video routine -- notably UpdateRects. */ -static void CGX_VideoQuit(_THIS) +static void +CGX_VideoQuit(_THIS) { - /* Shutdown everything that's still up */ - /* The event thread should be done, so we can touch SDL_Display */ - D(bug("CGX_VideoQuit\n")); + /* Shutdown everything that's still up */ + /* The event thread should be done, so we can touch SDL_Display */ + D(bug("CGX_VideoQuit\n")); - if ( SDL_Display != NULL ) { - /* Clean up OpenGL */ - if(this->gl_data->gl_active == 1) { - CGX_GL_Quit(this); - } - /* Start shutting down the windows */ - D(bug("Destroying image...\n")); - CGX_DestroyImage(this, this->screen); - D(bug("Destroying window...\n")); - CGX_DestroyWindow(this, this->screen); + if (SDL_Display != NULL) { + /* Clean up OpenGL */ + if (this->gl_data->gl_active == 1) { + CGX_GL_Quit(this); + } + /* Start shutting down the windows */ + D(bug("Destroying image...\n")); + CGX_DestroyImage(this, this->screen); + D(bug("Destroying window...\n")); + CGX_DestroyWindow(this, this->screen); // Otherwise SDL_VideoQuit will try to free it! - SDL_VideoSurface=NULL; + SDL_VideoSurface = NULL; - CGX_FreeVideoModes(this); + CGX_FreeVideoModes(this); - /* Free that blank cursor */ - if ( SDL_BlankCursor != NULL ) { - FreeMem(SDL_BlankCursor,16); - SDL_BlankCursor = NULL; - } + /* Free that blank cursor */ + if (SDL_BlankCursor != NULL) { + FreeMem(SDL_BlankCursor, 16); + SDL_BlankCursor = NULL; + } - /* Close the X11 graphics connection */ - this->hidden->same_format=0; + /* Close the X11 graphics connection */ + this->hidden->same_format = 0; - D(bug("Destroying screen...\n")); + D(bug("Destroying screen...\n")); - if ( GFX_Display != NULL ) - DestroyScreen(this); + if (GFX_Display != NULL) + DestroyScreen(this); - /* Close the X11 display connection */ - SDL_Display = NULL; + /* Close the X11 display connection */ + SDL_Display = NULL; - /* Unload GL library after X11 shuts down */ - } + /* Unload GL library after X11 shuts down */ + } - D(bug("Closing libraries...\n")); + D(bug("Closing libraries...\n")); - if( CyberGfxBase) { - CloseLibrary(CyberGfxBase); - CyberGfxBase=NULL; - } + if (CyberGfxBase) { + CloseLibrary(CyberGfxBase); + CyberGfxBase = NULL; + } - if (IntuitionBase) { - CloseLibrary((struct Library *)IntuitionBase); - IntuitionBase=NULL; - } - if (GfxBase) { - CloseLibrary((struct Library *)GfxBase); - GfxBase=NULL; - } + if (IntuitionBase) { + CloseLibrary((struct Library *) IntuitionBase); + IntuitionBase = NULL; + } + if (GfxBase) { + CloseLibrary((struct Library *) GfxBase); + GfxBase = NULL; + } - if ( this->screen && (this->screen->flags & SDL_HWSURFACE) ) { - /* Direct screen access, no memory buffer */ - this->screen->pixels = NULL; - } - D(bug("End of CGX_VideoQuit.\n")); + if (this->screen && (this->screen->flags & SDL_HWSURFACE)) { + /* Direct screen access, no memory buffer */ + this->screen->pixels = NULL; + } + D(bug("End of CGX_VideoQuit.\n")); } +/* vi: set ts=4 sw=4 expandtab: */