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_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
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
|
@ -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
|
||||||
*/
|
*/
|
||||||
|
@ -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,
|
||||||
|
@ -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
|
||||||
*/
|
*/
|
||||||
|
@ -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 )
|
||||||
{
|
{
|
||||||
|
@ -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
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user