XParseGeometry will always be needed for Windows, no need for cmake to figure this...
[freeglut] / src / fg_init.c
index 68b69ca..ae87212 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * freeglut_init.c
+ * fg_init.c
  *
  * Various freeglut initialization functions.
  *
@@ -73,6 +73,7 @@ SFG_State fgState = { { -1, -1, GL_FALSE },  /* Position */
                       0,                      /* ActiveMenus */
                       NULL,                   /* MenuStateCallback */
                       NULL,                   /* MenuStatusCallback */
+                      FREEGLUT_MENU_FONT,
                       { -1, -1, GL_TRUE },    /* GameModeSize */
                       -1,                     /* GameModeDepth */
                       -1,                     /* GameModeRefresh */
@@ -86,6 +87,8 @@ SFG_State fgState = { { -1, -1, GL_FALSE },  /* Position */
                       1,                      /* AuxiliaryBufferNumber */
                       4,                      /* SampleNumber */
                       GL_FALSE,               /* SkipStaleMotion */
+                      GL_FALSE,               /* StrokeFontDrawJoinDots */
+                      GL_FALSE,               /* AllowNegativeWindowPosition */
                       1,                      /* OpenGL context MajorVersion */
                       0,                      /* OpenGL context MinorVersion */
                       0,                      /* OpenGL ContextFlags */
@@ -102,8 +105,6 @@ extern void fgPlatformInitialize( const char* displayName );
 extern void fgPlatformDeinitialiseInputDevices ( void );
 extern void fgPlatformCloseDisplay ( void );
 extern void fgPlatformDestroyContext ( SFG_PlatformDisplay pDisplay, SFG_WindowContextType MContext );
-extern void fgInitGL2();
-
 
 void fghParseCommandLineArguments ( int* pargc, char** argv, char **pDisplayName, char **pGeometry )
 {
@@ -111,7 +112,7 @@ void fghParseCommandLineArguments ( int* pargc, char** argv, char **pDisplayName
     int i, j, argc = *pargc;
 
     {
-           /* check if GLUT_FPS env var is set */
+        /* check if GLUT_FPS env var is set */
         const char *fps = getenv( "GLUT_FPS" );
 
         if( fps )
@@ -230,7 +231,7 @@ void fgDeinitialize( void )
         return;
     }
 
-       /* If we're in game mode, we want to leave game mode */
+    /* If we're in game mode, we want to leave game mode */
     if( fgStructure.GameModeWindow ) {
         glutLeaveGameMode();
     }
@@ -238,7 +239,7 @@ void fgDeinitialize( void )
     /* If there was a menu created, destroy the rendering context */
     if( fgStructure.MenuContext )
     {
-               fgPlatformDestroyContext (fgDisplay.pDisplay, fgStructure.MenuContext->MContext );
+        fgPlatformDestroyContext (fgDisplay.pDisplay, fgStructure.MenuContext->MContext );
         free( fgStructure.MenuContext );
         fgStructure.MenuContext = NULL;
     }
@@ -257,9 +258,9 @@ void fgDeinitialize( void )
         free( timer );
     }
 
-       fgPlatformDeinitialiseInputDevices ();
+    fgPlatformDeinitialiseInputDevices ();
 
-       fgState.MouseWheelTicks = 0;
+    fgState.MouseWheelTicks = 0;
 
     fgState.MajorVersion = 1;
     fgState.MinorVersion = 0;
@@ -311,14 +312,14 @@ void fgDeinitialize( void )
         fgState.ProgramName = NULL;
     }
 
-       fgPlatformCloseDisplay ();
+    fgPlatformCloseDisplay ();
 
     fgState.Initialised = GL_FALSE;
 }
 
 
 /* -- INTERFACE FUNCTIONS -------------------------------------------------- */
-#if defined(NEED_XPARSEGEOMETRY_IMPL)
+#if defined(NEED_XPARSEGEOMETRY_IMPL) || defined(TARGET_HOST_MS_WINDOWS)
 #   include "util/xparsegeometry_repl.h"
 #endif
 
@@ -343,10 +344,7 @@ void FGAPIENTRY glutInit( int* pargc, char** argv )
 
     fgCreateStructure( );
 
-    /* Get start time */
-    fgState.Time = fgSystemTime();
-
-       fghParseCommandLineArguments ( pargc, argv, &displayName, &geometry );
+    fghParseCommandLineArguments ( pargc, argv, &displayName, &geometry );
 
     /*
      * Have the display created now. If there wasn't a "-display"
@@ -360,7 +358,7 @@ void FGAPIENTRY glutInit( int* pargc, char** argv )
      * size.
      */
 
-    if (geometry )
+    if ( geometry )
     {
         unsigned int parsedWidth, parsedHeight;
         int mask = XParseGeometry( geometry,
@@ -373,17 +371,15 @@ void FGAPIENTRY glutInit( int* pargc, char** argv )
         if( (mask & (WidthValue|HeightValue)) == (WidthValue|HeightValue) )
             fgState.Size.Use = GL_TRUE;
 
-        if( mask & XNegative )
+        if( ( mask & XNegative ) && !fgState.AllowNegativeWindowPosition )
             fgState.Position.X += fgDisplay.ScreenWidth - fgState.Size.X;
 
-        if( mask & YNegative )
+        if( ( mask & YNegative ) && !fgState.AllowNegativeWindowPosition )
             fgState.Position.Y += fgDisplay.ScreenHeight - fgState.Size.Y;
 
         if( (mask & (XValue|YValue)) == (XValue|YValue) )
             fgState.Position.Use = GL_TRUE;
     }
-
-    fgInitGL2();
 }
 
 /*
@@ -402,7 +398,7 @@ void FGAPIENTRY glutInitWindowPosition( int x, int y )
     fgState.Position.X = x;
     fgState.Position.Y = y;
 
-    if( ( x >= 0 ) && ( y >= 0 ) )
+    if( ( ( x >= 0 ) && ( y >= 0 ) ) || fgState.AllowNegativeWindowPosition )
         fgState.Position.Use = GL_TRUE;
     else
         fgState.Position.Use = GL_FALSE;
@@ -672,19 +668,19 @@ void FGAPIENTRY glutInitContextProfile( int profile )
 /*
  * Sets the user error handler (note the use of va_list for the args to the fmt)
  */
-void FGAPIENTRY glutInitErrorFunc( void (* vfgError) ( const char *fmt, va_list ap ) )
+void FGAPIENTRY glutInitErrorFunc( FGError callback )
 {
     /* This allows user programs to handle freeglut errors */
-    fgState.ErrorFunc = vfgError;
+    fgState.ErrorFunc = callback;
 }
 
 /*
  * Sets the user warning handler (note the use of va_list for the args to the fmt)
  */
-void FGAPIENTRY glutInitWarningFunc( void (* vfgWarning) ( const char *fmt, va_list ap ) )
+void FGAPIENTRY glutInitWarningFunc( FGWarning callback )
 {
     /* This allows user programs to handle freeglut warnings */
-    fgState.WarningFunc = vfgWarning;
+    fgState.WarningFunc = callback;
 }
 
 /*** END OF FILE ***/