added function to get envelope request center position
[rocksndiamonds.git] / src / tools.c
index 1676bc894c6638865dc0457b441edd8fcbdd054a..b4449392b0ff789287898b0e40ed5f8422e765ea 100644 (file)
@@ -354,7 +354,7 @@ void DrawMaskedBorder(int redraw_mask)
   }
 }
 
-static void BlitScreenToBitmap_RND(Bitmap *target_bitmap)
+void BlitScreenToBitmap_RND(Bitmap *target_bitmap)
 {
   DrawBuffer *buffer = (drawto_field == window ? backbuffer : drawto_field);
   int fx = FX, fy = FY;
@@ -410,23 +410,7 @@ static void BlitScreenToBitmap_RND(Bitmap *target_bitmap)
       fy = 2 * TILEY_VAR - (EVEN(lev_fieldy) ? TILEY_VAR / 2 : 0);
   }
 
-  if (border.draw_masked[GAME_MODE_PLAYING])
-  {
-    if (buffer != backbuffer)
-    {
-      /* copy playfield buffer to backbuffer to add masked border */
-      BlitBitmap(buffer, backbuffer, fx, fy, SXSIZE, SYSIZE, SX, SY);
-      DrawMaskedBorder(REDRAW_FIELD);
-    }
-
-    BlitBitmap(backbuffer, target_bitmap,
-              REAL_SX, REAL_SY, FULL_SXSIZE, FULL_SYSIZE,
-              REAL_SX, REAL_SY);
-  }
-  else
-  {
-    BlitBitmap(buffer, target_bitmap, fx, fy, SXSIZE, SYSIZE, SX, SY);
-  }
+  BlitBitmap(buffer, target_bitmap, fx, fy, SXSIZE, SYSIZE, SX, SY);
 }
 
 void BlitScreenToBitmap(Bitmap *target_bitmap)
@@ -439,7 +423,7 @@ void BlitScreenToBitmap(Bitmap *target_bitmap)
     BlitScreenToBitmap_RND(target_bitmap);
 }
 
-void BackToFront()
+void BackToFront_OLD()
 {
   DrawBuffer *buffer = (drawto_field == window ? backbuffer : drawto_field);
 
@@ -575,6 +559,20 @@ void BackToFront()
   redraw_mask = REDRAW_NONE;
 }
 
+void BackToFront()
+{
+  if (redraw_mask == REDRAW_NONE)
+    return;
+
+  // draw masked border to all viewports, if defined
+  DrawMaskedBorder(redraw_mask);
+
+  // blit backbuffer to visible screen
+  BlitBitmap(backbuffer, window, 0, 0, WIN_XSIZE, WIN_YSIZE, 0, 0);
+
+  redraw_mask = REDRAW_NONE;
+}
+
 static void FadeCrossSaveBackbuffer()
 {
   BlitBitmap(backbuffer, bitmap_db_cross, 0, 0, WIN_XSIZE, WIN_YSIZE, 0, 0);
@@ -2119,13 +2117,25 @@ void ShowEnvelope(int envelope_nr)
   BackToFront();
 }
 
-static void setRequestPosition(int *x, int *y, boolean add_border_size)
+static void setRequestCenterPosition(int *x, int *y)
 {
-  int border_size = request.border_size;
   int sx_center = (request.x != -1 ? request.x : SX + SXSIZE / 2);
   int sy_center = (request.y != -1 ? request.y : SY + SYSIZE / 2);
-  int sx = sx_center - request.width  / 2;
-  int sy = sy_center - request.height / 2;
+
+  *x = sx_center;
+  *y = sy_center;
+}
+
+static void setRequestPosition(int *x, int *y, boolean add_border_size)
+{
+  int border_size = request.border_size;
+  int sx_center, sy_center;
+  int sx, sy;
+
+  setRequestCenterPosition(&sx_center, &sy_center);
+
+  sx = sx_center - request.width  / 2;
+  sy = sy_center - request.height / 2;
 
   if (add_border_size)
   {
@@ -2264,18 +2274,22 @@ void AnimateEnvelopeRequest(int anim_mode, int action)
     int y = ystart + i * ystep;
     int xsize = (action == ACTION_CLOSING ? xend - (x - xstart) : x) + 2;
     int ysize = (action == ACTION_CLOSING ? yend - (y - ystart) : y) + 2;
-    int sx_center = (request.x != -1 ? request.x : SX + SXSIZE / 2);
-    int sy_center = (request.y != -1 ? request.y : SY + SYSIZE / 2);
-    int src_x = sx_center - width  / 2;
-    int src_y = sy_center - height / 2;
-    int dst_x = sx_center - xsize * tile_size / 2;
-    int dst_y = sy_center - ysize * tile_size / 2;
     int xsize_size_left = (xsize - 1) * tile_size;
     int ysize_size_top  = (ysize - 1) * tile_size;
     int max_xsize_pos = (max_xsize - 1) * tile_size;
     int max_ysize_pos = (max_ysize - 1) * tile_size;
+    int sx_center, sy_center;
+    int src_x, src_y;
+    int dst_x, dst_y;
     int xx, yy;
 
+    setRequestCenterPosition(&sx_center, &sy_center);
+
+    src_x = sx_center - width  / 2;
+    src_y = sy_center - height / 2;
+    dst_x = sx_center - xsize * tile_size / 2;
+    dst_y = sy_center - ysize * tile_size / 2;
+
     BlitBitmap(bitmap_db_store, backbuffer, 0, 0, WIN_XSIZE, WIN_YSIZE, 0, 0);
 
     for (yy = 0; yy < 2; yy++)