X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ftools.c;h=3dcf88af26d04ebdcc2cff721e38734d10bcdc03;hb=2178db0a0652bc87717aa1a55c888258ad6701e5;hp=053409c67ae6c09e139aa62d22617149e29cdc12;hpb=3be7c7dc2af1580d9ba24118ed36fb001d09ebc1;p=rocksndiamonds.git diff --git a/src/tools.c b/src/tools.c index 053409c6..3dcf88af 100644 --- a/src/tools.c +++ b/src/tools.c @@ -291,15 +291,16 @@ void RedrawPlayfield() static void DrawMaskedBorderExt_Rect(int x, int y, int width, int height, int draw_target) { - Bitmap *bitmap = getGlobalBorderBitmapFromStatus(global.border_status); + Bitmap *src_bitmap = getGlobalBorderBitmapFromStatus(global.border_status); + Bitmap *dst_bitmap = gfx.masked_border_bitmap_ptr; if (x == -1 && y == -1) return; if (draw_target == DRAW_BORDER_TO_SCREEN) - BlitToScreenMasked(bitmap, x, y, width, height, x, y); + BlitToScreenMasked(src_bitmap, x, y, width, height, x, y); else - BlitBitmapMasked(bitmap, backbuffer, x, y, width, height, x, y); + BlitBitmapMasked(src_bitmap, dst_bitmap, x, y, width, height, x, y); } static void DrawMaskedBorderExt_FIELD(int draw_target) @@ -381,9 +382,32 @@ void DrawMaskedBorder(int redraw_mask) DrawMaskedBorderExt(redraw_mask, DRAW_BORDER_TO_BACKBUFFER); } -void DrawMaskedBorderToScreen(int draw_target) +void DrawMaskedBorderToTarget(int draw_target) { - DrawMaskedBorderExt(REDRAW_ALL, draw_target); + if (draw_target == DRAW_BORDER_TO_SCREEN) + { + DrawMaskedBorderExt(REDRAW_ALL, draw_target); + } + else + { + int last_border_status = global.border_status; + + if (draw_target == DRAW_BORDER_TO_FADE_SOURCE) + { + global.border_status = gfx.fade_border_source_status; + gfx.masked_border_bitmap_ptr = gfx.fade_bitmap_source; + } + else + { + global.border_status = gfx.fade_border_target_status; + gfx.masked_border_bitmap_ptr = gfx.fade_bitmap_target; + } + + DrawMaskedBorderExt(REDRAW_ALL, draw_target); + + global.border_status = last_border_status; + gfx.masked_border_bitmap_ptr = backbuffer; + } } void BlitScreenToBitmap_RND(Bitmap *target_bitmap) @@ -688,6 +712,9 @@ static void SetScreenStates_BeforeFadingIn() static void SetScreenStates_AfterFadingIn() { + // store new source screen (to use correct masked border for fading) + gfx.fade_border_source_status = global.border_status; + global.anim_status = global.anim_status_next; // force update of global animation status in case of rapid screen changes @@ -697,6 +724,9 @@ static void SetScreenStates_AfterFadingIn() static void SetScreenStates_BeforeFadingOut() { + // store new target screen (to use correct masked border for fading) + gfx.fade_border_target_status = game_status; + global.anim_status = GAME_MODE_PSEUDO_FADING; }