Added GLUT_ALLOW_NEGATIVE_WINDOW_POSITION so windows can be created with negative...
authorRcmaniac25 <rcmaniac25@hotmail.com>
Mon, 14 Dec 2015 16:22:18 +0000 (16:22 +0000)
committerDiederick Niehorster <dcnieho@gmail.com>
Mon, 14 Dec 2015 16:22:18 +0000 (16:22 +0000)
(cherry picked from commit e7f38b763fec763b3887a0dc29d04e9576d18e78)

(cherry picked from commit e7f38b763fec763b3887a0dc29d04e9576d18e78)

git-svn-id: svn+ssh://svn.code.sf.net/p/freeglut/code/trunk/freeglut/freeglut@1775 7f0cb862-5218-0410-a997-914c9d46530a

include/GL/freeglut_ext.h
src/fg_init.c
src/fg_internal.h
src/fg_state.c

index 0c22c4f..4fc33ec 100644 (file)
@@ -90,6 +90,8 @@
 
 #define  GLUT_STROKE_FONT_DRAW_JOIN_DOTS    0x0206  /* Draw dots between line segments of stroke fonts? */
 
+#define  GLUT_ALLOW_NEGATIVE_WINDOW_POSITION 0x0207 /* GLUT doesn't allow negative window positions by default */
+
 /*
  * New tokens for glutInitDisplayMode.
  * Only one GLUT_AUXn bit may be used at a time.
index ed9f8d3..b72c74f 100644 (file)
@@ -88,6 +88,7 @@ SFG_State fgState = { { -1, -1, GL_FALSE },  /* Position */
                       4,                      /* SampleNumber */
                       GL_FALSE,               /* SkipStaleMotion */
                       GL_FALSE,               /* StrokeFontDrawJoinDots */
+                      GL_FALSE,               /* AllowNegativeWindowPosition */
                       1,                      /* OpenGL context MajorVersion */
                       0,                      /* OpenGL context MinorVersion */
                       0,                      /* OpenGL ContextFlags */
@@ -357,7 +358,7 @@ void FGAPIENTRY glutInit( int* pargc, char** argv )
      * size.
      */
 
-    if (geometry )
+    if ( geometry )
     {
         unsigned int parsedWidth, parsedHeight;
         int mask = XParseGeometry( geometry,
@@ -370,10 +371,10 @@ 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) )
@@ -397,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;
index 8006196..a0f2b95 100644 (file)
@@ -354,6 +354,7 @@ struct tagSFG_State
     GLboolean        SkipStaleMotion;      /* skip stale motion events */
 
     GLboolean        StrokeFontDrawJoinDots;/* Draw dots between line segments of stroke fonts? */
+    GLboolean        AllowNegativeWindowPosition; /* GLUT, by default, doesn't allow negative window positions. Enable it? */
 
     int              MajorVersion;         /* Major OpenGL context version  */
     int              MinorVersion;         /* Minor OpenGL context version  */
index cc93892..7f8d3be 100644 (file)
@@ -122,6 +122,10 @@ void FGAPIENTRY glutSetOption( GLenum eWhat, int value )
       fgState.StrokeFontDrawJoinDots = !!value;
       break;
 
+    case GLUT_ALLOW_NEGATIVE_WINDOW_POSITION:
+      fgState.AllowNegativeWindowPosition = !!value;
+      break;
+
     default:
         fgWarning( "glutSetOption(): missing enum handle %d", eWhat );
         break;
@@ -225,6 +229,9 @@ int FGAPIENTRY glutGet( GLenum eWhat )
     case GLUT_STROKE_FONT_DRAW_JOIN_DOTS:
         return fgState.StrokeFontDrawJoinDots;
 
+    case GLUT_ALLOW_NEGATIVE_WINDOW_POSITION:
+        return fgState.AllowNegativeWindowPosition;
+
     default:
         return fgPlatformGlutGet ( eWhat );
         break;