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
This commit is contained in:
dcnieho 2013-02-13 10:28:26 +00:00
parent 4f1f85c231
commit 813addede1
8 changed files with 108 additions and 116 deletions

View File

@ -67,7 +67,6 @@ SET(FREEGLUT_SRCS
src/fg_input_devices.c src/fg_input_devices.c
src/fg_joystick.c src/fg_joystick.c
src/fg_main.c src/fg_main.c
src/fg_main.h
src/fg_misc.c src/fg_misc.c
src/fg_overlay.c src/fg_overlay.c
src/fg_spaceball.c src/fg_spaceball.c

View File

@ -28,7 +28,6 @@
#include <GL/freeglut.h> #include <GL/freeglut.h>
#include "fg_internal.h" #include "fg_internal.h"
#include "fg_main.h"
#include "egl/fg_window_egl.h" #include "egl/fg_window_egl.h"
#include <android/log.h> #include <android/log.h>
@ -139,22 +138,6 @@ static unsigned char key_ascii(struct android_app* app, AInputEvent* event) {
return ascii; 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 ) unsigned long fgPlatformSystemTime ( void )
{ {
struct timeval now; struct timeval now;

View File

@ -30,8 +30,6 @@
#include "fg_internal.h" #include "fg_internal.h"
extern void fgPlatformProcessSingleEvent(void); 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 unsigned long fgPlatformSystemTime(void);
extern void fgPlatformSleepForEvents(long msec); extern void fgPlatformSleepForEvents(long msec);
extern void fgPlatformMainLoopPreliminaryWork(void); extern void fgPlatformMainLoopPreliminaryWork(void);

View File

@ -32,6 +32,8 @@
#include "egl/fg_window_egl.h" #include "egl/fg_window_egl.h"
#include <android/native_app_glue/android_native_app_glue.h> #include <android/native_app_glue/android_native_app_glue.h>
extern void fghRedrawWindow(SFG_Window *window);
/* /*
* Opens a window. Requires a SFG_Window object created and attached * Opens a window. Requires a SFG_Window object created and attached
* to the freeglut structure. OpenGL context is created here. * 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; 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 * Closes a window, destroying the frame and OpenGL context
*/ */

View File

@ -58,82 +58,6 @@ GXOPENINPUT GXOpenInput_ = NULL;
struct GXKeyList gxKeyList; struct GXKeyList gxKeyList;
#endif /* _WIN32_WCE */ #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. /* Get system time, taking special precautions against 32bit timer wrap.
We use timeGetTime and not GetTickCount because of its better stability, We use timeGetTime and not GetTickCount because of its better stability,

View File

@ -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 * Closes a window, destroying the frame and OpenGL context
*/ */

View File

@ -40,7 +40,6 @@
# define VFPRINTF(s,f,a) # define VFPRINTF(s,f,a)
#endif #endif
#include "fg_main.h"
/* /*
* Try to get the maximum value allowed for ints, falling back to the minimum * 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 ) fg_time_t fgPlatformSystemTime ( void )
{ {

View File

@ -32,6 +32,8 @@
#include <unistd.h> /* usleep */ #include <unistd.h> /* usleep */
#include "../fg_internal.h" #include "../fg_internal.h"
extern void fghRedrawWindow(SFG_Window *window);
#ifdef EGL_VERSION_1_0 #ifdef EGL_VERSION_1_0
#include "egl/fg_window_egl.h" #include "egl/fg_window_egl.h"
#define fghCreateNewContext fghCreateNewContextEGL #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 * Closes a window, destroying the frame and OpenGL context
*/ */