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:
parent
4f1f85c231
commit
813addede1
@ -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
|
||||
|
@ -28,7 +28,6 @@
|
||||
|
||||
#include <GL/freeglut.h>
|
||||
#include "fg_internal.h"
|
||||
#include "fg_main.h"
|
||||
#include "egl/fg_window_egl.h"
|
||||
|
||||
#include <android/log.h>
|
||||
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -32,6 +32,8 @@
|
||||
#include "egl/fg_window_egl.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
|
||||
* 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
|
||||
*/
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
*/
|
||||
|
@ -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 )
|
||||
{
|
||||
|
@ -32,6 +32,8 @@
|
||||
#include <unistd.h> /* 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
|
||||
*/
|
||||
|
Reference in New Issue
Block a user