#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 )
*/
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);
* 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 );
/* 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
/* 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)
* for them.
*/
RECT parentRect;
- fghGetClientArea( &parentRect, window->Parent, FALSE );
+ fghGetClientArea( &parentRect, window->Parent );
OffsetRect(&windowRect,-parentRect.left,-parentRect.top);
}