Added GLUT_ALLOW_NEGATIVE_WINDOW_POSITION so windows can be created with negative position coordinates.

(cherry picked from commit e7f38b763f)

(cherry picked from commit e7f38b763f)

git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@1775 7f0cb862-5218-0410-a997-914c9d46530a
This commit is contained in:
dcnieho 2015-12-14 16:22:18 +00:00
parent f0facfc489
commit d898bfe4c6
4 changed files with 15 additions and 4 deletions

View File

@ -90,6 +90,8 @@
#define GLUT_STROKE_FONT_DRAW_JOIN_DOTS 0x0206 /* Draw dots between line segments of stroke fonts? */ #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. * New tokens for glutInitDisplayMode.
* Only one GLUT_AUXn bit may be used at a time. * Only one GLUT_AUXn bit may be used at a time.

View File

@ -88,6 +88,7 @@ SFG_State fgState = { { -1, -1, GL_FALSE }, /* Position */
4, /* SampleNumber */ 4, /* SampleNumber */
GL_FALSE, /* SkipStaleMotion */ GL_FALSE, /* SkipStaleMotion */
GL_FALSE, /* StrokeFontDrawJoinDots */ GL_FALSE, /* StrokeFontDrawJoinDots */
GL_FALSE, /* AllowNegativeWindowPosition */
1, /* OpenGL context MajorVersion */ 1, /* OpenGL context MajorVersion */
0, /* OpenGL context MinorVersion */ 0, /* OpenGL context MinorVersion */
0, /* OpenGL ContextFlags */ 0, /* OpenGL ContextFlags */
@ -370,10 +371,10 @@ void FGAPIENTRY glutInit( int* pargc, char** argv )
if( (mask & (WidthValue|HeightValue)) == (WidthValue|HeightValue) ) if( (mask & (WidthValue|HeightValue)) == (WidthValue|HeightValue) )
fgState.Size.Use = GL_TRUE; fgState.Size.Use = GL_TRUE;
if( mask & XNegative ) if( ( mask & XNegative ) && !fgState.AllowNegativeWindowPosition )
fgState.Position.X += fgDisplay.ScreenWidth - fgState.Size.X; fgState.Position.X += fgDisplay.ScreenWidth - fgState.Size.X;
if( mask & YNegative ) if( ( mask & YNegative ) && !fgState.AllowNegativeWindowPosition )
fgState.Position.Y += fgDisplay.ScreenHeight - fgState.Size.Y; fgState.Position.Y += fgDisplay.ScreenHeight - fgState.Size.Y;
if( (mask & (XValue|YValue)) == (XValue|YValue) ) if( (mask & (XValue|YValue)) == (XValue|YValue) )
@ -397,7 +398,7 @@ void FGAPIENTRY glutInitWindowPosition( int x, int y )
fgState.Position.X = x; fgState.Position.X = x;
fgState.Position.Y = y; fgState.Position.Y = y;
if( ( x >= 0 ) && ( y >= 0 ) ) if( ( ( x >= 0 ) && ( y >= 0 ) ) || fgState.AllowNegativeWindowPosition )
fgState.Position.Use = GL_TRUE; fgState.Position.Use = GL_TRUE;
else else
fgState.Position.Use = GL_FALSE; fgState.Position.Use = GL_FALSE;

View File

@ -354,6 +354,7 @@ struct tagSFG_State
GLboolean SkipStaleMotion; /* skip stale motion events */ GLboolean SkipStaleMotion; /* skip stale motion events */
GLboolean StrokeFontDrawJoinDots;/* Draw dots between line segments of stroke fonts? */ 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 MajorVersion; /* Major OpenGL context version */
int MinorVersion; /* Minor OpenGL context version */ int MinorVersion; /* Minor OpenGL context version */

View File

@ -122,6 +122,10 @@ void FGAPIENTRY glutSetOption( GLenum eWhat, int value )
fgState.StrokeFontDrawJoinDots = !!value; fgState.StrokeFontDrawJoinDots = !!value;
break; break;
case GLUT_ALLOW_NEGATIVE_WINDOW_POSITION:
fgState.AllowNegativeWindowPosition = !!value;
break;
default: default:
fgWarning( "glutSetOption(): missing enum handle %d", eWhat ); fgWarning( "glutSetOption(): missing enum handle %d", eWhat );
break; break;
@ -225,6 +229,9 @@ int FGAPIENTRY glutGet( GLenum eWhat )
case GLUT_STROKE_FONT_DRAW_JOIN_DOTS: case GLUT_STROKE_FONT_DRAW_JOIN_DOTS:
return fgState.StrokeFontDrawJoinDots; return fgState.StrokeFontDrawJoinDots;
case GLUT_ALLOW_NEGATIVE_WINDOW_POSITION:
return fgState.AllowNegativeWindowPosition;
default: default:
return fgPlatformGlutGet ( eWhat ); return fgPlatformGlutGet ( eWhat );
break; break;