X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsdl.c;h=0325c45f038383c8a5e971be60c59dd1d9930906;hb=41b805f296b21b950aa8372c2f1792bf301f4ef9;hp=a66049e97e0175cf9fef962ff2518d0d7a658ee2;hpb=7bcc6aa833d64b21f78793dd00ed4c1356b98d05;p=rocksndiamonds.git diff --git a/src/libgame/sdl.c b/src/libgame/sdl.c index a66049e9..0325c45f 100644 --- a/src/libgame/sdl.c +++ b/src/libgame/sdl.c @@ -297,6 +297,7 @@ static boolean equalSDLPixelFormat(SDL_PixelFormat *format1, format1->Bmask == format2->Bmask); } +#if 0 static Pixel SDLGetColorKey(SDL_Surface *surface) { Pixel color_key; @@ -306,10 +307,37 @@ static Pixel SDLGetColorKey(SDL_Surface *surface) return color_key; } +#endif + +static void SDLCopyColorKey(SDL_Surface *src_surface, SDL_Surface *dst_surface) +{ + Pixel color_key; + Uint8 r, g, b; + + // check if source surface has a color key + if (SDL_GetColorKey(src_surface, &color_key) == 0) + { + // get RGB values of color key of source surface + SDL_GetRGB(color_key, src_surface->format, &r, &g, &b); + + // get color key from RGB values in destination surface format + color_key = SDL_MapRGB(dst_surface->format, r, g, b); + + // set color key in destination surface + SDL_SetColorKey(dst_surface, SET_TRANSPARENT_PIXEL, color_key); + } + else + { + // unset color key in destination surface + SDL_SetColorKey(dst_surface, UNSET_TRANSPARENT_PIXEL, 0); + } +} static boolean SDLHasColorKey(SDL_Surface *surface) { - return (SDLGetColorKey(surface) != -1); + Pixel color_key; + + return (SDL_GetColorKey(surface, &color_key) == 0); } static boolean SDLHasAlpha(SDL_Surface *surface) @@ -364,8 +392,7 @@ SDL_Surface *SDLGetNativeSurface(SDL_Surface *surface) // workaround for a bug in SDL 2.0.12 (which does not convert the color key) if (SDLHasColorKey(surface) && !SDLHasColorKey(new_surface)) - SDL_SetColorKey(new_surface, SET_TRANSPARENT_PIXEL, - SDLGetColorKey(surface)); + SDLCopyColorKey(surface, new_surface); return new_surface; } @@ -2267,8 +2294,7 @@ Bitmap *SDLZoomBitmap(Bitmap *src_bitmap, int dst_width, int dst_height) // set color key for zoomed surface from source surface, if defined if (SDLHasColorKey(src_surface)) - SDL_SetColorKey(dst_surface, SET_TRANSPARENT_PIXEL, - SDLGetColorKey(src_surface)); + SDLCopyColorKey(src_surface, dst_surface); // create native non-transparent surface for opaque blitting dst_bitmap->surface = SDLGetOpaqueSurface(dst_surface);