changed some formatting
[rocksndiamonds.git] / src / tools.c
index b4449392b0ff789287898b0e40ed5f8422e765ea..95bc7a45ac7bbdc8a83c1e6267b8314f43c446b4 100644 (file)
@@ -334,11 +334,6 @@ void DrawMaskedBorder(int redraw_mask)
       effectiveGameStatus() == GAME_MODE_TITLE)
     return;
 
-  /* never draw masked screen borders when displaying request outside door */
-  if (effectiveGameStatus() == GAME_MODE_PSEUDO_DOOR &&
-      global.use_envelope_request)
-    return;
-
   if (redraw_mask & REDRAW_ALL)
     DrawMaskedBorder_ALL();
   else
@@ -356,7 +351,6 @@ void DrawMaskedBorder(int redraw_mask)
 
 void BlitScreenToBitmap_RND(Bitmap *target_bitmap)
 {
-  DrawBuffer *buffer = (drawto_field == window ? backbuffer : drawto_field);
   int fx = FX, fy = FY;
   int full_lev_fieldx = lev_fieldx + (BorderElement != EL_EMPTY ? 2 : 0);
   int full_lev_fieldy = lev_fieldy + (BorderElement != EL_EMPTY ? 2 : 0);
@@ -410,7 +404,7 @@ void BlitScreenToBitmap_RND(Bitmap *target_bitmap)
       fy = 2 * TILEY_VAR - (EVEN(lev_fieldy) ? TILEY_VAR / 2 : 0);
   }
 
-  BlitBitmap(buffer, target_bitmap, fx, fy, SXSIZE, SYSIZE, SX, SY);
+  BlitBitmap(drawto_field, target_bitmap, fx, fy, SXSIZE, SYSIZE, SX, SY);
 }
 
 void BlitScreenToBitmap(Bitmap *target_bitmap)
@@ -860,7 +854,9 @@ void ClearField()
     SetDrawtoField(DRAW_FIELDBUFFER);
   }
   else
+  {
     SetDrawtoField(DRAW_BACKBUFFER);
+  }
 }
 
 void MarkTileDirty(int x, int y)
@@ -2321,7 +2317,6 @@ void AnimateEnvelopeRequest(int anim_mode, int action)
   }
 }
 
-
 void ShowEnvelopeRequest(char *text, unsigned int req_state, int action)
 {
   int last_game_status = game_status;  /* save current game status */
@@ -3290,9 +3285,15 @@ void WaitForEventToContinue()
 
 static int RequestHandleEvents(unsigned int req_state)
 {
+  boolean level_solved = (game_status == GAME_MODE_PLAYING &&
+                         local_player->LevelSolved_GameEnd);
   int last_game_status = game_status;  /* save current game status */
+  int width  = request.width;
+  int height = request.height;
+  int sx, sy;
   int result;
-  int mx, my;
+
+  setRequestPosition(&sx, &sy, FALSE);
 
   button_status = MB_RELEASED;
 
@@ -3301,6 +3302,21 @@ static int RequestHandleEvents(unsigned int req_state)
 
   while (result < 0)
   {
+    if (level_solved)
+    {
+      SetDrawtoField(DRAW_FIELDBUFFER);
+
+      HandleGameActions();
+
+      SetDrawtoField(DRAW_BACKBUFFER);
+
+      if (global.use_envelope_request)
+      {
+       /* copy current state of request area to middle of playfield area */
+       BlitBitmap(bitmap_db_cross, drawto, sx, sy, width, height, sx, sy);
+      }
+    }
+
     if (PendingEvent())
     {
       Event event;
@@ -3313,6 +3329,8 @@ static int RequestHandleEvents(unsigned int req_state)
          case EVENT_BUTTONRELEASE:
          case EVENT_MOTIONNOTIFY:
          {
+           int mx, my;
+
            if (event.type == EVENT_MOTIONNOTIFY)
            {
              if (!button_status)
@@ -3418,9 +3436,13 @@ static int RequestHandleEvents(unsigned int req_state)
        result = 0;
     }
 
-    if (game_status == GAME_MODE_PLAYING && local_player->LevelSolved_GameEnd)
+    if (level_solved)
     {
-      HandleGameActions();
+      if (global.use_envelope_request)
+      {
+       /* copy back current state of pressed buttons inside request area */
+       BlitBitmap(drawto, bitmap_db_cross, sx, sy, width, height, sx, sy);
+      }
     }
     else
     {