X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Ffreeglut_main.c;h=5ad233c96ec8f68662bf0cd2f01c29f099f9e0a1;hb=fc3fee8fa830aaba7aaa585cb021d5867c89385d;hp=e45ee4deab0ca241fe75fae18720d4fde5d74396;hpb=48c513d508f6836e1fcbaa68ac2e0f2f9a486852;p=freeglut diff --git a/src/freeglut_main.c b/src/freeglut_main.c index e45ee4d..5ad233c 100644 --- a/src/freeglut_main.c +++ b/src/freeglut_main.c @@ -103,7 +103,8 @@ static void fghReshapeWindowByHandle ( SFG_WindowHandleType handle, #if !TARGET_HOST_WINCE { - RECT rect; + RECT winRect; + int x, y, w, h; /* * For windowed mode, get the current position of the @@ -111,24 +112,29 @@ static void fghReshapeWindowByHandle ( SFG_WindowHandleType handle, * decorations into account. */ - GetWindowRect( window->Window.Handle, &rect ); - rect.right = rect.left + width; - rect.bottom = rect.top + height; + /* "GetWindowRect" returns the pixel coordinates of the outside of the window */ + GetWindowRect( window->Window.Handle, &winRect ); + x = winRect.left; + y = winRect.top; + w = width; + h = height; if ( window->Parent == NULL ) { if ( ! window->IsMenu && !window->State.IsGameMode ) { - rect.right += GetSystemMetrics( SM_CXSIZEFRAME ) * 2; - rect.bottom += GetSystemMetrics( SM_CYSIZEFRAME ) * 2 + - GetSystemMetrics( SM_CYCAPTION ); + w += GetSystemMetrics( SM_CXSIZEFRAME ) * 2; + h += GetSystemMetrics( SM_CYSIZEFRAME ) * 2 + + GetSystemMetrics( SM_CYCAPTION ); } } else { - GetWindowRect( window->Parent->Window.Handle, &rect ); - AdjustWindowRect ( &rect, WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | - WS_CLIPCHILDREN, FALSE ); + RECT parentRect; + GetWindowRect( window->Parent->Window.Handle, &parentRect ); + x -= parentRect.left + GetSystemMetrics( SM_CXSIZEFRAME ) * 2; + y -= parentRect.top + GetSystemMetrics( SM_CYSIZEFRAME ) * 2 + + GetSystemMetrics( SM_CYCAPTION ); } /* @@ -140,10 +146,7 @@ static void fghReshapeWindowByHandle ( SFG_WindowHandleType handle, SetWindowPos( window->Window.Handle, HWND_TOP, - rect.left, - rect.top, - rect.right - rect.left, - rect.bottom - rect.top, + x, y, w, h, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSENDCHANGING | SWP_NOZORDER ); @@ -480,7 +483,7 @@ static void fgSleepForEvents( void ) * it is possible to have our socket drained but still have * unprocessed events. (Or, this may just be normal with * X, anyway?) We do non-trivial processing of X events - * after tham in event-reading loop, in any case, so we + * after the event-reading loop, in any case, so we * need to allow that we may have an empty socket but non- * empty event queue. */ @@ -537,9 +540,7 @@ void FGAPIENTRY glutMainLoopEvent( void ) SFG_Window* window; XEvent event; - /* - * This code was repeated constantly, so here it goes into a definition: - */ + /* This code was repeated constantly, so here it goes into a definition: */ #define GETWINDOW(a) \ window = fgWindowByHandle( event.a.window ); \ if( window == NULL ) \ @@ -558,9 +559,7 @@ void FGAPIENTRY glutMainLoopEvent( void ) switch( event.type ) { case ClientMessage: - /* - * Destroy the window when the WM_DELETE_WINDOW message arrives - */ + /* Destroy the window when the WM_DELETE_WINDOW message arrives */ if( (Atom) event.xclient.data.l[ 0 ] == fgDisplay.DeleteWindow ) { GETWINDOW( xclient ); @@ -851,17 +850,13 @@ void FGAPIENTRY glutMainLoopEvent( void ) break; } - /* - * No active menu, let's check whether we need to activate one. - */ + /* No active menu, let's check whether we need to activate one. */ if( ( 0 <= button ) && ( FREEGLUT_MAX_MENUS > button ) && ( window->Menu[ button ] ) && pressed ) { - /* - * XXX Posting a requisite Redisplay seems bogus. - */ + /* XXX Posting a requisite Redisplay seems bogus. */ window->State.Redisplay = GL_TRUE; fgSetWindow( window ); fgActivateMenu( window, button ); @@ -916,9 +911,7 @@ void FGAPIENTRY glutMainLoopEvent( void ) ); } - /* - * Trash the modifiers state - */ + /* Trash the modifiers state */ fgState.Modifiers = 0xffffffff; } break; @@ -1225,9 +1218,7 @@ LRESULT CALLBACK fgWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, switch( uMsg ) { case WM_CREATE: - /* - * The window structure is passed as the creation structure paramter... - */ + /* The window structure is passed as the creation structure paramter... */ window = (SFG_Window *) (((LPCREATESTRUCT) lParam)->lpCreateParams); assert( window != NULL ); @@ -1321,7 +1312,7 @@ LRESULT CALLBACK fgWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, break; #if 0 case WM_SETFOCUS: - /* printf("WM_SETFOCUS: %p\n", window ); */ +/* printf("WM_SETFOCUS: %p\n", window ); */ lRet = DefWindowProc( hWnd, uMsg, wParam, lParam ); break; @@ -1329,7 +1320,7 @@ LRESULT CALLBACK fgWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, if (LOWORD(wParam) != WA_INACTIVE) { /* glutSetCursor( fgStructure.Window->State.Cursor ); */ - /* printf("WM_ACTIVATE: glutSetCursor( %p, %d)\n", window, +/* printf("WM_ACTIVATE: glutSetCursor( %p, %d)\n", window, window->State.Cursor ); */ glutSetCursor( window->State.Cursor ); }