GLUT_WINDOW_WIDTH and GLUT_WINDOW_HEIGHT can simply be gotten from the

window's state. This also simplifies GLUT_WINDOW_X and GLUT_WINDOW_Y a
lot


git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@1484 7f0cb862-5218-0410-a997-914c9d46530a
This commit is contained in:
dcnieho 2012-11-23 09:31:52 +00:00
parent 0eb960d0a1
commit 1917f56dce

View File

@ -149,8 +149,6 @@ int fgPlatformGlutGet ( GLenum eWhat )
case GLUT_WINDOW_X: case GLUT_WINDOW_X:
case GLUT_WINDOW_Y: case GLUT_WINDOW_Y:
case GLUT_WINDOW_WIDTH:
case GLUT_WINDOW_HEIGHT:
{ {
/* /*
* There is considerable confusion about the "right thing to * There is considerable confusion about the "right thing to
@ -172,41 +170,43 @@ int fgPlatformGlutGet ( GLenum eWhat )
* is happening here for Windows--"freeglut" will return * is happening here for Windows--"freeglut" will return
* the size of the drawable area--the (w,h) that you * the size of the drawable area--the (w,h) that you
* specified when you created the window--and the coordinates * specified when you created the window--and the coordinates
* of the upper left hand corner of the drawable * of the upper left hand corner of the drawable area, i.e.
* area--which is NOT the (x,y) you specified. * of the client rect--which is NOT the (x,y) you specified.
*/ */
RECT winRect; RECT winRect;
POINT topLeft = {0,0};
freeglut_return_val_if_fail( fgStructure.CurrentWindow != NULL, 0 ); freeglut_return_val_if_fail( fgStructure.CurrentWindow != NULL, 0 );
#if defined(_WIN32_WCE) #if defined(_WIN32_WCE)
GetWindowRect( fgStructure.CurrentWindow->Window.Handle, &winRect); GetWindowRect( fgStructure.CurrentWindow->Window.Handle, &winRect);
#else #else
fghGetClientArea(&winRect,fgStructure.CurrentWindow, FALSE); ClientToScreen(fgStructure.CurrentWindow->Window.Handle, &topLeft);
if (fgStructure.CurrentWindow->Parent && (eWhat==GLUT_WINDOW_X || eWhat==GLUT_WINDOW_Y))
{ if (fgStructure.CurrentWindow->Parent)
/* For child window, we should return relative to upper-left /* For child window, we should return relative to upper-left
* of parent's client area. * of parent's client area.
*/ */
POINT topleft = {winRect.left,winRect.top}; ScreenToClient(fgStructure.CurrentWindow->Parent->Window.Handle,&topLeft);
ScreenToClient(fgStructure.CurrentWindow->Parent->Window.Handle,&topleft); winRect.left = topLeft.x;
winRect.left = topleft.x; winRect.top = topLeft.y;
winRect.top = topleft.y;
}
#endif /* defined(_WIN32_WCE) */ #endif /* defined(_WIN32_WCE) */
switch( eWhat ) switch( eWhat )
{ {
case GLUT_WINDOW_X: return winRect.left; case GLUT_WINDOW_X: return winRect.left;
case GLUT_WINDOW_Y: return winRect.top ; case GLUT_WINDOW_Y: return winRect.top ;
case GLUT_WINDOW_WIDTH: return winRect.right - winRect.left;
case GLUT_WINDOW_HEIGHT: return winRect.bottom - winRect.top;
} }
} }
break; break;
case GLUT_WINDOW_WIDTH:
return fgStructure.CurrentWindow->State.Width;
case GLUT_WINDOW_HEIGHT:
return fgStructure.CurrentWindow->State.Height;
case GLUT_WINDOW_BORDER_WIDTH : case GLUT_WINDOW_BORDER_WIDTH :
case GLUT_WINDOW_BORDER_HEIGHT : case GLUT_WINDOW_BORDER_HEIGHT :
#if defined(_WIN32_WCE) #if defined(_WIN32_WCE)