changed function to scale SDL surface to be externally available
[rocksndiamonds.git] / src / libgame / sdl.c
index 64d28bdbb6fb5c17243947b6d81899324a2c32d2..89d2af1efb8c28896ca76876bdec6f67b8509a91 100644 (file)
@@ -62,14 +62,18 @@ static void FinalizeScreen(int draw_target)
   if (gfx.draw_global_anim_function != NULL)
     gfx.draw_global_anim_function(draw_target, DRAW_GLOBAL_ANIM_STAGE_2);
 
-  // copy tile selection cursor to render target buffer, if defined (above all)
+  // copy tile selection cursor to render target buffer, if defined (part 1)
   if (gfx.draw_tile_cursor_function != NULL)
-    gfx.draw_tile_cursor_function(draw_target);
+    gfx.draw_tile_cursor_function(draw_target, TRUE);
 
   // copy envelope request to render target buffer, if needed (above all)
   if (gfx.draw_envelope_request_function != NULL)
     gfx.draw_envelope_request_function(draw_target);
 
+  // copy tile selection cursor to render target buffer, if defined (part 2)
+  if (gfx.draw_tile_cursor_function != NULL)
+    gfx.draw_tile_cursor_function(draw_target, FALSE);
+
   // copy global animations to render target buffer, if defined (mouse pointer)
   if (gfx.draw_global_anim_function != NULL)
     gfx.draw_global_anim_function(draw_target, DRAW_GLOBAL_ANIM_STAGE_3);
@@ -464,6 +468,21 @@ boolean SDLSetNativeSurface(SDL_Surface **surface)
   return TRUE;
 }
 
+SDL_Surface *SDLCreateNativeSurface(int width, int height, int depth)
+{
+  if (program.headless)
+    return NULL;
+
+  SDL_Surface *surface = SDL_CreateRGBSurface(SURFACE_FLAGS, width, height, depth, 0,0,0, 0);
+
+  if (surface == NULL)
+    Fail("SDL_CreateRGBSurface() failed: %s", SDL_GetError());
+
+  SDLSetNativeSurface(&surface);
+
+  return surface;
+}
+
 static SDL_Texture *SDLCreateTextureFromSurface(SDL_Surface *surface)
 {
   if (program.headless)
@@ -976,23 +995,6 @@ void SDLRedrawWindow(void)
   UpdateScreen_WithoutFrameDelay(NULL);
 }
 
-void SDLCreateBitmapContent(Bitmap *bitmap, int width, int height,
-                           int depth)
-{
-  if (program.headless)
-    return;
-
-  SDL_Surface *surface =
-    SDL_CreateRGBSurface(SURFACE_FLAGS, width, height, depth, 0,0,0, 0);
-
-  if (surface == NULL)
-    Fail("SDL_CreateRGBSurface() failed: %s", SDL_GetError());
-
-  SDLSetNativeSurface(&surface);
-
-  bitmap->surface = surface;
-}
-
 void SDLFreeBitmapPointers(Bitmap *bitmap)
 {
   if (bitmap->surface)
@@ -1012,6 +1014,25 @@ void SDLFreeBitmapPointers(Bitmap *bitmap)
   bitmap->texture_masked = NULL;
 }
 
+void SDLBlitSurface(SDL_Surface *src_surface, SDL_Surface *dst_surface,
+                   int src_x, int src_y, int width, int height,
+                   int dst_x, int dst_y)
+{
+  SDL_Rect src_rect, dst_rect;
+
+  src_rect.x = src_x;
+  src_rect.y = src_y;
+  src_rect.w = width;
+  src_rect.h = height;
+
+  dst_rect.x = dst_x;
+  dst_rect.y = dst_y;
+  dst_rect.w = width;
+  dst_rect.h = height;
+
+  SDL_BlitSurface(src_surface, &src_rect, dst_surface, &dst_rect);
+}
+
 void SDLCopyArea(Bitmap *src_bitmap, Bitmap *dst_bitmap,
                 int src_x, int src_y, int width, int height,
                 int dst_x, int dst_y, int mask_mode)
@@ -1440,7 +1461,7 @@ void SDLDrawLines(SDL_Surface *surface, struct XY *points,
          continue;
 
        sge_Line(surface, points[i].x + dx, points[i].y + dy,
-                points[i+1].x + dx, points[i+1].y + dy, color);
+                points[i + 1].x + dx, points[i + 1].y + dy, color);
       }
     }
   }
@@ -2212,7 +2233,7 @@ static int zoomSurfaceY(SDL_Surface * src, SDL_Surface * dst)
 }
 
 // ----------------------------------------------------------------------------
-// zoomSurface()
+// SDLZoomSurface()
 //
 // Zooms a 32bit or 8bit 'src' surface to newly created 'dst' surface.
 // 'zoomx' and 'zoomy' are scaling factors for width and height.
@@ -2220,7 +2241,7 @@ static int zoomSurfaceY(SDL_Surface * src, SDL_Surface * dst)
 // into a 32bit RGBA format on the fly.
 // ----------------------------------------------------------------------------
 
-static SDL_Surface *zoomSurface(SDL_Surface *src, int dst_width, int dst_height)
+SDL_Surface *SDLZoomSurface(SDL_Surface *src, int dst_width, int dst_height)
 {
   SDL_Surface *zoom_src = NULL;
   SDL_Surface *zoom_dst = NULL;
@@ -2331,7 +2352,7 @@ Bitmap *SDLZoomBitmap(Bitmap *src_bitmap, int dst_width, int dst_height)
   dst_bitmap->height = dst_height;
 
   // create zoomed temporary surface from source surface
-  dst_surface = zoomSurface(src_surface, dst_width, dst_height);
+  dst_surface = SDLZoomSurface(src_surface, dst_width, dst_height);
 
   // create native format destination surface from zoomed temporary surface
   SDLSetNativeSurface(&dst_surface);