simplified some window rect calculations
git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@1539 7f0cb862-5218-0410-a997-914c9d46530a
This commit is contained in:
parent
5e48d25cdb
commit
4d83b5ab50
@ -29,7 +29,7 @@
|
|||||||
#include <GL/freeglut.h>
|
#include <GL/freeglut.h>
|
||||||
#include "../fg_internal.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 )
|
GLvoid fgPlatformGetGameModeVMaxExtent( SFG_Window* window, int* x, int* y )
|
||||||
@ -74,7 +74,7 @@ void fgPlatformCheckMenuDeactivate()
|
|||||||
*/
|
*/
|
||||||
POINT mouse_pos;
|
POINT mouse_pos;
|
||||||
RECT clientArea;
|
RECT clientArea;
|
||||||
fghGetClientArea(&clientArea,menu->ParentWindow, GL_FALSE);
|
fghGetClientArea(&clientArea,menu->ParentWindow);
|
||||||
GetCursorPos(&mouse_pos);
|
GetCursorPos(&mouse_pos);
|
||||||
if ( !PtInRect( &clientArea, mouse_pos ) )
|
if ( !PtInRect( &clientArea, mouse_pos ) )
|
||||||
fgDeactivateMenu(menu->ParentWindow);
|
fgDeactivateMenu(menu->ParentWindow);
|
||||||
|
@ -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
|
* 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).
|
* (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 fghGetStyleFromWindow( const SFG_Window *window, DWORD *windowStyle, DWORD *windowExStyle );
|
||||||
extern void fghComputeWindowRectFromClientArea_UseStyle( RECT *clientRect, const DWORD windowStyle, const DWORD windowExStyle, BOOL posIsOutside );
|
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 */
|
/* Get style of window, or default style */
|
||||||
fghGetStyleFromWindow( fgStructure.CurrentWindow, &windowStyle, &windowExStyle );
|
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)
|
if (fgStructure.CurrentWindow && fgStructure.CurrentWindow->Window.Handle)
|
||||||
fghGetClientArea(&clientRect,fgStructure.CurrentWindow,FALSE);
|
{
|
||||||
|
fghGetClientArea(&clientRect,fgStructure.CurrentWindow);
|
||||||
|
GetWindowRect(fgStructure.CurrentWindow->Window.Handle,&winRect);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
SetRect(&clientRect,0,0,200,200);
|
SetRect(&clientRect,0,0,200,200);
|
||||||
|
|
||||||
/* Compute window rect (including non-client area) */
|
|
||||||
CopyRect(&winRect,&clientRect);
|
CopyRect(&winRect,&clientRect);
|
||||||
fghComputeWindowRectFromClientArea_UseStyle(&winRect,windowStyle,windowExStyle,FALSE);
|
fghComputeWindowRectFromClientArea_UseStyle(&winRect,windowStyle,windowExStyle,FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
/* Calculate border width by taking width of whole window minus width of client area and divide by two
|
/* 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
|
* NB: we assume horizontal and vertical borders have the same size, which should always be the case
|
||||||
|
@ -457,45 +457,22 @@ void fghComputeWindowRectFromClientArea_QueryWindow( RECT *clientRect, const SFG
|
|||||||
|
|
||||||
/* Gets the rect describing the client area (drawable area) of the
|
/* 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.
|
* 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.
|
* Does not touch clientRect if window pointer or window handle is NULL.
|
||||||
* If wantPosOutside is set to true, the output client Rect
|
* (rect.right-rect.left,rect.bottom-rect.top) is the size of the drawable area.
|
||||||
* 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.
|
|
||||||
*/
|
*/
|
||||||
void fghGetClientArea( RECT *clientRect, const SFG_Window *window, BOOL wantPosOutside )
|
void fghGetClientArea( RECT *clientRect, const SFG_Window *window )
|
||||||
{
|
{
|
||||||
POINT topLeftClient = {0,0};
|
POINT topLeftClient = {0,0};
|
||||||
POINT topLeftWindow = {0,0};
|
POINT topLeftWindow = {0,0};
|
||||||
|
|
||||||
freeglut_return_if_fail((window && window->Window.Handle));
|
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 */
|
/* Get size of client rect */
|
||||||
GetClientRect(window->Window.Handle, clientRect);
|
GetClientRect(window->Window.Handle, clientRect);
|
||||||
/* Get position of top-left of client area on the screen */
|
/* Get position of top-left of client area on the screen */
|
||||||
ClientToScreen(window->Window.Handle,&topLeftClient);
|
ClientToScreen(window->Window.Handle,&topLeftClient);
|
||||||
/* Add top-left offset */
|
/* Add top-left offset */
|
||||||
OffsetRect(clientRect,topLeftClient.x,topLeftClient.y);
|
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)
|
#if(WINVER >= 0x500)
|
||||||
@ -807,7 +784,7 @@ void fgPlatformReshapeWindow ( SFG_Window *window, int width, int height )
|
|||||||
* for them.
|
* for them.
|
||||||
*/
|
*/
|
||||||
RECT parentRect;
|
RECT parentRect;
|
||||||
fghGetClientArea( &parentRect, window->Parent, FALSE );
|
fghGetClientArea( &parentRect, window->Parent );
|
||||||
OffsetRect(&windowRect,-parentRect.left,-parentRect.top);
|
OffsetRect(&windowRect,-parentRect.left,-parentRect.top);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user