X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fmswin%2Ffg_state_mswin.c;h=27a94616b1f7c7bbbf4852af12065864e57f3867;hb=a5b0c9c64f5c4a35b82af7156f90bbae59d9c405;hp=9ce47fa5b527a4aae4582dd5b2be851580d4a37c;hpb=9ed8564f6fe4382f9e16118f8ea8e2054f4be71c;p=freeglut diff --git a/src/mswin/fg_state_mswin.c b/src/mswin/fg_state_mswin.c index 9ce47fa..27a9461 100644 --- a/src/mswin/fg_state_mswin.c +++ b/src/mswin/fg_state_mswin.c @@ -141,16 +141,24 @@ int fgPlatformGlutGet ( GLenum eWhat ) return returnValue; case GLUT_WINDOW_BUFFER_SIZE: - returnValue = 1 ; /* TODO????? */ - return returnValue; + { + PIXELFORMATDESCRIPTOR pfd; + HDC hdc = fgStructure.CurrentWindow->Window.pContext.Device; + int iPixelFormat = GetPixelFormat( hdc ); + DescribePixelFormat(hdc, iPixelFormat, sizeof(PIXELFORMATDESCRIPTOR), &pfd); + + returnValue = pfd.cColorBits; + if (pfd.iPixelType==PFD_TYPE_RGBA) + returnValue += pfd.cAlphaBits; + + return returnValue; + } case GLUT_WINDOW_STENCIL_SIZE: - returnValue = 0 ; /* TODO????? */ + glGetIntegerv ( GL_STENCIL_BITS, &returnValue ); return returnValue; case GLUT_WINDOW_X: case GLUT_WINDOW_Y: - case GLUT_WINDOW_WIDTH: - case GLUT_WINDOW_HEIGHT: { /* * There is considerable confusion about the "right thing to @@ -172,45 +180,47 @@ int fgPlatformGlutGet ( GLenum eWhat ) * is happening here for Windows--"freeglut" will return * the size of the drawable area--the (w,h) that you * specified when you created the window--and the coordinates - * of the upper left hand corner of the drawable - * area--which is NOT the (x,y) you specified. + * of the upper left hand corner of the drawable area, i.e. + * of the client rect--which is NOT the (x,y) you specified. */ RECT winRect; + POINT topLeft = {0,0}; freeglut_return_val_if_fail( fgStructure.CurrentWindow != NULL, 0 ); #if defined(_WIN32_WCE) - GetWindowRect( fgStructure.CurrentWindow->Window.Handle, &winRect ); + GetWindowRect( fgStructure.CurrentWindow->Window.Handle, &winRect); #else - fghGetClientArea(&winRect,fgStructure.CurrentWindow, FALSE); - if (fgStructure.CurrentWindow->Parent && (eWhat==GLUT_WINDOW_X || eWhat==GLUT_WINDOW_Y)) - { + ClientToScreen(fgStructure.CurrentWindow->Window.Handle, &topLeft); + + if (fgStructure.CurrentWindow->Parent) /* For child window, we should return relative to upper-left - * of parent's client area. + * of parent's client area. */ - POINT topleft; - topleft.x = winRect.left; - topleft.y = winRect.top; + ScreenToClient(fgStructure.CurrentWindow->Parent->Window.Handle,&topLeft); - ScreenToClient(fgStructure.CurrentWindow->Parent->Window.Handle,&topleft); - winRect.left = topleft.x; - winRect.top = topleft.y; - } + winRect.left = topLeft.x; + winRect.top = topLeft.y; #endif /* defined(_WIN32_WCE) */ switch( eWhat ) { - case GLUT_WINDOW_X: return winRect.left ; - 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; + case GLUT_WINDOW_X: return winRect.left; + case GLUT_WINDOW_Y: return winRect.top ; } } break; + case GLUT_WINDOW_WIDTH: + freeglut_return_val_if_fail( fgStructure.CurrentWindow != NULL, 0 ); + return fgStructure.CurrentWindow->State.Width; + case GLUT_WINDOW_HEIGHT: + freeglut_return_val_if_fail( fgStructure.CurrentWindow != NULL, 0 ); + return fgStructure.CurrentWindow->State.Height; + case GLUT_WINDOW_BORDER_WIDTH : - case GLUT_WINDOW_HEADER_HEIGHT : + case GLUT_WINDOW_BORDER_HEIGHT : #if defined(_WIN32_WCE) return 0; #else @@ -249,8 +259,7 @@ int fgPlatformGlutGet ( GLenum eWhat ) { case GLUT_WINDOW_BORDER_WIDTH: return borderWidth; - case GLUT_WINDOW_HEADER_HEIGHT: - /* Need to query for WS_MAXIMIZEBOX to see if we have a title bar, the WS_CAPTION query is also true for a WS_DLGFRAME only... */ + case GLUT_WINDOW_BORDER_HEIGHT: return captionHeight; } }