X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ftools.c;h=95bc7a45ac7bbdc8a83c1e6267b8314f43c446b4;hb=cff0c254d160d92dbd6151f6110b1ed9dfec6296;hp=b4449392b0ff789287898b0e40ed5f8422e765ea;hpb=9ce369a0c1a00376c2b2065ba773dfd3bdb9bd4c;p=rocksndiamonds.git diff --git a/src/tools.c b/src/tools.c index b4449392..95bc7a45 100644 --- a/src/tools.c +++ b/src/tools.c @@ -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 {