cleanup of function for creating opaque surface from masked surface
[rocksndiamonds.git] / src / libgame / sdl.c
index 0e8945d5883b1e69d4d5b49faa72a29c6f432906..abb200fb97d5bb04366b835f42e43cc797b63a04 100644 (file)
@@ -2124,7 +2124,8 @@ SDL_Surface *zoomSurface(SDL_Surface *src, int dst_width, int dst_height)
   {
     /* new source surface is 32 bit with a defined RGB ordering */
     zoom_src = SDL_CreateRGBSurface(SURFACE_FLAGS, src->w, src->h, 32,
-                                   0x000000ff, 0x0000ff00, 0x00ff0000, 0);
+                                   0x000000ff, 0x0000ff00, 0x00ff0000,
+                                   (src->format->Amask ? 0xff000000 : 0));
     SDL_BlitSurface(src, NULL, zoom_src, NULL);
     is_32bit = TRUE;
     is_converted = TRUE;
@@ -2137,7 +2138,8 @@ SDL_Surface *zoomSurface(SDL_Surface *src, int dst_width, int dst_height)
     zoom_dst = SDL_CreateRGBSurface(SURFACE_FLAGS, dst_width, dst_height, 32,
                                    zoom_src->format->Rmask,
                                    zoom_src->format->Gmask,
-                                   zoom_src->format->Bmask, 0);
+                                   zoom_src->format->Bmask,
+                                   zoom_src->format->Amask);
   }
   else
   {
@@ -2178,22 +2180,23 @@ SDL_Surface *zoomSurface(SDL_Surface *src, int dst_width, int dst_height)
   return zoom_dst;
 }
 
-static void SetOpaqueBitmapSurface(Bitmap *bitmap)
+static SDL_Surface *SDLGetOpaqueSurface(SDL_Surface *surface)
 {
-  if (bitmap == NULL)
-    return;
+  SDL_Surface *new_surface;
 
-  if (bitmap->surface)
-    SDL_FreeSurface(bitmap->surface);
+  if (surface == NULL)
+    return NULL;
 
-  if ((bitmap->surface = SDLGetNativeSurface(bitmap->surface_masked)) == NULL)
+  if ((new_surface = SDLGetNativeSurface(surface)) == NULL)
     Error(ERR_EXIT, "SDL_DisplayFormat() failed");
 
   /* remove alpha channel from native non-transparent surface, if defined */
-  SDLSetAlpha(bitmap->surface, FALSE, 0);
+  SDLSetAlpha(new_surface, FALSE, 0);
 
   /* remove transparent color from native non-transparent surface, if defined */
-  SDL_SetColorKey(bitmap->surface, UNSET_TRANSPARENT_PIXEL, 0);
+  SDL_SetColorKey(new_surface, UNSET_TRANSPARENT_PIXEL, 0);
+
+  return new_surface;
 }
 
 Bitmap *SDLZoomBitmap(Bitmap *src_bitmap, int dst_width, int dst_height)
@@ -2219,7 +2222,7 @@ Bitmap *SDLZoomBitmap(Bitmap *src_bitmap, int dst_width, int dst_height)
                    SDLGetColorKey(src_bitmap->surface_masked));
 
   /* create native non-transparent surface for opaque blitting */
-  SetOpaqueBitmapSurface(dst_bitmap);
+  dst_bitmap->surface = SDLGetOpaqueSurface(dst_bitmap->surface_masked);
 
   return dst_bitmap;
 }