From 813addede1977e958f04de8001ae04b362bae1b9 Mon Sep 17 00:00:00 2001 From: dcnieho Date: Wed, 13 Feb 2013 10:28:26 +0000 Subject: [PATCH] moving fgPlatformReshapeWindow and fgPlatformDisplayWindow from fg_main_x to fg_window_x. Hope this didn't break anything for X11 or andriod git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@1504 7f0cb862-5218-0410-a997-914c9d46530a --- freeglut/freeglut/CMakeLists.txt | 1 - .../freeglut/src/android/fg_main_android.c | 17 ----- .../freeglut/src/android/fg_main_android.h | 2 - .../freeglut/src/android/fg_window_android.c | 18 +++++ freeglut/freeglut/src/mswin/fg_main_mswin.c | 76 ------------------- freeglut/freeglut/src/mswin/fg_window_mswin.c | 68 +++++++++++++++++ freeglut/freeglut/src/x11/fg_main_x11.c | 20 ----- freeglut/freeglut/src/x11/fg_window_x11.c | 22 ++++++ 8 files changed, 108 insertions(+), 116 deletions(-) diff --git a/freeglut/freeglut/CMakeLists.txt b/freeglut/freeglut/CMakeLists.txt index 26b03a6..8dd1fef 100644 --- a/freeglut/freeglut/CMakeLists.txt +++ b/freeglut/freeglut/CMakeLists.txt @@ -67,7 +67,6 @@ SET(FREEGLUT_SRCS src/fg_input_devices.c src/fg_joystick.c src/fg_main.c - src/fg_main.h src/fg_misc.c src/fg_overlay.c src/fg_spaceball.c diff --git a/freeglut/freeglut/src/android/fg_main_android.c b/freeglut/freeglut/src/android/fg_main_android.c index cf2690b..15d31e6 100644 --- a/freeglut/freeglut/src/android/fg_main_android.c +++ b/freeglut/freeglut/src/android/fg_main_android.c @@ -28,7 +28,6 @@ #include #include "fg_internal.h" -#include "fg_main.h" #include "egl/fg_window_egl.h" #include @@ -139,22 +138,6 @@ static unsigned char key_ascii(struct android_app* app, AInputEvent* event) { return ascii; } -/* - * Request a window resize - */ -void fgPlatformReshapeWindow ( SFG_Window *window, int width, int height ) -{ - fprintf(stderr, "fgPlatformReshapeWindow: STUB\n"); -} - -/* - * A static helper function to execute display callback for a window - */ -void fgPlatformDisplayWindow ( SFG_Window *window ) -{ - fghRedrawWindow ( window ) ; -} - unsigned long fgPlatformSystemTime ( void ) { struct timeval now; diff --git a/freeglut/freeglut/src/android/fg_main_android.h b/freeglut/freeglut/src/android/fg_main_android.h index 0f1f2ba..a0dfdfe 100644 --- a/freeglut/freeglut/src/android/fg_main_android.h +++ b/freeglut/freeglut/src/android/fg_main_android.h @@ -30,8 +30,6 @@ #include "fg_internal.h" extern void fgPlatformProcessSingleEvent(void); -extern void fgPlatformReshapeWindow(SFG_Window *window, int width, int height); -extern void fgPlatformDisplayWindow(SFG_Window *window); extern unsigned long fgPlatformSystemTime(void); extern void fgPlatformSleepForEvents(long msec); extern void fgPlatformMainLoopPreliminaryWork(void); diff --git a/freeglut/freeglut/src/android/fg_window_android.c b/freeglut/freeglut/src/android/fg_window_android.c index 5d1bc19..65f4d4d 100644 --- a/freeglut/freeglut/src/android/fg_window_android.c +++ b/freeglut/freeglut/src/android/fg_window_android.c @@ -32,6 +32,8 @@ #include "egl/fg_window_egl.h" #include +extern void fghRedrawWindow(SFG_Window *window); + /* * Opens a window. Requires a SFG_Window object created and attached * to the freeglut structure. OpenGL context is created here. @@ -85,6 +87,22 @@ void fgPlatformOpenWindow( SFG_Window* window, const char* title, window->State.Visible = GL_TRUE; } +/* + * Request a window resize + */ +void fgPlatformReshapeWindow ( SFG_Window *window, int width, int height ) +{ + fprintf(stderr, "fgPlatformReshapeWindow: STUB\n"); +} + +/* + * A static helper function to execute display callback for a window + */ +void fgPlatformDisplayWindow ( SFG_Window *window ) +{ + fghRedrawWindow ( window ) ; +} + /* * Closes a window, destroying the frame and OpenGL context */ diff --git a/freeglut/freeglut/src/mswin/fg_main_mswin.c b/freeglut/freeglut/src/mswin/fg_main_mswin.c index 3769cb4..8be93e8 100644 --- a/freeglut/freeglut/src/mswin/fg_main_mswin.c +++ b/freeglut/freeglut/src/mswin/fg_main_mswin.c @@ -58,82 +58,6 @@ GXOPENINPUT GXOpenInput_ = NULL; struct GXKeyList gxKeyList; #endif /* _WIN32_WCE */ -/* - * Helper functions for getting client area from the window rect - * 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 fghComputeWindowRectFromClientArea_QueryWindow( RECT *clientRect, const SFG_Window *window, BOOL posIsOutside ); -extern void fghGetClientArea ( RECT *clientRect, const SFG_Window *window, BOOL wantPosOutside ); - - -void fgPlatformReshapeWindow ( SFG_Window *window, int width, int height ) -{ - RECT windowRect; - - /* - * For windowed mode, get the current position of the - * window and resize taking the size of the frame - * decorations into account. - * - * Note on maximizing behavior of Windows: the resize borders are off - * the screen such that the client area extends all the way from the - * leftmost corner to the rightmost corner to maximize screen real - * estate. A caption is still shown however to allow interaction with - * the window controls. This is default behavior of Windows that - * FreeGLUT sticks with. To alter, one would have to check if - * WS_MAXIMIZE style is set when a resize event is triggered, and - * then manually correct the windowRect to put the borders back on - * screen. - */ - - /* "GetWindowRect" returns the pixel coordinates of the outside of the window */ - GetWindowRect( window->Window.Handle, &windowRect ); - - /* Create rect in FreeGLUT format, (X,Y) topleft outside window, WxH of client area */ - windowRect.right = windowRect.left+width; - windowRect.bottom = windowRect.top+height; - - if (window->Parent == NULL) - /* get the window rect from this to feed to SetWindowPos, correct for window decorations */ - fghComputeWindowRectFromClientArea_QueryWindow(&windowRect,window,TRUE); - else - { - /* correct rect for position client area of parent window - * (SetWindowPos input for child windows is in coordinates - * relative to the parent's client area). - * Child windows don't have decoration, so no need to correct - * for them. - */ - RECT parentRect; - fghGetClientArea( &parentRect, window->Parent, FALSE ); - OffsetRect(&windowRect,-parentRect.left,-parentRect.top); - } - - /* Do the actual resizing */ - SetWindowPos( window->Window.Handle, - HWND_TOP, - windowRect.left, windowRect.top, - windowRect.right - windowRect.left, - windowRect.bottom- windowRect.top, - SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSENDCHANGING | - SWP_NOZORDER - ); - - /* Set new width and height so we can test for that in WM_SIZE message handler and don't do anything if not needed */ - window->State.Width = width; - window->State.Height = height; -} - - -void fgPlatformDisplayWindow ( SFG_Window *window ) -{ - RedrawWindow( - window->Window.Handle, NULL, NULL, - RDW_NOERASE | RDW_INTERNALPAINT | RDW_INVALIDATE | RDW_UPDATENOW - ); -} - /* Get system time, taking special precautions against 32bit timer wrap. We use timeGetTime and not GetTickCount because of its better stability, diff --git a/freeglut/freeglut/src/mswin/fg_window_mswin.c b/freeglut/freeglut/src/mswin/fg_window_mswin.c index f252948..621a18a 100644 --- a/freeglut/freeglut/src/mswin/fg_window_mswin.c +++ b/freeglut/freeglut/src/mswin/fg_window_mswin.c @@ -759,6 +759,74 @@ void fgPlatformOpenWindow( SFG_Window* window, const char* title, } +void fgPlatformDisplayWindow ( SFG_Window *window ) +{ + RedrawWindow( + window->Window.Handle, NULL, NULL, + RDW_NOERASE | RDW_INTERNALPAINT | RDW_INVALIDATE | RDW_UPDATENOW + ); +} + + +void fgPlatformReshapeWindow ( SFG_Window *window, int width, int height ) +{ + RECT windowRect; + + /* + * For windowed mode, get the current position of the + * window and resize taking the size of the frame + * decorations into account. + * + * Note on maximizing behavior of Windows: the resize borders are off + * the screen such that the client area extends all the way from the + * leftmost corner to the rightmost corner to maximize screen real + * estate. A caption is still shown however to allow interaction with + * the window controls. This is default behavior of Windows that + * FreeGLUT sticks with. To alter, one would have to check if + * WS_MAXIMIZE style is set when a resize event is triggered, and + * then manually correct the windowRect to put the borders back on + * screen. + */ + + /* "GetWindowRect" returns the pixel coordinates of the outside of the window */ + GetWindowRect( window->Window.Handle, &windowRect ); + + /* Create rect in FreeGLUT format, (X,Y) topleft outside window, WxH of client area */ + windowRect.right = windowRect.left+width; + windowRect.bottom = windowRect.top+height; + + if (window->Parent == NULL) + /* get the window rect from this to feed to SetWindowPos, correct for window decorations */ + fghComputeWindowRectFromClientArea_QueryWindow(&windowRect,window,TRUE); + else + { + /* correct rect for position client area of parent window + * (SetWindowPos input for child windows is in coordinates + * relative to the parent's client area). + * Child windows don't have decoration, so no need to correct + * for them. + */ + RECT parentRect; + fghGetClientArea( &parentRect, window->Parent, FALSE ); + OffsetRect(&windowRect,-parentRect.left,-parentRect.top); + } + + /* Do the actual resizing */ + SetWindowPos( window->Window.Handle, + HWND_TOP, + windowRect.left, windowRect.top, + windowRect.right - windowRect.left, + windowRect.bottom- windowRect.top, + SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSENDCHANGING | + SWP_NOZORDER + ); + + /* Set new width and height so we can test for that in WM_SIZE message handler and don't do anything if not needed */ + window->State.Width = width; + window->State.Height = height; +} + + /* * Closes a window, destroying the frame and OpenGL context */ diff --git a/freeglut/freeglut/src/x11/fg_main_x11.c b/freeglut/freeglut/src/x11/fg_main_x11.c index 8387ba8..c803b2b 100644 --- a/freeglut/freeglut/src/x11/fg_main_x11.c +++ b/freeglut/freeglut/src/x11/fg_main_x11.c @@ -40,7 +40,6 @@ # define VFPRINTF(s,f,a) #endif -#include "fg_main.h" /* * Try to get the maximum value allowed for ints, falling back to the minimum @@ -72,25 +71,6 @@ static Bool match_motion(Display *dpy, XEvent *xev, XPointer arg); */ -/* - * Request a window resize - */ -void fgPlatformReshapeWindow ( SFG_Window *window, int width, int height ) -{ - XResizeWindow( fgDisplay.pDisplay.Display, window->Window.Handle, - width, height ); - XFlush( fgDisplay.pDisplay.Display ); /* XXX Shouldn't need this */ -} - - -/* - * A static helper function to execute display callback for a window - */ -void fgPlatformDisplayWindow ( SFG_Window *window ) -{ - fghRedrawWindow ( window ) ; -} - fg_time_t fgPlatformSystemTime ( void ) { diff --git a/freeglut/freeglut/src/x11/fg_window_x11.c b/freeglut/freeglut/src/x11/fg_window_x11.c index 61a3bd6..2afe99e 100644 --- a/freeglut/freeglut/src/x11/fg_window_x11.c +++ b/freeglut/freeglut/src/x11/fg_window_x11.c @@ -32,6 +32,8 @@ #include /* usleep */ #include "../fg_internal.h" +extern void fghRedrawWindow(SFG_Window *window); + #ifdef EGL_VERSION_1_0 #include "egl/fg_window_egl.h" #define fghCreateNewContext fghCreateNewContextEGL @@ -369,6 +371,26 @@ void fgPlatformOpenWindow( SFG_Window* window, const char* title, } +/* + * Request a window resize + */ +void fgPlatformReshapeWindow ( SFG_Window *window, int width, int height ) +{ + XResizeWindow( fgDisplay.pDisplay.Display, window->Window.Handle, + width, height ); + XFlush( fgDisplay.pDisplay.Display ); /* XXX Shouldn't need this */ +} + + +/* + * A static helper function to execute display callback for a window + */ +void fgPlatformDisplayWindow ( SFG_Window *window ) +{ + fghRedrawWindow ( window ) ; +} + + /* * Closes a window, destroying the frame and OpenGL context */