Update of /cvsroot/netrek/client/netrekxp/src
In directory sc8-pr-cvs16:/tmp/cvs-serv9569/src

Modified Files:
	local.c mswindow.c 
Log Message:
More esoteric windows nonsense for dealing with caption and sizing
borders to get exact screen coordinates of the local/map window after
it's finished resizing.  Would need to use similar sort of checks to implement
saving the main window size and position between sessions.

Index: mswindow.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/mswindow.c,v
retrieving revision 1.66
retrieving revision 1.67
diff -u -d -r1.66 -r1.67
--- mswindow.c	11 Apr 2007 01:10:05 -0000	1.66
+++ mswindow.c	11 Apr 2007 08:03:08 -0000	1.67
@@ -1953,6 +1953,7 @@
         //Disable possibility to move internal windows
         {   // have to add bracket to be able to declare variables
         int width, height;
+        RECT baseRect;  // baseWin rectangle
         RECT winRect;   // current window rectangle       
 
         GET_STRUCT_PTR;
@@ -1966,6 +1967,7 @@
         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);
@@ -1986,11 +1988,32 @@
                 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);
+            /* Have to take into account basewin border */
+            winRect.left -= baseRect.left;
+            winRect.top -= baseRect.top;
+
+            /* In case of WS_CAPTION (titlebar on) we have to subtract caption size and
+               additional borders to get screen coordinates.
+               If the main window is also resizeable then border sizes change from SM_CnFIXEDFRAME
+               to SM_CnSIZEFRAME
+            */
+            if (GetWindowLongPtr (((Window *) baseWin)->hwnd, GWL_STYLE) & WS_CAPTION && !mainResizeable)
+            {
+                winRect.left -= GetSystemMetrics (SM_CXFIXEDFRAME);
+                winRect.top -= (GetSystemMetrics (SM_CYFIXEDFRAME) + GetSystemMetrics (SM_CYCAPTION));
+            }
+            else if (GetWindowLongPtr (((Window *) baseWin)->hwnd, GWL_STYLE) & WS_CAPTION && mainResizeable)
+            {
+                winRect.left -= GetSystemMetrics (SM_CXSIZEFRAME);
+                winRect.top -= (GetSystemMetrics (SM_CYSIZEFRAME) + GetSystemMetrics (SM_CYCAPTION));
+            }
+            else if (!(GetWindowLongPtr (((Window *) baseWin)->hwnd, GWL_STYLE) & WS_CAPTION) && mainResizeable)
+            {
+                winRect.left -= GetSystemMetrics (SM_CXSIZEFRAME) - 1;
+                winRect.top -= GetSystemMetrics (SM_CYSIZEFRAME) - 1;
+            }
  
-            MoveWindow (((Window *) w)->hwnd, winRect.left - win->border, winRect.top - win->border,
+            MoveWindow (((Window *) w)->hwnd, winRect.left, winRect.top,
                         width, height, TRUE);
  
             // All windows based on TWINSIDE are out of position now, but the team
@@ -2013,6 +2036,7 @@
         else if (windowMove && (Window *) mapw != NULL && win->hwnd == ((Window *) mapw)->hwnd)
         {
             GetWindowRect (((Window *) mapw)->hwnd, &winRect);
+            GetWindowRect (((Window *) baseWin)->hwnd, &baseRect);
 
             // Have to reinitialize SDB
             SelectObject (mapSDB->mem_dc, mapSDB->old_bmp);
@@ -2030,12 +2054,33 @@
             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,
+            /* Have to take into account basewin border */
+            winRect.left -= baseRect.left;
+            winRect.top -= baseRect.top;
+
+            /* In case of WS_CAPTION (titlebar on) we have to subtract caption size and
+               additional borders to get screen coordinates.
+               If the main window is also resizeable then border sizes change from SM_CnFIXEDFRAME
+               to SM_CnSIZEFRAME
+            */
+            if (GetWindowLongPtr (((Window *) baseWin)->hwnd, GWL_STYLE) & WS_CAPTION && !mainResizeable)
+            {
+                winRect.left -= GetSystemMetrics (SM_CXFIXEDFRAME);
+                winRect.top -= (GetSystemMetrics (SM_CYFIXEDFRAME) + GetSystemMetrics (SM_CYCAPTION));
+            }
+            else if (GetWindowLongPtr (((Window *) baseWin)->hwnd, GWL_STYLE) & WS_CAPTION && mainResizeable)
+            {
+                winRect.left -= GetSystemMetrics (SM_CXSIZEFRAME);
+                winRect.top -= (GetSystemMetrics (SM_CYSIZEFRAME) + GetSystemMetrics (SM_CYCAPTION));
+            }
+            else if (!(GetWindowLongPtr (((Window *) baseWin)->hwnd, GWL_STYLE) & WS_CAPTION) && mainResizeable)
+            {
+                winRect.left -= GetSystemMetrics (SM_CXSIZEFRAME) - 1;
+                winRect.top -= GetSystemMetrics (SM_CYSIZEFRAME) - 1;
+            }
+
+            MoveWindow (((Window *) mapw)->hwnd, winRect.left, winRect.top,
                         width, height, TRUE);
 
             redrawall = 1;

Index: local.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/local.c,v
retrieving revision 1.93
retrieving revision 1.94
diff -u -d -r1.93 -r1.94
--- local.c	11 Apr 2007 01:10:04 -0000	1.93
+++ local.c	11 Apr 2007 08:03:08 -0000	1.94
@@ -735,8 +735,7 @@
 /* Twarp sounds put up here so observers can hear them */            
 #ifdef SOUND
        /* Have to use me->p_flags because server doesn't send us twarp flag info
-        on other players.  Current Vanilla does not let observer change players
-        if the player they are observing is transwarping. */
+        on other players. */
         if (twarpflag != (me->p_flags & PFTWARP))
         {
             /* change in warp state */