From f6bb075813b131180a500e96757c6dc01b017f10 Mon Sep 17 00:00:00 2001 From: ghaushe Date: Thu, 6 Feb 2003 04:27:14 +0000 Subject: [PATCH] Fix problem where pressing 'down' when selecting SIS ship, caused flash rect to gradually turn white (closes bug #130). Fixed a potential crash in the flash code when going from main-menu to load-screen git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@691 8092fc87-c524-0410-9efc-e669fe64eaf9 --- sc2/src/sc2code/pickship.c | 1 + sc2/src/sc2code/sis.c | 18 ++++++++++-------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/sc2/src/sc2code/pickship.c b/sc2/src/sc2code/pickship.c index 3d76a9192..de3ef317e 100644 --- a/sc2/src/sc2code/pickship.c +++ b/sc2/src/sc2code/pickship.c @@ -203,6 +203,7 @@ ChangeSelection: font_DrawText (&t); } + SetFlashRect ((RECT *)0, (FRAME)0); SetFlashRect (&pMS->flash_rect0, (FRAME)0); ClearSemaphore (GraphicsSem); } diff --git a/sc2/src/sc2code/sis.c b/sc2/src/sc2code/sis.c index 1e5c6bbb7..61e5377f0 100644 --- a/sc2/src/sc2code/sis.c +++ b/sc2/src/sc2code/sis.c @@ -1335,7 +1335,7 @@ int flash_rect_func(void *data) void SetFlashRect (PRECT pRect, FRAME f) { - RECT clip_r, temp_r, old_r; + RECT clip_r, temp_r, flash_rect1, old_r; CONTEXT OldContext; FRAME old_f; int create_flash = 0; @@ -1345,6 +1345,7 @@ SetFlashRect (PRECT pRect, FRAME f) old_r = flash_rect; old_f = flash_frame; + flash_rect1 = flash_rect; if (pRect != (PRECT)~0L) { @@ -1374,7 +1375,7 @@ SetFlashRect (PRECT pRect, FRAME f) if (pRect == 0 || pRect->extent.width == 0) { - flash_rect.extent.width = 0; + flash_rect1.extent.width = 0; if (flash_task) { ClearSemaphore (GraphicsSem); @@ -1384,16 +1385,18 @@ SetFlashRect (PRECT pRect, FRAME f) } else { - flash_rect = *pRect; - flash_rect.corner.x += clip_r.corner.x; - flash_rect.corner.y += clip_r.corner.y; - flash_rect.extent.height += flash_rect.corner.y & 1; - flash_rect.corner.y &= ~1; + flash_rect1 = *pRect; + flash_rect1.corner.x += clip_r.corner.x; + flash_rect1.corner.y += clip_r.corner.y; + flash_rect1.extent.height += flash_rect.corner.y & 1; + flash_rect1.corner.y &= ~1; create_flash = 1; } + LockMutex (flash_mutex); flash_frame = f; + flash_rect = flash_rect1; if (old_r.extent.width && (old_r.extent.width != flash_rect.extent.width @@ -1422,7 +1425,6 @@ SetFlashRect (PRECT pRect, FRAME f) DestroyDrawable (ReleaseDrawable (flash_screen_frame)); flash_screen_frame = CaptureDrawable (LoadDisplayPixmap (&flash_rect, (FRAME)0)); } - LockMutex (flash_mutex); flash_changed = 1; UnlockMutex (flash_mutex); // we create the thread after the LoadIntoExtraScreen