From af4474129987c478bad43ff0b4f44c2470298a8d Mon Sep 17 00:00:00 2001 From: Diederick Niehorster Date: Fri, 1 Mar 2013 07:41:23 +0000 Subject: [PATCH] simplified some window rect calculations 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 | 4 ++-- src/mswin/fg_state_mswin.c | 18 +++++++++++------- src/mswin/fg_window_mswin.c | 31 ++++--------------------------- 3 files changed, 17 insertions(+), 36 deletions(-) diff --git a/src/mswin/fg_menu_mswin.c b/src/mswin/fg_menu_mswin.c index 3d83693..a5afd46 100644 --- a/src/mswin/fg_menu_mswin.c +++ b/src/mswin/fg_menu_mswin.c @@ -29,7 +29,7 @@ #include #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); diff --git a/src/mswin/fg_state_mswin.c b/src/mswin/fg_state_mswin.c index 27a9461..a217747 100644 --- a/src/mswin/fg_state_mswin.c +++ b/src/mswin/fg_state_mswin.c @@ -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 diff --git a/src/mswin/fg_window_mswin.c b/src/mswin/fg_window_mswin.c index ea2dc15..6a86848 100644 --- a/src/mswin/fg_window_mswin.c +++ b/src/mswin/fg_window_mswin.c @@ -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); } -- 1.7.10.4