Update of /cvsroot/netrek/client/netrekxp/src
In directory sc8-pr-cvs16:/tmp/cvs-serv16255/src
Modified Files:
local.c map.c mswindow.c
Log Message:
Several bug fixes related to resizing map and local windows to very
small and even to 0 size.
Resizing map and local now only lets you size the windows as
squares.
Index: mswindow.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/mswindow.c,v
retrieving revision 1.65
retrieving revision 1.66
diff -u -d -r1.65 -r1.66
--- mswindow.c 10 Apr 2007 11:07:08 -0000 1.65
+++ mswindow.c 11 Apr 2007 01:10:05 -0000 1.66
@@ -1951,16 +1951,21 @@
case WM_EXITSIZEMOVE:
//Disable possibility to move internal windows
+ { // have to add bracket to be able to declare variables
+ int width, height;
+ RECT winRect; // current window rectangle
+
GET_STRUCT_PTR;
- // Adjust TWINSIDE and GWINSIDE
// 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
if (windowMove && (Window *) w != NULL && win->hwnd == ((Window *) w)->hwnd)
{
- TWINSIDE = MAX(win->ClipRect.bottom, win->ClipRect.right) + win->border;
+ GetWindowRect (((Window *) w)->hwnd, &winRect);
// Have to reinitialize SDB
SelectObject (localSDB->mem_dc, localSDB->old_bmp);
@@ -1972,6 +1977,22 @@
// and stars
initStars();
+ // Keep window square
+ width = winRect.right - winRect.left;
+ height = winRect.bottom - winRect.top;
+ if (width > height)
+ width = height;
+ else
+ height = width;
+ TWINSIDE = width - 2 * win->border;
+
+ /* In case of WS_CAPTION (titlebar on) we have to subtract caption size */
+ if (GetWindowLongPtr (((Window *) baseWin)->hwnd, GWL_STYLE) & WS_CAPTION)
+ winRect.top -= GetSystemMetrics (SM_CYCAPTION);
+
+ MoveWindow (((Window *) w)->hwnd, winRect.left - win->border, winRect.top - win->border,
+ 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++)
@@ -1980,6 +2001,7 @@
teamWin[i] = W_MakeWindow (teamshort[1 << i], i * (TWINSIDE / 5), TWINSIDE - (TWINSIDE / 5),
(TWINSIDE / 5), (TWINSIDE / 5), w, 1, foreColor);
}
+
W_UnmapWindow (qwin);
qwin = W_MakeWindow ("quit", 4 * (TWINSIDE / 5), TWINSIDE - (TWINSIDE / 5), (TWINSIDE / 5),
(TWINSIDE / 5), w, 1, foreColor);
@@ -1990,7 +2012,7 @@
}
else if (windowMove && (Window *) mapw != NULL && win->hwnd == ((Window *) mapw)->hwnd)
{
- GWINSIDE = MAX(win->ClipRect.bottom, win->ClipRect.right) + win->border;
+ GetWindowRect (((Window *) mapw)->hwnd, &winRect);
// Have to reinitialize SDB
SelectObject (mapSDB->mem_dc, mapSDB->old_bmp);
@@ -2000,6 +2022,22 @@
free (mapSDB);
mapSDB = W_InitSDB (mapw);
+ // Keep window square
+ width = winRect.right - winRect.left;
+ height = winRect.bottom - winRect.top;
+ if (width > height)
+ width = height;
+ else
+ height = width;
+ GWINSIDE = width - 2 * win->border;
+
+ /* In case of WS_CAPTION (titlebar on) we have to subtract caption size */
+ if (GetWindowLongPtr (((Window *) baseWin)->hwnd, GWL_STYLE) & WS_CAPTION)
+ winRect.top -= GetSystemMetrics (SM_CYCAPTION);
+
+ MoveWindow (((Window *) mapw)->hwnd, winRect.left - win->border, winRect.top - win->border,
+ width, height, TRUE);
+
redrawall = 1;
}
@@ -2019,6 +2057,7 @@
movingr.right - movingr.left,
movingr.bottom - movingr.top,
TRUE);
+ }
break;
case WM_PAINT:
Index: map.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/map.c,v
retrieving revision 1.48
retrieving revision 1.49
diff -u -d -r1.48 -r1.49
--- map.c 10 Apr 2007 05:43:45 -0000 1.48
+++ map.c 11 Apr 2007 01:10:05 -0000 1.49
@@ -853,7 +853,7 @@
static int viewx = 0, viewy = 0;
static char clearviewbox = 0;
static char viewboxcleared = 0;
- int viewdist = (TWINSIDE / 2 * scaleFactor) / (GWIDTH / GWINSIDE);
+ int viewdist;
int view = TWINSIDE * scaleFactor / 2;
int mvx, mvy;
@@ -866,6 +866,10 @@
#endif
clearMap ();
+ if (GWINSIDE == 0)
+ return;
+
+ viewdist = (TWINSIDE / 2 * scaleFactor) / (GWIDTH / GWINSIDE);
dx = (me->p_x) / (GWIDTH / GWINSIDE);
dy = (me->p_y) / (GWIDTH / GWINSIDE);
Index: local.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/local.c,v
retrieving revision 1.92
retrieving revision 1.93
diff -u -d -r1.92 -r1.93
--- local.c 10 Apr 2007 11:07:08 -0000 1.92
+++ local.c 11 Apr 2007 01:10:04 -0000 1.93
@@ -124,6 +124,9 @@
register int i, j, k;
int imax, jmax, kmax;
+ if (TWINSIDE == 0)
+ return;
+
imax = 5 * STARSIDE / TWINSIDE + 1;
if (imax > MAXSECTORS)
imax = MAXSECTORS;
@@ -156,12 +159,17 @@
note: cpp symbols in expressions (TWINSIDE*SCALE) will be precalculated
by any C optimizer
*/
- int sectorx = me->p_x / (fullview);
- int sectory = me->p_y / (fullview);
- int sector_offx = me->p_x - sectorx * (fullview);
- int sector_offy = me->p_y - sectory * (fullview);
+ int sectorx, sectory, sector_offx, sector_offy;
int l = 0, r = 0, t = 0, b = 0;
+ if (fullview == 0)
+ return;
+
+ sectorx = me->p_x / (fullview);
+ sectory = me->p_y / (fullview);
+ sector_offx = me->p_x - sectorx * (fullview);
+ sector_offy = me->p_y - sectory * (fullview);
+
if (warpStreaks && streaks_on)
/* Streaks_on is toggled on by redrawStarSector with a change in warp state,
and toggled off after certain conditions are met. Only need to track
@@ -181,8 +189,6 @@
sectory--;
sector_offy += fullview;
}
-
-#define MAXSECTOR (5 * STARSIDE / TWINSIDE) + 1
/* at worst we have to redraw 4 star sectors */
@@ -191,13 +197,13 @@
check first to make sure it's valid. This is mainly important for if
it tries to redraw and we're already dead
*/
- if (sectorx < 0 || sectory < 0 || sectorx > MAXSECTOR || sectory > MAXSECTOR )
+ if (sectorx < 0 || sectory < 0 || sectorx > MAXSECTORS || sectory > MAXSECTORS )
return;
l = sector_offx < view && sectorx > 0;
- r = sector_offx > view && sectorx + 1 < MAXSECTOR;
+ r = sector_offx > view && sectorx + 1 < MAXSECTORS;
t = sector_offy < view && sectory > 0;
- b = sector_offy > view && sectory + 1 < MAXSECTOR;
+ b = sector_offy > view && sectory + 1 < MAXSECTORS;
if (t)
{