From: Rcmaniac25 Date: Mon, 14 Dec 2015 16:22:18 +0000 (+0000) Subject: Added GLUT_ALLOW_NEGATIVE_WINDOW_POSITION so windows can be created with negative... X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=freeglut;a=commitdiff_plain;h=bb596ccc60c6c7d677e4d2012bdcbdd03252a2ca Added GLUT_ALLOW_NEGATIVE_WINDOW_POSITION so windows can be created with negative position coordinates. (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 --- diff --git a/include/GL/freeglut_ext.h b/include/GL/freeglut_ext.h index 0c22c4f..4fc33ec 100644 --- a/include/GL/freeglut_ext.h +++ b/include/GL/freeglut_ext.h @@ -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. diff --git a/src/fg_init.c b/src/fg_init.c index ed9f8d3..b72c74f 100644 --- a/src/fg_init.c +++ b/src/fg_init.c @@ -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; diff --git a/src/fg_internal.h b/src/fg_internal.h index 8006196..a0f2b95 100644 --- a/src/fg_internal.h +++ b/src/fg_internal.h @@ -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 */ diff --git a/src/fg_state.c b/src/fg_state.c index cc93892..7f8d3be 100644 --- a/src/fg_state.c +++ b/src/fg_state.c @@ -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;