Update of /cvsroot/netrek/client/netrekxp/src
In directory sc8-pr-cvs16:/tmp/cvs-serv13267/src
Modified Files:
mswindow.c
Log Message:
Moved reinitialization of SDB buffers from WM_EXITSIZEMOVE to WM_SIZE,
as moving to the latter ensures correct clipping rectangle is set.
Moved initstars() to be after TWINSIDE is changed, fixes regression.
Index: mswindow.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/mswindow.c,v
retrieving revision 1.74
retrieving revision 1.75
diff -u -d -r1.74 -r1.75
--- mswindow.c 14 Apr 2007 09:49:35 -0000 1.74
+++ mswindow.c 18 Apr 2007 02:05:26 -0000 1.75
@@ -1857,6 +1857,25 @@
win->ClipRect.left = win->ClipRect.top = win->border;
win->ClipRect.right = LOWORD (lParam) - win->border;
win->ClipRect.bottom = HIWORD (lParam) - win->border;
+ // Reinitialize SDB as size/borders of window have changed
+ if ((Window *) w != NULL && win->hwnd == ((Window *) w)->hwnd)
+ {
+ SelectObject (localSDB->mem_dc, localSDB->old_bmp);
+ DeleteObject (localSDB->mem_bmp);
+ ReleaseDC (((Window *)localSDB->window)->hwnd, localSDB->win_dc);
+ DeleteDC (localSDB->mem_dc);
+ free (localSDB);
+ localSDB = W_InitSDB (w);
+ }
+ else if ((Window *) mapw != NULL && win->hwnd == ((Window *) mapw)->hwnd)
+ {
+ SelectObject (mapSDB->mem_dc, mapSDB->old_bmp);
+ DeleteObject (mapSDB->mem_bmp);
+ ReleaseDC (((Window *)mapSDB->window)->hwnd, mapSDB->win_dc);
+ DeleteDC (mapSDB->mem_dc);
+ free (mapSDB);
+ mapSDB = W_InitSDB (mapw);
+ }
break;
case WM_ENTERSIZEMOVE:
@@ -1933,27 +1952,16 @@
GET_STRUCT_PTR;
- // Reinitialize whatever is necessary (so many things are created based on
- // a fixed TWINSIDE)
// Adjust window to be square
- // Adjust TWINSIDE and GWINSIDE
- // Redo critical windows
- // Clear window
+ // Adjust TWINSIDE or GWINSIDE
+ // Reinitialize whatever is necessary
+ // Redo other critical windows
+ // Move and refresh window
if (windowMove && (Window *) w != NULL && win->hwnd == ((Window *) w)->hwnd)
{
GetWindowRect (((Window *) w)->hwnd, &winRect);
GetWindowRect (((Window *) baseWin)->hwnd, &baseRect);
- // Have to reinitialize SDB
- SelectObject (localSDB->mem_dc, localSDB->old_bmp);
- DeleteObject (localSDB->mem_bmp);
- ReleaseDC (((Window *)localSDB->window)->hwnd, localSDB->win_dc);
- DeleteDC (localSDB->mem_dc);
- free (localSDB);
- localSDB = W_InitSDB (w);
- // and stars
- initStars();
-
// Keep window square
width = winRect.right - winRect.left;
height = winRect.bottom - winRect.top;
@@ -1963,6 +1971,9 @@
height = width;
TWINSIDE = width - 2 * win->border;
+ // Have to reinitialize stars
+ initStars();
+
/* Beeplite TTS may need to be adjusted */
tts_ypos = intDefault("tts_ypos", TWINSIDE / 2 - 16);
@@ -1990,10 +2001,7 @@
winRect.left -= GetSystemMetrics (SM_CXSIZEFRAME) - 1;
winRect.top -= GetSystemMetrics (SM_CYSIZEFRAME) - 1;
}
-
- MoveWindow (((Window *) w)->hwnd, winRect.left, winRect.top,
- width, height, TRUE);
-
+
// All windows based on TWINSIDE are out of position now, but the team
// select/quit windows are now the wrong size too, so we need to redo them
for (i = 0; i < 4; i++)
@@ -2004,13 +2012,15 @@
if (!ingame)
W_MapWindow (teamWin[i]);
}
-
W_UnmapWindow (qwin);
qwin = W_MakeWindow ("quit", 4 * (TWINSIDE / 5), TWINSIDE - (TWINSIDE / 5), (TWINSIDE / 5),
(TWINSIDE / 5), w, 1, foreColor);
if (!ingame)
W_MapWindow (qwin);
+ MoveWindow (((Window *) w)->hwnd, winRect.left, winRect.top,
+ width, height, TRUE);
+
W_FastClear = 1;
if (viewBox)
redrawall = 1;
@@ -2020,14 +2030,6 @@
GetWindowRect (((Window *) mapw)->hwnd, &winRect);
GetWindowRect (((Window *) baseWin)->hwnd, &baseRect);
- // Have to reinitialize SDB
- SelectObject (mapSDB->mem_dc, mapSDB->old_bmp);
- DeleteObject (mapSDB->mem_bmp);
- ReleaseDC (((Window *)mapSDB->window)->hwnd, mapSDB->win_dc);
- DeleteDC (mapSDB->mem_dc);
- free (mapSDB);
- mapSDB = W_InitSDB (mapw);
-
// Keep window square
width = winRect.right - winRect.left;
height = winRect.bottom - winRect.top;