projects
/
freeglut
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fixing the window position for asynchronous X11 implementations (e-mail by Jocelyn...
[freeglut]
/
src
/
freeglut_init.c
diff --git
a/src/freeglut_init.c
b/src/freeglut_init.c
index
9cc6a72
..
054285e
100644
(file)
--- a/
src/freeglut_init.c
+++ b/
src/freeglut_init.c
@@
-60,16
+60,12
@@
SFG_State fgState = { { -1, -1, GL_FALSE }, /* Position */
GL_FALSE, /* UseCurrentContext */
GL_FALSE, /* GLDebugSwitch */
GL_FALSE, /* XSyncSwitch */
GL_FALSE, /* UseCurrentContext */
GL_FALSE, /* GLDebugSwitch */
GL_FALSE, /* XSyncSwitch */
- GL_TRUE, /* KeyRepeat */
- 0xffffffff, /* Modifiers */
+ GLUT_KEY_REPEAT_ON, /* KeyRepeat */
+ INVALID_MODIFIERS, /* Modifiers */
0, /* FPSInterval */
0, /* SwapCount */
0, /* SwapTime */
0, /* FPSInterval */
0, /* SwapCount */
0, /* SwapTime */
-#if TARGET_HOST_WIN32 || TARGET_HOST_WINCE
- { 0, GL_FALSE }, /* Time */
-#else
- { { 0, 0 }, GL_FALSE },
-#endif
+ 0, /* Time */
{ NULL, NULL }, /* Timers */
{ NULL, NULL }, /* FreeTimers */
NULL, /* IdleCallback */
{ NULL, NULL }, /* Timers */
{ NULL, NULL }, /* FreeTimers */
NULL, /* IdleCallback */
@@
-82,7
+78,10
@@
SFG_State fgState = { { -1, -1, GL_FALSE }, /* Position */
GLUT_ACTION_EXIT, /* ActionOnWindowClose */
GLUT_EXEC_STATE_INIT, /* ExecState */
NULL, /* ProgramName */
GLUT_ACTION_EXIT, /* ActionOnWindowClose */
GLUT_EXEC_STATE_INIT, /* ExecState */
NULL, /* ProgramName */
- GL_FALSE /* JoysticksInitialised */
+ GL_FALSE, /* JoysticksInitialised */
+ GL_FALSE, /* InputDevsInitialised */
+ 0, /* AuxiliaryBufferNumber */
+ 0 /* SampleNumber */
};
};
@@
-93,7
+92,7
@@
SFG_State fgState = { { -1, -1, GL_FALSE }, /* Position */
*/
static void fghInitialize( const char* displayName )
{
*/
static void fghInitialize( const char* displayName )
{
-#if TARGET_HOST_UNIX_X11
+#if TARGET_HOST_POSIX_X11
fgDisplay.Display = XOpenDisplay( displayName );
if( fgDisplay.Display == NULL )
fgDisplay.Display = XOpenDisplay( displayName );
if( fgDisplay.Display == NULL )
@@
-136,7
+135,7
@@
static void fghInitialize( const char* displayName )
FALSE
);
FALSE
);
-#elif TARGET_HOST_WIN32 || TARGET_HOST_WINCE
+#elif TARGET_HOST_MS_WINDOWS
WNDCLASS wc;
ATOM atom;
WNDCLASS wc;
ATOM atom;
@@
-164,12
+163,12
@@
static void fghInitialize( const char* displayName )
wc.hInstance = fgDisplay.Instance;
wc.hIcon = LoadIcon( fgDisplay.Instance, _T("GLUT_ICON") );
wc.hInstance = fgDisplay.Instance;
wc.hIcon = LoadIcon( fgDisplay.Instance, _T("GLUT_ICON") );
-#if TARGET_HOST_WIN32
+#if defined(_WIN32_WCE)
+ wc.style = CS_HREDRAW | CS_VREDRAW;
+#else
wc.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
if (!wc.hIcon)
wc.hIcon = LoadIcon( NULL, IDI_WINLOGO );
wc.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
if (!wc.hIcon)
wc.hIcon = LoadIcon( NULL, IDI_WINLOGO );
-#else /* TARGET_HOST_WINCE */
- wc.style = CS_HREDRAW | CS_VREDRAW;
#endif
wc.hCursor = LoadCursor( NULL, IDC_ARROW );
#endif
wc.hCursor = LoadCursor( NULL, IDC_ARROW );
@@
-196,9
+195,15
@@
static void fghInitialize( const char* displayName )
ReleaseDC( desktop, context );
}
ReleaseDC( desktop, context );
}
+ /* Set the timer granularity to 1 ms */
+ timeBeginPeriod ( 1 );
+
#endif
fgState.Initialised = GL_TRUE;
#endif
fgState.Initialised = GL_TRUE;
+
+ /* InputDevice uses GlutTimerFunc(), so fgState.Initialised must be TRUE */
+ fgInitialiseInputDevices();
}
/*
}
/*
@@
-218,6
+223,10
@@
void fgDeinitialize( void )
/* If there was a menu created, destroy the rendering context */
if( fgStructure.MenuContext )
{
/* If there was a menu created, destroy the rendering context */
if( fgStructure.MenuContext )
{
+#if TARGET_HOST_POSIX_X11
+ /* Note that the MVisualInfo is not owned by the MenuContext! */
+ glXDestroyContext( fgDisplay.Display, fgStructure.MenuContext->MContext );
+#endif
free( fgStructure.MenuContext );
fgStructure.MenuContext = NULL;
}
free( fgStructure.MenuContext );
fgStructure.MenuContext = NULL;
}
@@
-236,11
+245,15
@@
void fgDeinitialize( void )
free( timer );
}
free( timer );
}
-#if !TARGET_HOST_WINCE
+#if !defined(_WIN32_WCE)
if ( fgState.JoysticksInitialised )
fgJoystickClose( );
if ( fgState.JoysticksInitialised )
fgJoystickClose( );
-#endif /* !TARGET_HOST_WINCE */
+
+ if ( fgState.InputDevsInitialised )
+ fgInputDeviceClose( );
+#endif /* !defined(_WIN32_WCE) */
fgState.JoysticksInitialised = GL_FALSE;
fgState.JoysticksInitialised = GL_FALSE;
+ fgState.InputDevsInitialised = GL_FALSE;
fgState.Initialised = GL_FALSE;
fgState.Initialised = GL_FALSE;
@@
-262,16
+275,14
@@
void fgDeinitialize( void )
fgState.ActionOnWindowClose = GLUT_ACTION_EXIT;
fgState.ExecState = GLUT_EXEC_STATE_INIT;
fgState.ActionOnWindowClose = GLUT_ACTION_EXIT;
fgState.ExecState = GLUT_EXEC_STATE_INIT;
- fgState.KeyRepeat = GL_TRUE;
- fgState.Modifiers = 0xffffffff;
+ fgState.KeyRepeat = GLUT_KEY_REPEAT_ON;
+ fgState.Modifiers = INVALID_MODIFIERS;
fgState.GameModeSize.X = 640;
fgState.GameModeSize.Y = 480;
fgState.GameModeDepth = 16;
fgState.GameModeRefresh = 72;
fgState.GameModeSize.X = 640;
fgState.GameModeSize.Y = 480;
fgState.GameModeDepth = 16;
fgState.GameModeRefresh = 72;
- fgState.Time.Set = GL_FALSE;
-
fgListInit( &fgState.Timers );
fgListInit( &fgState.FreeTimers );
fgListInit( &fgState.Timers );
fgListInit( &fgState.FreeTimers );
@@
-289,8
+300,7
@@
void fgDeinitialize( void )
fgState.ProgramName = NULL;
}
fgState.ProgramName = NULL;
}
-
-#if TARGET_HOST_UNIX_X11
+#if TARGET_HOST_POSIX_X11
/*
* Make sure all X-client data we have created will be destroyed on
/*
* Make sure all X-client data we have created will be destroyed on
@@
-304,6
+314,11
@@
void fgDeinitialize( void )
*/
XCloseDisplay( fgDisplay.Display );
*/
XCloseDisplay( fgDisplay.Display );
+#elif TARGET_HOST_MS_WINDOWS
+
+ /* Reset the timer granularity */
+ timeEndPeriod ( 1 );
+
#endif
fgState.Initialised = GL_FALSE;
#endif
fgState.Initialised = GL_FALSE;
@@
-313,7
+328,7
@@
void fgDeinitialize( void )
* Everything inside the following #ifndef is copied from the X sources.
*/
* Everything inside the following #ifndef is copied from the X sources.
*/
-#if TARGET_HOST_WIN32 || TARGET_HOST_WINCE
+#if TARGET_HOST_MS_WINDOWS
/*
/*
@@
-505,10
+520,11
@@
void FGAPIENTRY glutInit( int* pargc, char** argv )
fgCreateStructure( );
fgCreateStructure( );
- fgElapsedTime( );
+ /* Get start time */
+ fgState.Time = fgSystemTime();
/* check if GLUT_FPS env var is set */
/* check if GLUT_FPS env var is set */
-#if !TARGET_HOST_WINCE
+#ifndef _WIN32_WCE
{
const char *fps = getenv( "GLUT_FPS" );
if( fps )
{
const char *fps = getenv( "GLUT_FPS" );
if( fps )
@@
-600,7
+616,7
@@
void FGAPIENTRY glutInit( int* pargc, char** argv )
argv[ i ] = argv[ j ];
}
argv[ i ] = argv[ j ];
}
-#endif /* TARGET_HOST_WINCE */
+#endif /* _WIN32_WCE */
/*
* Have the display created now. If there wasn't a "-display"
/*
* Have the display created now. If there wasn't a "-display"
@@
-639,6
+655,14
@@
void FGAPIENTRY glutInit( int* pargc, char** argv )
}
/*
}
/*
+ * Undoes all the "glutInit" stuff
+ */
+void FGAPIENTRY glutExit ( void )
+{
+ fgDeinitialize ();
+}
+
+/*
* Sets the default initial window position for new windows
*/
void FGAPIENTRY glutInitWindowPosition( int x, int y )
* Sets the default initial window position for new windows
*/
void FGAPIENTRY glutInitWindowPosition( int x, int y )
@@
-678,7
+702,6
@@
void FGAPIENTRY glutInitDisplayMode( unsigned int displayMode )
/* -- INIT DISPLAY STRING PARSING ------------------------------------------ */
/* -- INIT DISPLAY STRING PARSING ------------------------------------------ */
-#define NUM_TOKENS 36
static char* Tokens[] =
{
"alpha", "acca", "acc", "blue", "buffer", "conformant", "depth", "double",
static char* Tokens[] =
{
"alpha", "acca", "acc", "blue", "buffer", "conformant", "depth", "double",
@@
-689,6
+712,7
@@
static char* Tokens[] =
"xstaticgrey", "xgreyscale", "xstaticcolour", "xpseudocolour",
"xtruecolour", "xdirectcolour", "borderless", "aux"
};
"xstaticgrey", "xgreyscale", "xstaticcolour", "xpseudocolour",
"xtruecolour", "xdirectcolour", "borderless", "aux"
};
+#define NUM_TOKENS (sizeof(Tokens) / sizeof(*Tokens))
void FGAPIENTRY glutInitDisplayString( const char* displayMode )
{
void FGAPIENTRY glutInitDisplayString( const char* displayMode )
{
@@
-698,7
+722,7
@@
void FGAPIENTRY glutInitDisplayString( const char* displayMode )
* delimited by blanks or tabs.
*/
char *token ;
* delimited by blanks or tabs.
*/
char *token ;
- int len = strlen ( displayMode );
+ size_t len = strlen ( displayMode );
char *buffer = (char *)malloc ( (len+1) * sizeof(char) );
memcpy ( buffer, displayMode, len );
buffer[len] = '\0';
char *buffer = (char *)malloc ( (len+1) * sizeof(char) );
memcpy ( buffer, displayMode, len );
buffer[len] = '\0';
@@
-708,9
+732,16
@@
void FGAPIENTRY glutInitDisplayString( const char* displayMode )
{
/* Process this token */
int i ;
{
/* Process this token */
int i ;
+
+ /* Temporary fix: Ignore any length specifications and at least
+ * process the basic token
+ * TODO: Fix this permanently
+ */
+ size_t cleanlength = strcspn ( token, "=<>~!" );
+
for ( i = 0; i < NUM_TOKENS; i++ )
{
for ( i = 0; i < NUM_TOKENS; i++ )
{
- if ( strcmp ( token, Tokens[i] ) == 0 ) break ;
+ if ( strncmp ( token, Tokens[i], cleanlength ) == 0 ) break ;
}
switch ( i )
}
switch ( i )
@@
-807,64
+838,64
@@
void FGAPIENTRY glutInitDisplayString( const char* displayMode )
case 20 : /* "win32pdf": (incorrect spelling but was there before */
case 21 : /* "win32pfd": matches the Win32 Pixel Format Descriptor by
number */
case 20 : /* "win32pdf": (incorrect spelling but was there before */
case 21 : /* "win32pfd": matches the Win32 Pixel Format Descriptor by
number */
-#if TARGET_HOST_WIN32
+#if TARGET_HOST_MS_WINDOWS
#endif
break ;
case 22 : /* "xvisual": matches the X visual ID by number */
#endif
break ;
case 22 : /* "xvisual": matches the X visual ID by number */
-#if TARGET_HOST_UNIX_X11
+#if TARGET_HOST_POSIX_X11
#endif
break ;
case 23 : /* "xstaticgray": */
case 29 : /* "xstaticgrey": boolean indicating if the frame buffer
configuration's X visual is of type StaticGray */
#endif
break ;
case 23 : /* "xstaticgray": */
case 29 : /* "xstaticgrey": boolean indicating if the frame buffer
configuration's X visual is of type StaticGray */
-#if TARGET_HOST_UNIX_X11
+#if TARGET_HOST_POSIX_X11
#endif
break ;
case 24 : /* "xgrayscale": */
case 30 : /* "xgreyscale": boolean indicating if the frame buffer
configuration's X visual is of type GrayScale */
#endif
break ;
case 24 : /* "xgrayscale": */
case 30 : /* "xgreyscale": boolean indicating if the frame buffer
configuration's X visual is of type GrayScale */
-#if TARGET_HOST_UNIX_X11
+#if TARGET_HOST_POSIX_X11
#endif
break ;
case 25 : /* "xstaticcolor": */
case 31 : /* "xstaticcolour": boolean indicating if the frame buffer
configuration's X visual is of type StaticColor */
#endif
break ;
case 25 : /* "xstaticcolor": */
case 31 : /* "xstaticcolour": boolean indicating if the frame buffer
configuration's X visual is of type StaticColor */
-#if TARGET_HOST_UNIX_X11
+#if TARGET_HOST_POSIX_X11
#endif
break ;
case 26 : /* "xpseudocolor": */
case 32 : /* "xpseudocolour": boolean indicating if the frame buffer
configuration's X visual is of type PseudoColor */
#endif
break ;
case 26 : /* "xpseudocolor": */
case 32 : /* "xpseudocolour": boolean indicating if the frame buffer
configuration's X visual is of type PseudoColor */
-#if TARGET_HOST_UNIX_X11
+#if TARGET_HOST_POSIX_X11
#endif
break ;
case 27 : /* "xtruecolor": */
case 33 : /* "xtruecolour": boolean indicating if the frame buffer
configuration's X visual is of type TrueColor */
#endif
break ;
case 27 : /* "xtruecolor": */
case 33 : /* "xtruecolour": boolean indicating if the frame buffer
configuration's X visual is of type TrueColor */
-#if TARGET_HOST_UNIX_X11
+#if TARGET_HOST_POSIX_X11
#endif
break ;
case 28 : /* "xdirectcolor": */
case 34 : /* "xdirectcolour": boolean indicating if the frame buffer
configuration's X visual is of type DirectColor */
#endif
break ;
case 28 : /* "xdirectcolor": */
case 34 : /* "xdirectcolour": boolean indicating if the frame buffer
configuration's X visual is of type DirectColor */
-#if TARGET_HOST_UNIX_X11
+#if TARGET_HOST_POSIX_X11
#endif
break ;
case 35 : /* "borderless": windows should not have borders */
#endif
break ;
case 35 : /* "borderless": windows should not have borders */
-#if TARGET_HOST_UNIX_X11
+#if TARGET_HOST_POSIX_X11
#endif
break ;
case 36 : /* "aux": some number of aux buffers */
#endif
break ;
case 36 : /* "aux": some number of aux buffers */
- glut_state_flag |= GLUT_AUX1;
+ glut_state_flag |= GLUT_AUX;
break ;
case 37 : /* Unrecognized */
break ;
case 37 : /* Unrecognized */