simplified some window rect calculations
authorDiederick Niehorster <dcnieho@gmail.com>
Fri, 1 Mar 2013 07:41:23 +0000 (07:41 +0000)
committerDiederick Niehorster <dcnieho@gmail.com>
Fri, 1 Mar 2013 07:41:23 +0000 (07:41 +0000)
git-svn-id: svn+ssh://svn.code.sf.net/p/freeglut/code/trunk/freeglut/freeglut@1539 7f0cb862-5218-0410-a997-914c9d46530a

src/mswin/fg_menu_mswin.c
src/mswin/fg_state_mswin.c
src/mswin/fg_window_mswin.c

index 3d83693..a5afd46 100644 (file)
@@ -29,7 +29,7 @@
 #include <GL/freeglut.h>
 #include "../fg_internal.h"
 
-extern void fghGetClientArea( RECT *clientRect, const SFG_Window *window, BOOL wantPosOutside );
+extern void fghGetClientArea( RECT *clientRect, const SFG_Window *window );
 
 
 GLvoid fgPlatformGetGameModeVMaxExtent( SFG_Window* window, int* x, int* y )
@@ -74,7 +74,7 @@ void fgPlatformCheckMenuDeactivate()
                  */
                 POINT mouse_pos;
                 RECT clientArea;
-                fghGetClientArea(&clientArea,menu->ParentWindow, GL_FALSE);
+                fghGetClientArea(&clientArea,menu->ParentWindow);
                 GetCursorPos(&mouse_pos);
                 if ( !PtInRect( &clientArea, mouse_pos ) )
                     fgDeactivateMenu(menu->ParentWindow);
index 27a9461..a217747 100644 (file)
@@ -37,7 +37,7 @@ extern GLboolean fgSetupPixelFormat( SFG_Window* window, GLboolean checkOnly,
  * and the window rect from the client area given the style of the window
  * (or a valid window pointer from which the style can be queried).
  */
-extern void fghGetClientArea( RECT *clientRect, const SFG_Window *window, BOOL wantPosOutside );
+extern void fghGetClientArea( RECT *clientRect, const SFG_Window *window );
 extern void fghGetStyleFromWindow( const SFG_Window *window, DWORD *windowStyle, DWORD *windowExStyle );
 extern void fghComputeWindowRectFromClientArea_UseStyle( RECT *clientRect, const DWORD windowStyle, const DWORD windowExStyle, BOOL posIsOutside );
 
@@ -236,15 +236,19 @@ int fgPlatformGlutGet ( GLenum eWhat )
 
             /* Get style of window, or default style */
             fghGetStyleFromWindow( fgStructure.CurrentWindow, &windowStyle, &windowExStyle );
-            /* Get client area if any window */
+            /* Get client area if we have a current window, else use dummy rect */
+            /* Also get window rect (including non-client area) */
             if (fgStructure.CurrentWindow && fgStructure.CurrentWindow->Window.Handle)
-                fghGetClientArea(&clientRect,fgStructure.CurrentWindow,FALSE);
+            {
+                fghGetClientArea(&clientRect,fgStructure.CurrentWindow);
+                GetWindowRect(fgStructure.CurrentWindow->Window.Handle,&winRect);
+            }
             else
+            {
                 SetRect(&clientRect,0,0,200,200);
-
-            /* Compute window rect (including non-client area) */
-            CopyRect(&winRect,&clientRect);
-            fghComputeWindowRectFromClientArea_UseStyle(&winRect,windowStyle,windowExStyle,FALSE);
+                CopyRect(&winRect,&clientRect);
+                fghComputeWindowRectFromClientArea_UseStyle(&winRect,windowStyle,windowExStyle,FALSE);
+            }
 
             /* Calculate border width by taking width of whole window minus width of client area and divide by two
              * NB: we assume horizontal and vertical borders have the same size, which should always be the case
index ea2dc15..6a86848 100644 (file)
@@ -457,45 +457,22 @@ void fghComputeWindowRectFromClientArea_QueryWindow( RECT *clientRect, const SFG
 
 /* Gets the rect describing the client area (drawable area) of the
  * specified window. Output is position of corners of client area (drawable area) on the screen.
- * Returns an empty rect if window pointer or window handle is NULL.
- * If wantPosOutside is set to true, the output client Rect
- * will follow freeGLUT's window specification convention in which the
- * top-left corner is at the outside of the window, while the size
- * (rect.right-rect.left,rect.bottom-rect.top) is the size of the drawable
- * area.
+ * Does not touch clientRect if window pointer or window handle is NULL.
+ * (rect.right-rect.left,rect.bottom-rect.top) is the size of the drawable area.
  */
-void fghGetClientArea( RECT *clientRect, const SFG_Window *window, BOOL wantPosOutside )
+void fghGetClientArea( RECT *clientRect, const SFG_Window *window )
 {
     POINT topLeftClient = {0,0};
     POINT topLeftWindow = {0,0};
 
     freeglut_return_if_fail((window && window->Window.Handle));
     
-    /*
-     * call GetWindowRect()
-     * (this returns the pixel coordinates of the outside of the window)
-     * cannot use GetClientRect as it returns a rect relative to
-     * the top-left point of the client area (.top and .left are thus always 0)
-     * and is thus only useful for querying the size of the client area, not
-     * its position.
-     */
-    GetWindowRect( window->Window.Handle, clientRect );
-    topLeftWindow.x = clientRect->top;
-    topLeftWindow.y = clientRect->left;
-    
     /* Get size of client rect */
     GetClientRect(window->Window.Handle, clientRect);
     /* Get position of top-left of client area on the screen */
     ClientToScreen(window->Window.Handle,&topLeftClient);
     /* Add top-left offset */
     OffsetRect(clientRect,topLeftClient.x,topLeftClient.y);
-
-    /* replace top and left with top and left of window, if wanted */
-    if (wantPosOutside)
-    {
-        clientRect->left = topLeftWindow.x;
-        clientRect->top  = topLeftWindow.y;
-    }
 }
 
 #if(WINVER >= 0x500)
@@ -807,7 +784,7 @@ void fgPlatformReshapeWindow ( SFG_Window *window, int width, int height )
          * for them.
          */
         RECT parentRect;
-        fghGetClientArea( &parentRect, window->Parent, FALSE );
+        fghGetClientArea( &parentRect, window->Parent );
         OffsetRect(&windowRect,-parentRect.left,-parentRect.top);
     }