updated comments from John Fay
git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@512 7f0cb862-5218-0410-a997-914c9d46530a
This commit is contained in:
parent
7e23a609ff
commit
5bd18d1bcd
@ -257,9 +257,7 @@ void FGAPIENTRY glutWarpPointer( int x, int y )
|
|||||||
coords.x = x;
|
coords.x = x;
|
||||||
coords.y = y;
|
coords.y = y;
|
||||||
|
|
||||||
/*
|
/* ClientToScreen() translates {coords} for us. */
|
||||||
* ClientToScreen() translates {coords} for us.
|
|
||||||
*/
|
|
||||||
ClientToScreen( fgStructure.Window->Window.Handle, &coords );
|
ClientToScreen( fgStructure.Window->Window.Handle, &coords );
|
||||||
SetCursorPos( coords.x, coords.y );
|
SetCursorPos( coords.x, coords.y );
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* The original freeglut fonts were extracted by a utility written
|
* The original freeglut fonts were extracted by a utility written
|
||||||
* by Pawel W. Olszta (see below) and the generated fonts contained
|
* by Pawel W. Olszta (see below) and the generated fonts contained
|
||||||
* his copyright exclusively. Steve Baker asserts that Pawel
|
* his copyright exclusively. Steve Baker asserts that Pawel
|
||||||
* assigned intellectual property writes to Steve Baker. Steve
|
* assigned intellectual property rights to Steve Baker. Steve
|
||||||
* Baker also asserts that fonts cannot be copyrighted. He has
|
* Baker also asserts that fonts cannot be copyrighted. He has
|
||||||
* neither stripped the copyright from the freeglut fonts nor
|
* neither stripped the copyright from the freeglut fonts nor
|
||||||
* formally retitled anything in his name. Since that time, the
|
* formally retitled anything in his name. Since that time, the
|
||||||
|
@ -86,9 +86,7 @@ void fghRememberState( void )
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/* Query the current display settings: */
|
||||||
* Query the current display settings:
|
|
||||||
*/
|
|
||||||
fgDisplay.DisplayModeValid =
|
fgDisplay.DisplayModeValid =
|
||||||
XF86VidModeGetModeLine(
|
XF86VidModeGetModeLine(
|
||||||
fgDisplay.Display,
|
fgDisplay.Display,
|
||||||
@ -111,9 +109,7 @@ void fghRememberState( void )
|
|||||||
|
|
||||||
/* DEVMODE devMode; */
|
/* DEVMODE devMode; */
|
||||||
|
|
||||||
/*
|
/* Grab the current desktop settings... */
|
||||||
* Grab the current desktop settings...
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* hack to get around my stupid cross-gcc headers */
|
/* hack to get around my stupid cross-gcc headers */
|
||||||
#define FREEGLUT_ENUM_CURRENT_SETTINGS -1
|
#define FREEGLUT_ENUM_CURRENT_SETTINGS -1
|
||||||
@ -121,9 +117,7 @@ void fghRememberState( void )
|
|||||||
EnumDisplaySettings( NULL, FREEGLUT_ENUM_CURRENT_SETTINGS,
|
EnumDisplaySettings( NULL, FREEGLUT_ENUM_CURRENT_SETTINGS,
|
||||||
&fgDisplay.DisplayMode );
|
&fgDisplay.DisplayMode );
|
||||||
|
|
||||||
/*
|
/* Make sure we will be restoring all settings needed */
|
||||||
* Make sure we will be restoring all settings needed
|
|
||||||
*/
|
|
||||||
fgDisplay.DisplayMode.dmFields |=
|
fgDisplay.DisplayMode.dmFields |=
|
||||||
DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL | DM_DISPLAYFREQUENCY;
|
DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL | DM_DISPLAYFREQUENCY;
|
||||||
|
|
||||||
@ -138,9 +132,7 @@ void fghRestoreState( void )
|
|||||||
#if TARGET_HOST_UNIX_X11
|
#if TARGET_HOST_UNIX_X11
|
||||||
|
|
||||||
# ifdef X_XF86VidModeGetAllModeLines
|
# ifdef X_XF86VidModeGetAllModeLines
|
||||||
/*
|
/* Restore the remembered pointer position: */
|
||||||
* Restore the remembered pointer position:
|
|
||||||
*/
|
|
||||||
XWarpPointer(
|
XWarpPointer(
|
||||||
fgDisplay.Display, None, fgDisplay.RootWindow, 0, 0, 0, 0,
|
fgDisplay.Display, None, fgDisplay.RootWindow, 0, 0, 0, 0,
|
||||||
fgDisplay.DisplayPointerX, fgDisplay.DisplayPointerY
|
fgDisplay.DisplayPointerX, fgDisplay.DisplayPointerY
|
||||||
@ -206,9 +198,7 @@ void fghRestoreState( void )
|
|||||||
|
|
||||||
#elif TARGET_HOST_WIN32 || TARGET_HOST_WINCE
|
#elif TARGET_HOST_WIN32 || TARGET_HOST_WINCE
|
||||||
|
|
||||||
/*
|
/* Restore the previously rememebered desktop display settings */
|
||||||
* Restore the previously rememebered desktop display settings
|
|
||||||
*/
|
|
||||||
ChangeDisplaySettings( &fgDisplay.DisplayMode, 0 );
|
ChangeDisplaySettings( &fgDisplay.DisplayMode, 0 );
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@ -219,9 +209,7 @@ void fghRestoreState( void )
|
|||||||
*/
|
*/
|
||||||
GLboolean fghCheckDisplayMode( int width, int height, int depth, int refresh )
|
GLboolean fghCheckDisplayMode( int width, int height, int depth, int refresh )
|
||||||
{
|
{
|
||||||
/*
|
/* The desired values should be stored in fgState structure... */
|
||||||
* The desired values should be stored in fgState structure...
|
|
||||||
*/
|
|
||||||
return ( width == fgState.GameModeSize.X ) &&
|
return ( width == fgState.GameModeSize.X ) &&
|
||||||
( height == fgState.GameModeSize.Y ) &&
|
( height == fgState.GameModeSize.Y ) &&
|
||||||
( depth == fgState.GameModeDepth ) &&
|
( depth == fgState.GameModeDepth ) &&
|
||||||
@ -257,9 +245,7 @@ GLboolean fghChangeDisplayMode( GLboolean haveToTest )
|
|||||||
&displayModes
|
&displayModes
|
||||||
);
|
);
|
||||||
|
|
||||||
/*
|
/* Check every of the modes looking for one that matches our demands */
|
||||||
* Check every of the modes looking for one that matches our demands
|
|
||||||
*/
|
|
||||||
for( i = 0; i < displayModesCount; i++ )
|
for( i = 0; i < displayModesCount; i++ )
|
||||||
{
|
{
|
||||||
if( fghCheckDisplayMode( displayModes[ i ]->hdisplay,
|
if( fghCheckDisplayMode( displayModes[ i ]->hdisplay,
|
||||||
@ -269,9 +255,7 @@ GLboolean fghChangeDisplayMode( GLboolean haveToTest )
|
|||||||
{
|
{
|
||||||
if( haveToTest )
|
if( haveToTest )
|
||||||
return GL_TRUE;
|
return GL_TRUE;
|
||||||
/*
|
/* OKi, this is the display mode we have been looking for... */
|
||||||
* OKi, this is the display mode we have been looking for...
|
|
||||||
*/
|
|
||||||
XF86VidModeSwitchToMode(
|
XF86VidModeSwitchToMode(
|
||||||
fgDisplay.Display,
|
fgDisplay.Display,
|
||||||
fgDisplay.Screen,
|
fgDisplay.Screen,
|
||||||
@ -282,9 +266,7 @@ GLboolean fghChangeDisplayMode( GLboolean haveToTest )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/* Something must have gone wrong */
|
||||||
* Something must have went wrong
|
|
||||||
*/
|
|
||||||
return GL_FALSE;
|
return GL_FALSE;
|
||||||
|
|
||||||
# else
|
# else
|
||||||
@ -307,9 +289,7 @@ GLboolean fghChangeDisplayMode( GLboolean haveToTest )
|
|||||||
*/
|
*/
|
||||||
while( EnumDisplaySettings( NULL, displayModes, &devMode ) )
|
while( EnumDisplaySettings( NULL, displayModes, &devMode ) )
|
||||||
{
|
{
|
||||||
/*
|
/* Does the enumerated display mode match the user's preferences? */
|
||||||
* Does the enumerated display mode match the user's preferences?
|
|
||||||
*/
|
|
||||||
if( fghCheckDisplayMode( devMode.dmPelsWidth, devMode.dmPelsHeight,
|
if( fghCheckDisplayMode( devMode.dmPelsWidth, devMode.dmPelsHeight,
|
||||||
devMode.dmBitsPerPel,
|
devMode.dmBitsPerPel,
|
||||||
devMode.dmDisplayFrequency ) )
|
devMode.dmDisplayFrequency ) )
|
||||||
@ -325,9 +305,7 @@ GLboolean fghChangeDisplayMode( GLboolean haveToTest )
|
|||||||
/* then try without Display Frequency */
|
/* then try without Display Frequency */
|
||||||
displayModes = 0;
|
displayModes = 0;
|
||||||
|
|
||||||
/*
|
/* Enumerate the available display modes */
|
||||||
* Enumerate the available display modes
|
|
||||||
*/
|
|
||||||
while( EnumDisplaySettings( NULL, displayModes, &devMode ) )
|
while( EnumDisplaySettings( NULL, displayModes, &devMode ) )
|
||||||
{
|
{
|
||||||
/* then try without Display Frequency */
|
/* then try without Display Frequency */
|
||||||
@ -343,24 +321,18 @@ GLboolean fghChangeDisplayMode( GLboolean haveToTest )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/* Did we find a matching display mode? */
|
||||||
* Did we find a matching display mode?
|
|
||||||
*/
|
|
||||||
if( mode != 0xffffffff )
|
if( mode != 0xffffffff )
|
||||||
{
|
{
|
||||||
int retVal = DISP_CHANGE_SUCCESSFUL;
|
int retVal = DISP_CHANGE_SUCCESSFUL;
|
||||||
|
|
||||||
/*
|
/* Mark the values we want to modify in the display change call */
|
||||||
* Mark the values we want to modify in the display change call
|
|
||||||
*/
|
|
||||||
devMode.dmFields |=
|
devMode.dmFields |=
|
||||||
DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL | DM_DISPLAYFREQUENCY;
|
DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL | DM_DISPLAYFREQUENCY;
|
||||||
|
|
||||||
retVal = ChangeDisplaySettings( &devMode, haveToTest ? CDS_TEST : 0 );
|
retVal = ChangeDisplaySettings( &devMode, haveToTest ? CDS_TEST : 0 );
|
||||||
|
|
||||||
/*
|
/* I don't know if it's really needed, but looks nice: */
|
||||||
* I don't know if it's really needed, but looks nice:
|
|
||||||
*/
|
|
||||||
success = (retVal == DISP_CHANGE_SUCCESSFUL) ||
|
success = (retVal == DISP_CHANGE_SUCCESSFUL) ||
|
||||||
(retVal == DISP_CHANGE_NOTUPDATED);
|
(retVal == DISP_CHANGE_NOTUPDATED);
|
||||||
|
|
||||||
@ -407,9 +379,7 @@ void FGAPIENTRY glutGameModeString( const char* string )
|
|||||||
string
|
string
|
||||||
);
|
);
|
||||||
|
|
||||||
/*
|
/* Hopefully it worked, and if not, we still have the default values */
|
||||||
* Hopefully it worked, and if not, we still have the default values
|
|
||||||
*/
|
|
||||||
fgState.GameModeSize.X = width;
|
fgState.GameModeSize.X = width;
|
||||||
fgState.GameModeSize.Y = height;
|
fgState.GameModeSize.Y = height;
|
||||||
fgState.GameModeDepth = depth;
|
fgState.GameModeDepth = depth;
|
||||||
@ -495,9 +465,7 @@ int FGAPIENTRY glutEnterGameMode( void )
|
|||||||
int x, y;
|
int x, y;
|
||||||
Window child;
|
Window child;
|
||||||
|
|
||||||
/*
|
/* Change to viewport to the window topleft edge: */
|
||||||
* Change to viewport to the window topleft edge:
|
|
||||||
*/
|
|
||||||
XF86VidModeSetViewPort( fgDisplay.Display, fgDisplay.Screen, 0, 0 );
|
XF86VidModeSetViewPort( fgDisplay.Display, fgDisplay.Screen, 0, 0 );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -522,9 +490,7 @@ int FGAPIENTRY glutEnterGameMode( void )
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/* Grab the keyboard, too */
|
||||||
* Grab the keyboard, too
|
|
||||||
*/
|
|
||||||
XGrabKeyboard(
|
XGrabKeyboard(
|
||||||
fgDisplay.Display,
|
fgDisplay.Display,
|
||||||
fgStructure.GameMode->Window.Handle,
|
fgStructure.GameMode->Window.Handle,
|
||||||
@ -549,7 +515,7 @@ void FGAPIENTRY glutLeaveGameMode( void )
|
|||||||
|
|
||||||
fgAddToWindowDestroyList( fgStructure.GameMode );
|
fgAddToWindowDestroyList( fgStructure.GameMode );
|
||||||
|
|
||||||
fgStructure.GameMode = NULL ;
|
fgStructure.GameMode = NULL;
|
||||||
|
|
||||||
#if TARGET_HOST_UNIX_X11
|
#if TARGET_HOST_UNIX_X11
|
||||||
|
|
||||||
|
@ -75,9 +75,7 @@ void FGAPIENTRY glutWireCube( GLdouble dSize )
|
|||||||
# define V(a,b,c) glVertex3d( a size, b size, c size );
|
# define V(a,b,c) glVertex3d( a size, b size, c size );
|
||||||
# define N(a,b,c) glNormal3d( a, b, c );
|
# define N(a,b,c) glNormal3d( a, b, c );
|
||||||
|
|
||||||
/*
|
/* PWO: I dared to convert the code to use macros... */
|
||||||
* PWO: I dared to convert the code to use macros...
|
|
||||||
*/
|
|
||||||
glBegin( GL_LINE_LOOP ); N( 1.0, 0.0, 0.0); V(+,-,+); V(+,-,-); V(+,+,-); V(+,+,+); glEnd();
|
glBegin( GL_LINE_LOOP ); N( 1.0, 0.0, 0.0); V(+,-,+); V(+,-,-); V(+,+,-); V(+,+,+); glEnd();
|
||||||
glBegin( GL_LINE_LOOP ); N( 0.0, 1.0, 0.0); V(+,+,+); V(+,+,-); V(-,+,-); V(-,+,+); glEnd();
|
glBegin( GL_LINE_LOOP ); N( 0.0, 1.0, 0.0); V(+,+,+); V(+,+,-); V(-,+,-); V(-,+,+); glEnd();
|
||||||
glBegin( GL_LINE_LOOP ); N( 0.0, 0.0, 1.0); V(+,+,+); V(-,+,+); V(-,-,+); V(+,-,+); glEnd();
|
glBegin( GL_LINE_LOOP ); N( 0.0, 0.0, 1.0); V(+,+,+); V(-,+,+); V(-,-,+); V(+,-,+); glEnd();
|
||||||
@ -99,9 +97,7 @@ void FGAPIENTRY glutSolidCube( GLdouble dSize )
|
|||||||
# define V(a,b,c) glVertex3d( a size, b size, c size );
|
# define V(a,b,c) glVertex3d( a size, b size, c size );
|
||||||
# define N(a,b,c) glNormal3d( a, b, c );
|
# define N(a,b,c) glNormal3d( a, b, c );
|
||||||
|
|
||||||
/*
|
/* PWO: Again, I dared to convert the code to use macros... */
|
||||||
* PWO: Again, I dared to convert the code to use macros...
|
|
||||||
*/
|
|
||||||
glBegin( GL_QUADS );
|
glBegin( GL_QUADS );
|
||||||
N( 1.0, 0.0, 0.0); V(+,-,+); V(+,-,-); V(+,+,-); V(+,+,+);
|
N( 1.0, 0.0, 0.0); V(+,-,+); V(+,-,-); V(+,+,-); V(+,+,+);
|
||||||
N( 0.0, 1.0, 0.0); V(+,+,+); V(+,+,-); V(-,+,-); V(-,+,+);
|
N( 0.0, 1.0, 0.0); V(+,+,+); V(+,+,-); V(-,+,-); V(-,+,+);
|
||||||
@ -593,9 +589,7 @@ void FGAPIENTRY glutWireTorus( GLdouble dInnerRadius, GLdouble dOuterRadius, GLi
|
|||||||
int i, j;
|
int i, j;
|
||||||
double spsi, cpsi, sphi, cphi ;
|
double spsi, cpsi, sphi, cphi ;
|
||||||
|
|
||||||
/*
|
/* Allocate the vertices array */
|
||||||
* Allocate the vertices array
|
|
||||||
*/
|
|
||||||
vertex = (double *)calloc( sizeof(double), 3 * nSides * nRings );
|
vertex = (double *)calloc( sizeof(double), 3 * nSides * nRings );
|
||||||
normal = (double *)calloc( sizeof(double), 3 * nSides * nRings );
|
normal = (double *)calloc( sizeof(double), 3 * nSides * nRings );
|
||||||
|
|
||||||
@ -671,15 +665,11 @@ void FGAPIENTRY glutSolidTorus( GLdouble dInnerRadius, GLdouble dOuterRadius, GL
|
|||||||
int i, j;
|
int i, j;
|
||||||
double spsi, cpsi, sphi, cphi ;
|
double spsi, cpsi, sphi, cphi ;
|
||||||
|
|
||||||
/*
|
/* Increment the number of sides and rings to allow for one more point than surface */
|
||||||
* Increment the number of sides and rings to allow for one more point than surface
|
|
||||||
*/
|
|
||||||
nSides ++ ;
|
nSides ++ ;
|
||||||
nRings ++ ;
|
nRings ++ ;
|
||||||
|
|
||||||
/*
|
/* Allocate the vertices array */
|
||||||
* Allocate the vertices array
|
|
||||||
*/
|
|
||||||
vertex = (double *)calloc( sizeof(double), 3 * nSides * nRings );
|
vertex = (double *)calloc( sizeof(double), 3 * nSides * nRings );
|
||||||
normal = (double *)calloc( sizeof(double), 3 * nSides * nRings );
|
normal = (double *)calloc( sizeof(double), 3 * nSides * nRings );
|
||||||
|
|
||||||
@ -744,7 +734,8 @@ void FGAPIENTRY glutWireDodecahedron( void )
|
|||||||
/* Magic Numbers: It is possible to create a dodecahedron by attaching two pentagons to each face of
|
/* Magic Numbers: It is possible to create a dodecahedron by attaching two pentagons to each face of
|
||||||
* of a cube. The coordinates of the points are:
|
* of a cube. The coordinates of the points are:
|
||||||
* (+-x,0, z); (+-1, 1, 1); (0, z, x )
|
* (+-x,0, z); (+-1, 1, 1); (0, z, x )
|
||||||
* where x = 0.61803398875 and z = 1.61803398875.
|
* where x = (-1 + sqrt(5))/2, z = (1 + sqrt(5))/2 or
|
||||||
|
* x = 0.61803398875 and z = 1.61803398875.
|
||||||
*/
|
*/
|
||||||
glBegin ( GL_LINE_LOOP ) ;
|
glBegin ( GL_LINE_LOOP ) ;
|
||||||
glNormal3d ( 0.0, 0.525731112119, 0.850650808354 ) ; glVertex3d ( 0.0, 1.61803398875, 0.61803398875 ) ; glVertex3d ( -1.0, 1.0, 1.0 ) ; glVertex3d ( -0.61803398875, 0.0, 1.61803398875 ) ; glVertex3d ( 0.61803398875, 0.0, 1.61803398875 ) ; glVertex3d ( 1.0, 1.0, 1.0 ) ;
|
glNormal3d ( 0.0, 0.525731112119, 0.850650808354 ) ; glVertex3d ( 0.0, 1.61803398875, 0.61803398875 ) ; glVertex3d ( -1.0, 1.0, 1.0 ) ; glVertex3d ( -0.61803398875, 0.0, 1.61803398875 ) ; glVertex3d ( 0.61803398875, 0.0, 1.61803398875 ) ; glVertex3d ( 1.0, 1.0, 1.0 ) ;
|
||||||
@ -794,7 +785,8 @@ void FGAPIENTRY glutSolidDodecahedron( void )
|
|||||||
/* Magic Numbers: It is possible to create a dodecahedron by attaching two pentagons to each face of
|
/* Magic Numbers: It is possible to create a dodecahedron by attaching two pentagons to each face of
|
||||||
* of a cube. The coordinates of the points are:
|
* of a cube. The coordinates of the points are:
|
||||||
* (+-x,0, z); (+-1, 1, 1); (0, z, x )
|
* (+-x,0, z); (+-1, 1, 1); (0, z, x )
|
||||||
* where x = 0.61803398875 and z = 1.61803398875.
|
* where x = (-1 + sqrt(5))/2, z = (1 + sqrt(5))/2 or
|
||||||
|
* x = 0.61803398875 and z = 1.61803398875.
|
||||||
*/
|
*/
|
||||||
glBegin ( GL_POLYGON ) ;
|
glBegin ( GL_POLYGON ) ;
|
||||||
glNormal3d ( 0.0, 0.525731112119, 0.850650808354 ) ; glVertex3d ( 0.0, 1.61803398875, 0.61803398875 ) ; glVertex3d ( -1.0, 1.0, 1.0 ) ; glVertex3d ( -0.61803398875, 0.0, 1.61803398875 ) ; glVertex3d ( 0.61803398875, 0.0, 1.61803398875 ) ; glVertex3d ( 1.0, 1.0, 1.0 ) ;
|
glNormal3d ( 0.0, 0.525731112119, 0.850650808354 ) ; glVertex3d ( 0.0, 1.61803398875, 0.61803398875 ) ; glVertex3d ( -1.0, 1.0, 1.0 ) ; glVertex3d ( -0.61803398875, 0.0, 1.61803398875 ) ; glVertex3d ( 0.61803398875, 0.0, 1.61803398875 ) ; glVertex3d ( 1.0, 1.0, 1.0 ) ;
|
||||||
|
@ -132,9 +132,7 @@ void fgInitialize( const char* displayName )
|
|||||||
|
|
||||||
fgDisplay.Connection = ConnectionNumber( fgDisplay.Display );
|
fgDisplay.Connection = ConnectionNumber( fgDisplay.Display );
|
||||||
|
|
||||||
/*
|
/* Create the window deletion atom */
|
||||||
* Create the window deletion atom
|
|
||||||
*/
|
|
||||||
fgDisplay.DeleteWindow = XInternAtom(
|
fgDisplay.DeleteWindow = XInternAtom(
|
||||||
fgDisplay.Display,
|
fgDisplay.Display,
|
||||||
"WM_DELETE_WINDOW",
|
"WM_DELETE_WINDOW",
|
||||||
@ -146,9 +144,7 @@ void fgInitialize( const char* displayName )
|
|||||||
WNDCLASS wc;
|
WNDCLASS wc;
|
||||||
ATOM atom;
|
ATOM atom;
|
||||||
|
|
||||||
/*
|
/* What we need to do is to initialize the fgDisplay global structure here. */
|
||||||
* What we need to do is to initialize the fgDisplay global structure here.
|
|
||||||
*/
|
|
||||||
fgDisplay.Instance = GetModuleHandle( NULL );
|
fgDisplay.Instance = GetModuleHandle( NULL );
|
||||||
|
|
||||||
atom = GetClassInfo( fgDisplay.Instance, _T("FREEGLUT"), &wc );
|
atom = GetClassInfo( fgDisplay.Instance, _T("FREEGLUT"), &wc );
|
||||||
@ -184,16 +180,12 @@ void fgInitialize( const char* displayName )
|
|||||||
wc.lpszMenuName = NULL;
|
wc.lpszMenuName = NULL;
|
||||||
wc.lpszClassName = _T("FREEGLUT");
|
wc.lpszClassName = _T("FREEGLUT");
|
||||||
|
|
||||||
/*
|
/* Register the window class */
|
||||||
* Register the window class
|
|
||||||
*/
|
|
||||||
atom = RegisterClass( &wc );
|
atom = RegisterClass( &wc );
|
||||||
assert( atom );
|
assert( atom );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/* The screen dimensions can be obtained via GetSystemMetrics() calls */
|
||||||
* The screen dimensions can be obtained via GetSystemMetrics() calls
|
|
||||||
*/
|
|
||||||
fgDisplay.ScreenWidth = GetSystemMetrics( SM_CXSCREEN );
|
fgDisplay.ScreenWidth = GetSystemMetrics( SM_CXSCREEN );
|
||||||
fgDisplay.ScreenHeight = GetSystemMetrics( SM_CYSCREEN );
|
fgDisplay.ScreenHeight = GetSystemMetrics( SM_CYSCREEN );
|
||||||
|
|
||||||
@ -233,9 +225,7 @@ void fgDeinitialize( void )
|
|||||||
|
|
||||||
/* fgState.Initialised = GL_FALSE; */
|
/* fgState.Initialised = GL_FALSE; */
|
||||||
|
|
||||||
/*
|
/* If there was a menu created, destroy the rendering context */
|
||||||
* If there was a menu created, destroy the rendering context
|
|
||||||
*/
|
|
||||||
if( fgStructure.MenuContext )
|
if( fgStructure.MenuContext )
|
||||||
{
|
{
|
||||||
free( fgStructure.MenuContext );
|
free( fgStructure.MenuContext );
|
||||||
@ -688,9 +678,7 @@ void FGAPIENTRY glutInitWindowSize( int width, int height )
|
|||||||
*/
|
*/
|
||||||
void FGAPIENTRY glutInitDisplayMode( unsigned int displayMode )
|
void FGAPIENTRY glutInitDisplayMode( unsigned int displayMode )
|
||||||
{
|
{
|
||||||
/*
|
/* We will make use of this value when creating a new OpenGL context... */
|
||||||
* We will make use of this value when creating a new OpenGL context...
|
|
||||||
*/
|
|
||||||
fgState.DisplayMode = displayMode;
|
fgState.DisplayMode = displayMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -732,9 +720,7 @@ void FGAPIENTRY glutInitDisplayString( const char* displayMode )
|
|||||||
token = strtok ( buffer, " \t" );
|
token = strtok ( buffer, " \t" );
|
||||||
while ( token )
|
while ( token )
|
||||||
{
|
{
|
||||||
/*
|
/* Process this token */
|
||||||
* Process this token
|
|
||||||
*/
|
|
||||||
int i ;
|
int i ;
|
||||||
for ( i = 0; i < NUM_TOKENS; i++ )
|
for ( i = 0; i < NUM_TOKENS; i++ )
|
||||||
{
|
{
|
||||||
@ -890,9 +876,7 @@ void FGAPIENTRY glutInitDisplayString( const char* displayMode )
|
|||||||
|
|
||||||
free ( buffer );
|
free ( buffer );
|
||||||
|
|
||||||
/*
|
/* We will make use of this value when creating a new OpenGL context... */
|
||||||
* We will make use of this value when creating a new OpenGL context...
|
|
||||||
*/
|
|
||||||
fgState.DisplayMode = glut_state_flag;
|
fgState.DisplayMode = glut_state_flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,9 +33,7 @@
|
|||||||
#define VERSION_MINOR 2
|
#define VERSION_MINOR 2
|
||||||
#define VERSION_PATCH 0
|
#define VERSION_PATCH 0
|
||||||
|
|
||||||
/*
|
/* Freeglut is meant to be available under all Unix/X11 and Win32 platforms. */
|
||||||
* Freeglut is meant to be available under all Unix/X11 and Win32 platforms.
|
|
||||||
*/
|
|
||||||
#if defined(_WIN32_WCE)
|
#if defined(_WIN32_WCE)
|
||||||
# define TARGET_HOST_UNIX_X11 0
|
# define TARGET_HOST_UNIX_X11 0
|
||||||
# define TARGET_HOST_WIN32 0
|
# define TARGET_HOST_WIN32 0
|
||||||
@ -52,9 +50,7 @@
|
|||||||
|
|
||||||
#define FREEGLUT_MAX_MENUS 3
|
#define FREEGLUT_MAX_MENUS 3
|
||||||
|
|
||||||
/*
|
/* Somehow all Win32 include headers depend on this one: */
|
||||||
* Somehow all Win32 include headers depend on this one:
|
|
||||||
*/
|
|
||||||
#if TARGET_HOST_WIN32
|
#if TARGET_HOST_WIN32
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <windowsx.h>
|
#include <windowsx.h>
|
||||||
@ -66,9 +62,7 @@
|
|||||||
#define strdup _strdup
|
#define strdup _strdup
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/* Those files should be available on every platform. */
|
||||||
* Those files should be available on every platform.
|
|
||||||
*/
|
|
||||||
#include <GL/gl.h>
|
#include <GL/gl.h>
|
||||||
#include <GL/glu.h>
|
#include <GL/glu.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -82,9 +76,7 @@
|
|||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/* The system-dependant include files should go here: */
|
||||||
* The system-dependant include files should go here:
|
|
||||||
*/
|
|
||||||
#if TARGET_HOST_UNIX_X11
|
#if TARGET_HOST_UNIX_X11
|
||||||
#include <GL/glx.h>
|
#include <GL/glx.h>
|
||||||
#include <X11/Xlib.h>
|
#include <X11/Xlib.h>
|
||||||
@ -96,9 +88,7 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/* Microsoft VisualC++ 5.0's <math.h> does not define the PI */
|
||||||
* Microsoft VisualC++ 5.0's <math.h> does not define the PI
|
|
||||||
*/
|
|
||||||
#ifndef M_PI
|
#ifndef M_PI
|
||||||
# define M_PI 3.14159265358979323846
|
# define M_PI 3.14159265358979323846
|
||||||
#endif
|
#endif
|
||||||
@ -113,9 +103,7 @@
|
|||||||
|
|
||||||
/* -- GLOBAL TYPE DEFINITIONS ---------------------------------------------- */
|
/* -- GLOBAL TYPE DEFINITIONS ---------------------------------------------- */
|
||||||
|
|
||||||
/*
|
/* Freeglut callbacks type definitions */
|
||||||
* Freeglut callbacks type definitions
|
|
||||||
*/
|
|
||||||
typedef void (* FGCBDisplay )( void );
|
typedef void (* FGCBDisplay )( void );
|
||||||
typedef void (* FGCBReshape )( int, int );
|
typedef void (* FGCBReshape )( int, int );
|
||||||
typedef void (* FGCBVisibility )( int );
|
typedef void (* FGCBVisibility )( int );
|
||||||
@ -141,23 +129,17 @@ typedef void (* FGCBTabletMotion )( int, int );
|
|||||||
typedef void (* FGCBTabletButton )( int, int, int, int );
|
typedef void (* FGCBTabletButton )( int, int, int, int );
|
||||||
typedef void (* FGCBDestroy )( void );
|
typedef void (* FGCBDestroy )( void );
|
||||||
|
|
||||||
/*
|
/* The global callbacks type definitions */
|
||||||
* The global callbacks type definitions
|
|
||||||
*/
|
|
||||||
typedef void (* FGCBIdle )( void );
|
typedef void (* FGCBIdle )( void );
|
||||||
typedef void (* FGCBTimer )( int );
|
typedef void (* FGCBTimer )( int );
|
||||||
typedef void (* FGCBMenuState )( int );
|
typedef void (* FGCBMenuState )( int );
|
||||||
typedef void (* FGCBMenuStatus )( int, int, int );
|
typedef void (* FGCBMenuStatus )( int, int, int );
|
||||||
|
|
||||||
/*
|
/* The callback used when creating/using menus */
|
||||||
* The callback used when creating/using menus
|
|
||||||
*/
|
|
||||||
typedef void (* FGCBMenu )( int );
|
typedef void (* FGCBMenu )( int );
|
||||||
|
|
||||||
|
|
||||||
/*
|
/* A list structure */
|
||||||
* A list structure
|
|
||||||
*/
|
|
||||||
typedef struct tagSFG_List SFG_List;
|
typedef struct tagSFG_List SFG_List;
|
||||||
struct tagSFG_List
|
struct tagSFG_List
|
||||||
{
|
{
|
||||||
@ -165,9 +147,7 @@ struct tagSFG_List
|
|||||||
void *Last;
|
void *Last;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/* A list node structure */
|
||||||
* A list node structure
|
|
||||||
*/
|
|
||||||
typedef struct tagSFG_Node SFG_Node;
|
typedef struct tagSFG_Node SFG_Node;
|
||||||
struct tagSFG_Node
|
struct tagSFG_Node
|
||||||
{
|
{
|
||||||
@ -175,9 +155,7 @@ struct tagSFG_Node
|
|||||||
void *Prev;
|
void *Prev;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/* A helper structure holding two ints and a boolean */
|
||||||
* A helper structure holding two ints and a boolean
|
|
||||||
*/
|
|
||||||
typedef struct tagSFG_XYUse SFG_XYUse;
|
typedef struct tagSFG_XYUse SFG_XYUse;
|
||||||
struct tagSFG_XYUse
|
struct tagSFG_XYUse
|
||||||
{
|
{
|
||||||
@ -185,13 +163,11 @@ struct tagSFG_XYUse
|
|||||||
GLboolean Use; /* ...and a single boolean. */
|
GLboolean Use; /* ...and a single boolean. */
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/* A helper structure holding a timeval and a boolean */
|
||||||
* A helper structure holding a timeval and a boolean
|
|
||||||
*/
|
|
||||||
typedef struct tagSFG_Time SFG_Time;
|
typedef struct tagSFG_Time SFG_Time;
|
||||||
struct tagSFG_Time
|
struct tagSFG_Time
|
||||||
{
|
{
|
||||||
#if TARGET_HOST_WIN32 || TARGET_HOST_WINCE
|
#ifdef WIN32
|
||||||
DWORD Value;
|
DWORD Value;
|
||||||
#else
|
#else
|
||||||
struct timeval Value;
|
struct timeval Value;
|
||||||
@ -210,9 +186,7 @@ typedef enum
|
|||||||
GLUT_EXEC_STATE_STOP
|
GLUT_EXEC_STATE_STOP
|
||||||
} fgExecutionState ;
|
} fgExecutionState ;
|
||||||
|
|
||||||
/*
|
/* This structure holds different freeglut settings */
|
||||||
* This structure holds different freeglut settings
|
|
||||||
*/
|
|
||||||
typedef struct tagSFG_State SFG_State;
|
typedef struct tagSFG_State SFG_State;
|
||||||
struct tagSFG_State
|
struct tagSFG_State
|
||||||
{
|
{
|
||||||
@ -257,9 +231,7 @@ struct tagSFG_State
|
|||||||
char *ProgramName; /* Name of the invoking program */
|
char *ProgramName; /* Name of the invoking program */
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/* The structure used by display initialization in freeglut_init.c */
|
||||||
* The structure used by display initialization in freeglut_init.c
|
|
||||||
*/
|
|
||||||
typedef struct tagSFG_Display SFG_Display;
|
typedef struct tagSFG_Display SFG_Display;
|
||||||
struct tagSFG_Display
|
struct tagSFG_Display
|
||||||
{
|
{
|
||||||
@ -298,9 +270,7 @@ struct tagSFG_Display
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/*
|
/* The user can create any number of timer hooks */
|
||||||
* The user can create any number of timer hooks
|
|
||||||
*/
|
|
||||||
typedef struct tagSFG_Timer SFG_Timer;
|
typedef struct tagSFG_Timer SFG_Timer;
|
||||||
struct tagSFG_Timer
|
struct tagSFG_Timer
|
||||||
{
|
{
|
||||||
@ -347,9 +317,7 @@ struct tagSFG_Context
|
|||||||
int DoubleBuffered; /* Treat the window as double-buffered */
|
int DoubleBuffered; /* Treat the window as double-buffered */
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/* Window's state description. This structure should be kept portable. */
|
||||||
* Window's state description. This structure should be kept portable.
|
|
||||||
*/
|
|
||||||
typedef struct tagSFG_WindowState SFG_WindowState;
|
typedef struct tagSFG_WindowState SFG_WindowState;
|
||||||
struct tagSFG_WindowState
|
struct tagSFG_WindowState
|
||||||
{
|
{
|
||||||
@ -493,9 +461,7 @@ enum
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/*
|
/* This structure holds the OpenGL rendering context for all the menu windows */
|
||||||
* This structure holds the OpenGL rendering context for all the menu windows
|
|
||||||
*/
|
|
||||||
typedef struct tagSFG_MenuContext SFG_MenuContext;
|
typedef struct tagSFG_MenuContext SFG_MenuContext;
|
||||||
struct tagSFG_MenuContext
|
struct tagSFG_MenuContext
|
||||||
{
|
{
|
||||||
@ -506,9 +472,7 @@ struct tagSFG_MenuContext
|
|||||||
SFG_WindowContextType Context; /* The menu window's WGL context */
|
SFG_WindowContextType Context; /* The menu window's WGL context */
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/* This structure describes a menu */
|
||||||
* This structure describes a menu
|
|
||||||
*/
|
|
||||||
typedef struct tagSFG_Window SFG_Window;
|
typedef struct tagSFG_Window SFG_Window;
|
||||||
typedef struct tagSFG_MenuEntry SFG_MenuEntry;
|
typedef struct tagSFG_MenuEntry SFG_MenuEntry;
|
||||||
typedef struct tagSFG_Menu SFG_Menu;
|
typedef struct tagSFG_Menu SFG_Menu;
|
||||||
@ -530,9 +494,7 @@ struct tagSFG_Menu
|
|||||||
SFG_Window *ParentWindow; /* Window in which the menu is defined */
|
SFG_Window *ParentWindow; /* Window in which the menu is defined */
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/* This is a menu entry */
|
||||||
* This is a menu entry
|
|
||||||
*/
|
|
||||||
struct tagSFG_MenuEntry
|
struct tagSFG_MenuEntry
|
||||||
{
|
{
|
||||||
SFG_Node Node;
|
SFG_Node Node;
|
||||||
@ -568,9 +530,7 @@ struct tagSFG_Window
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/*
|
/* A linked list structure of windows */
|
||||||
* A linked list structure of windows
|
|
||||||
*/
|
|
||||||
typedef struct tagSFG_WindowList SFG_WindowList ;
|
typedef struct tagSFG_WindowList SFG_WindowList ;
|
||||||
struct tagSFG_WindowList
|
struct tagSFG_WindowList
|
||||||
{
|
{
|
||||||
@ -578,9 +538,7 @@ struct tagSFG_WindowList
|
|||||||
SFG_Window *window ;
|
SFG_Window *window ;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/* This holds information about all the windows, menus etc. */
|
||||||
* This holds information about all the windows, menus etc.
|
|
||||||
*/
|
|
||||||
typedef struct tagSFG_Structure SFG_Structure;
|
typedef struct tagSFG_Structure SFG_Structure;
|
||||||
struct tagSFG_Structure
|
struct tagSFG_Structure
|
||||||
{
|
{
|
||||||
@ -613,9 +571,7 @@ struct tagSFG_Enumerator
|
|||||||
};
|
};
|
||||||
typedef void (* FGCBenumerator )( SFG_Window *, SFG_Enumerator * );
|
typedef void (* FGCBenumerator )( SFG_Window *, SFG_Enumerator * );
|
||||||
|
|
||||||
/*
|
/* The bitmap font structure */
|
||||||
* The bitmap font structure
|
|
||||||
*/
|
|
||||||
typedef struct tagSFG_Font SFG_Font;
|
typedef struct tagSFG_Font SFG_Font;
|
||||||
struct tagSFG_Font
|
struct tagSFG_Font
|
||||||
{
|
{
|
||||||
@ -627,9 +583,7 @@ struct tagSFG_Font
|
|||||||
float xorig, yorig; /* Relative origin of the character */
|
float xorig, yorig; /* Relative origin of the character */
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/* The stroke font structures */
|
||||||
* The stroke font structures
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef struct tagSFG_StrokeVertex SFG_StrokeVertex;
|
typedef struct tagSFG_StrokeVertex SFG_StrokeVertex;
|
||||||
struct tagSFG_StrokeVertex
|
struct tagSFG_StrokeVertex
|
||||||
@ -663,19 +617,13 @@ struct tagSFG_StrokeFont
|
|||||||
|
|
||||||
/* -- GLOBAL VARIABLES EXPORTS --------------------------------------------- */
|
/* -- GLOBAL VARIABLES EXPORTS --------------------------------------------- */
|
||||||
|
|
||||||
/*
|
/* Freeglut display related stuff (initialized once per session) */
|
||||||
* Freeglut display related stuff (initialized once per session)
|
|
||||||
*/
|
|
||||||
extern SFG_Display fgDisplay;
|
extern SFG_Display fgDisplay;
|
||||||
|
|
||||||
/*
|
/* Freeglut internal structure */
|
||||||
* Freeglut internal structure
|
|
||||||
*/
|
|
||||||
extern SFG_Structure fgStructure;
|
extern SFG_Structure fgStructure;
|
||||||
|
|
||||||
/*
|
/* The current freeglut settings */
|
||||||
* The current freeglut settings
|
|
||||||
*/
|
|
||||||
extern SFG_State fgState;
|
extern SFG_State fgState;
|
||||||
|
|
||||||
|
|
||||||
@ -722,16 +670,12 @@ void fgDeinitialize( void );
|
|||||||
void fgCreateStructure( void );
|
void fgCreateStructure( void );
|
||||||
void fgDestroyStructure( void );
|
void fgDestroyStructure( void );
|
||||||
|
|
||||||
/*
|
/* A helper function to check if a display mode is possible to use */
|
||||||
* A helper function to check if a display mode is possible to use
|
|
||||||
*/
|
|
||||||
#if TARGET_HOST_UNIX_X11
|
#if TARGET_HOST_UNIX_X11
|
||||||
XVisualInfo* fgChooseVisual( void );
|
XVisualInfo* fgChooseVisual( void );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/* The window procedure for Win32 events handling */
|
||||||
* The window procedure for Win32 events handling
|
|
||||||
*/
|
|
||||||
#if TARGET_HOST_WIN32 || TARGET_HOST_WINCE
|
#if TARGET_HOST_WIN32 || TARGET_HOST_WINCE
|
||||||
LRESULT CALLBACK fgWindowProc( HWND hWnd, UINT uMsg,
|
LRESULT CALLBACK fgWindowProc( HWND hWnd, UINT uMsg,
|
||||||
WPARAM wParam, LPARAM lParam );
|
WPARAM wParam, LPARAM lParam );
|
||||||
@ -757,15 +701,11 @@ void fgCloseWindows ();
|
|||||||
void fgDestroyWindow( SFG_Window* window );
|
void fgDestroyWindow( SFG_Window* window );
|
||||||
void fgClearCallBacks( SFG_Window *window );
|
void fgClearCallBacks( SFG_Window *window );
|
||||||
|
|
||||||
/*
|
/* Menu creation and destruction. Defined in freeglut_structure.c */
|
||||||
* Menu creation and destruction. Defined in freeglut_structure.c
|
|
||||||
*/
|
|
||||||
SFG_Menu* fgCreateMenu( FGCBMenu menuCallback );
|
SFG_Menu* fgCreateMenu( FGCBMenu menuCallback );
|
||||||
void fgDestroyMenu( SFG_Menu* menu );
|
void fgDestroyMenu( SFG_Menu* menu );
|
||||||
|
|
||||||
/*
|
/* Joystick device management functions, defined in freeglut_joystick.c */
|
||||||
* Joystick device management functions, defined in freeglut_joystick.c
|
|
||||||
*/
|
|
||||||
void fgJoystickInit( int ident );
|
void fgJoystickInit( int ident );
|
||||||
void fgJoystickClose( void );
|
void fgJoystickClose( void );
|
||||||
void fgJoystickPollWindow( SFG_Window* window );
|
void fgJoystickPollWindow( SFG_Window* window );
|
||||||
@ -829,23 +769,17 @@ void fgDisplayMenu( void );
|
|||||||
*/
|
*/
|
||||||
void fgDisplayCursor( void );
|
void fgDisplayCursor( void );
|
||||||
|
|
||||||
/*
|
/* Elapsed time as per glutGet(GLUT_ELAPSED_TIME). */
|
||||||
* Elapsed time as per glutGet(GLUT_ELAPSED_TIME).
|
|
||||||
*/
|
|
||||||
long fgElapsedTime( void );
|
long fgElapsedTime( void );
|
||||||
|
|
||||||
/*
|
/* List functions */
|
||||||
* List functions
|
|
||||||
*/
|
|
||||||
void fgListInit(SFG_List *list);
|
void fgListInit(SFG_List *list);
|
||||||
void fgListAppend(SFG_List *list, SFG_Node *node);
|
void fgListAppend(SFG_List *list, SFG_Node *node);
|
||||||
void fgListRemove(SFG_List *list, SFG_Node *node);
|
void fgListRemove(SFG_List *list, SFG_Node *node);
|
||||||
int fgListLength(SFG_List *list);
|
int fgListLength(SFG_List *list);
|
||||||
void fgListInsert(SFG_List *list, SFG_Node *next, SFG_Node *node);
|
void fgListInsert(SFG_List *list, SFG_Node *next, SFG_Node *node);
|
||||||
|
|
||||||
/*
|
/* Error Message functions */
|
||||||
* Error Messages functions
|
|
||||||
*/
|
|
||||||
void fgError( const char *fmt, ... );
|
void fgError( const char *fmt, ... );
|
||||||
void fgWarning( const char *fmt, ... );
|
void fgWarning( const char *fmt, ... );
|
||||||
|
|
||||||
|
@ -73,9 +73,7 @@
|
|||||||
#if TARGET_HOST_UNIX_X11
|
#if TARGET_HOST_UNIX_X11
|
||||||
# define _JS_MAX_AXES 16
|
# define _JS_MAX_AXES 16
|
||||||
# if defined(__FreeBSD__) || defined(__NetBSD__)
|
# if defined(__FreeBSD__) || defined(__NetBSD__)
|
||||||
/*
|
/* XXX The below hack is done until freeglut's autoconf is updated. */
|
||||||
* XXX The below hack is done until freeglut's autoconf is updated.
|
|
||||||
*/
|
|
||||||
# define HAVE_USB_JS 1
|
# define HAVE_USB_JS 1
|
||||||
|
|
||||||
# include <sys/ioctl.h>
|
# include <sys/ioctl.h>
|
||||||
@ -133,17 +131,13 @@
|
|||||||
#define JS_TRUE 1
|
#define JS_TRUE 1
|
||||||
#define JS_FALSE 0
|
#define JS_FALSE 0
|
||||||
|
|
||||||
/*
|
/* BSD defines from "jsBSD.cxx" around lines 42-270 */
|
||||||
* BSD defines from "jsBSD.cxx" around lines 42-270
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if defined(__NetBSD__) || defined(__FreeBSD__)
|
#if defined(__NetBSD__) || defined(__FreeBSD__)
|
||||||
|
|
||||||
# ifdef HAVE_USB_JS
|
# ifdef HAVE_USB_JS
|
||||||
# if defined(__NetBSD__)
|
# if defined(__NetBSD__)
|
||||||
/*
|
/* XXX The below hack is done until freeglut's autoconf is updated. */
|
||||||
* XXX The below hack is done until freeglut's autoconf is updated.
|
|
||||||
*/
|
|
||||||
# define HAVE_USBHID_H 1
|
# define HAVE_USBHID_H 1
|
||||||
# ifdef HAVE_USBHID_H
|
# ifdef HAVE_USBHID_H
|
||||||
# include <usbhid.h>
|
# include <usbhid.h>
|
||||||
@ -154,9 +148,7 @@
|
|||||||
# if __FreeBSD_version < 500000
|
# if __FreeBSD_version < 500000
|
||||||
# include <libusbhid.h>
|
# include <libusbhid.h>
|
||||||
# else
|
# else
|
||||||
/*
|
/* XXX The below hack is done until freeglut's autoconf is updated. */
|
||||||
* XXX The below hack is done until freeglut's autoconf is updated.
|
|
||||||
*/
|
|
||||||
# define HAVE_USBHID_H 1
|
# define HAVE_USBHID_H 1
|
||||||
# include <usbhid.h>
|
# include <usbhid.h>
|
||||||
# endif
|
# endif
|
||||||
@ -1145,9 +1137,7 @@ static void fghJoystickOpen( SFG_Joystick* joy )
|
|||||||
joy->name[ 0 ] = '\0';
|
joy->name[ 0 ] = '\0';
|
||||||
|
|
||||||
#if TARGET_HOST_MACINTOSH
|
#if TARGET_HOST_MACINTOSH
|
||||||
/*
|
/* XXX FIXME: get joystick name in Mac */
|
||||||
* XXX FIXME: get joystick name in Mac
|
|
||||||
*/
|
|
||||||
|
|
||||||
err = ISpStartup( );
|
err = ISpStartup( );
|
||||||
|
|
||||||
@ -1349,9 +1339,7 @@ static void fghJoystickOpen( SFG_Joystick* joy )
|
|||||||
joy->max[ 0 ] = ( float )joy->jsCaps.wXmax;
|
joy->max[ 0 ] = ( float )joy->jsCaps.wXmax;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/* Guess all the rest judging on the axes extremals */
|
||||||
* Guess all the rest judging on the axes extremals
|
|
||||||
*/
|
|
||||||
for( i = 0; i < joy->num_axes; i++ )
|
for( i = 0; i < joy->num_axes; i++ )
|
||||||
{
|
{
|
||||||
joy->center [ i ] = ( joy->max[ i ] + joy->min[ i ] ) * 0.5f;
|
joy->center [ i ] = ( joy->max[ i ] + joy->min[ i ] ) * 0.5f;
|
||||||
@ -1466,9 +1454,7 @@ static void fghJoystickOpen( SFG_Joystick* joy )
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined( __linux__ )
|
#if defined( __linux__ )
|
||||||
/*
|
/* Default for older Linux systems. */
|
||||||
* Default for older Linux systems.
|
|
||||||
*/
|
|
||||||
joy->num_axes = 2;
|
joy->num_axes = 2;
|
||||||
joy->num_buttons = 32;
|
joy->num_buttons = 32;
|
||||||
|
|
||||||
@ -1486,9 +1472,7 @@ static void fghJoystickOpen( SFG_Joystick* joy )
|
|||||||
if( joy->error )
|
if( joy->error )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/*
|
/* Set the correct number of axes for the linux driver */
|
||||||
* Set the correct number of axes for the linux driver
|
|
||||||
*/
|
|
||||||
# ifdef JS_NEW
|
# ifdef JS_NEW
|
||||||
/* Melchior Franz's fixes for big-endian Linuxes since writing
|
/* Melchior Franz's fixes for big-endian Linuxes since writing
|
||||||
* to the upper byte of an uninitialized word doesn't work.
|
* to the upper byte of an uninitialized word doesn't work.
|
||||||
@ -1741,7 +1725,6 @@ void fgJoystickPollWindow( SFG_Window* window )
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* PWO: These jsJoystick class methods have not been implemented.
|
* PWO: These jsJoystick class methods have not been implemented.
|
||||||
* We might consider adding such functions to freeglut-2.0.
|
|
||||||
*/
|
*/
|
||||||
int glutJoystickGetNumAxes( int ident )
|
int glutJoystickGetNumAxes( int ident )
|
||||||
{
|
{
|
||||||
|
@ -480,7 +480,7 @@ static void fgSleepForEvents( void )
|
|||||||
* it is possible to have our socket drained but still have
|
* it is possible to have our socket drained but still have
|
||||||
* unprocessed events. (Or, this may just be normal with
|
* unprocessed events. (Or, this may just be normal with
|
||||||
* X, anyway?) We do non-trivial processing of X events
|
* X, anyway?) We do non-trivial processing of X events
|
||||||
* after tham in event-reading loop, in any case, so we
|
* after the event-reading loop, in any case, so we
|
||||||
* need to allow that we may have an empty socket but non-
|
* need to allow that we may have an empty socket but non-
|
||||||
* empty event queue.
|
* empty event queue.
|
||||||
*/
|
*/
|
||||||
@ -537,9 +537,7 @@ void FGAPIENTRY glutMainLoopEvent( void )
|
|||||||
SFG_Window* window;
|
SFG_Window* window;
|
||||||
XEvent event;
|
XEvent event;
|
||||||
|
|
||||||
/*
|
/* This code was repeated constantly, so here it goes into a definition: */
|
||||||
* This code was repeated constantly, so here it goes into a definition:
|
|
||||||
*/
|
|
||||||
#define GETWINDOW(a) \
|
#define GETWINDOW(a) \
|
||||||
window = fgWindowByHandle( event.a.window ); \
|
window = fgWindowByHandle( event.a.window ); \
|
||||||
if( window == NULL ) \
|
if( window == NULL ) \
|
||||||
@ -558,9 +556,7 @@ void FGAPIENTRY glutMainLoopEvent( void )
|
|||||||
switch( event.type )
|
switch( event.type )
|
||||||
{
|
{
|
||||||
case ClientMessage:
|
case ClientMessage:
|
||||||
/*
|
/* Destroy the window when the WM_DELETE_WINDOW message arrives */
|
||||||
* Destroy the window when the WM_DELETE_WINDOW message arrives
|
|
||||||
*/
|
|
||||||
if( (Atom) event.xclient.data.l[ 0 ] == fgDisplay.DeleteWindow )
|
if( (Atom) event.xclient.data.l[ 0 ] == fgDisplay.DeleteWindow )
|
||||||
{
|
{
|
||||||
GETWINDOW( xclient );
|
GETWINDOW( xclient );
|
||||||
@ -851,17 +847,13 @@ void FGAPIENTRY glutMainLoopEvent( void )
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/* No active menu, let's check whether we need to activate one. */
|
||||||
* No active menu, let's check whether we need to activate one.
|
|
||||||
*/
|
|
||||||
if( ( 0 <= button ) &&
|
if( ( 0 <= button ) &&
|
||||||
( FREEGLUT_MAX_MENUS > button ) &&
|
( FREEGLUT_MAX_MENUS > button ) &&
|
||||||
( window->Menu[ button ] ) &&
|
( window->Menu[ button ] ) &&
|
||||||
pressed )
|
pressed )
|
||||||
{
|
{
|
||||||
/*
|
/* XXX Posting a requisite Redisplay seems bogus. */
|
||||||
* XXX Posting a requisite Redisplay seems bogus.
|
|
||||||
*/
|
|
||||||
window->State.Redisplay = GL_TRUE;
|
window->State.Redisplay = GL_TRUE;
|
||||||
fgSetWindow( window );
|
fgSetWindow( window );
|
||||||
fgActivateMenu( window, button );
|
fgActivateMenu( window, button );
|
||||||
@ -916,9 +908,7 @@ void FGAPIENTRY glutMainLoopEvent( void )
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/* Trash the modifiers state */
|
||||||
* Trash the modifiers state
|
|
||||||
*/
|
|
||||||
fgState.Modifiers = 0xffffffff;
|
fgState.Modifiers = 0xffffffff;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -1225,9 +1215,7 @@ LRESULT CALLBACK fgWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam,
|
|||||||
switch( uMsg )
|
switch( uMsg )
|
||||||
{
|
{
|
||||||
case WM_CREATE:
|
case WM_CREATE:
|
||||||
/*
|
/* The window structure is passed as the creation structure paramter... */
|
||||||
* The window structure is passed as the creation structure paramter...
|
|
||||||
*/
|
|
||||||
window = (SFG_Window *) (((LPCREATESTRUCT) lParam)->lpCreateParams);
|
window = (SFG_Window *) (((LPCREATESTRUCT) lParam)->lpCreateParams);
|
||||||
assert( window != NULL );
|
assert( window != NULL );
|
||||||
|
|
||||||
@ -1321,7 +1309,7 @@ LRESULT CALLBACK fgWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam,
|
|||||||
break;
|
break;
|
||||||
#if 0
|
#if 0
|
||||||
case WM_SETFOCUS:
|
case WM_SETFOCUS:
|
||||||
/* printf("WM_SETFOCUS: %p\n", window ); */
|
/* printf("WM_SETFOCUS: %p\n", window ); */
|
||||||
lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );
|
lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1329,7 +1317,7 @@ LRESULT CALLBACK fgWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam,
|
|||||||
if (LOWORD(wParam) != WA_INACTIVE)
|
if (LOWORD(wParam) != WA_INACTIVE)
|
||||||
{
|
{
|
||||||
/* glutSetCursor( fgStructure.Window->State.Cursor ); */
|
/* glutSetCursor( fgStructure.Window->State.Cursor ); */
|
||||||
/* printf("WM_ACTIVATE: glutSetCursor( %p, %d)\n", window,
|
/* printf("WM_ACTIVATE: glutSetCursor( %p, %d)\n", window,
|
||||||
window->State.Cursor ); */
|
window->State.Cursor ); */
|
||||||
glutSetCursor( window->State.Cursor );
|
glutSetCursor( window->State.Cursor );
|
||||||
}
|
}
|
||||||
|
@ -117,9 +117,7 @@ static GLboolean fghCheckMenuStatus( SFG_Window* window, SFG_Menu* menu )
|
|||||||
SFG_MenuEntry* menuEntry;
|
SFG_MenuEntry* menuEntry;
|
||||||
int x, y;
|
int x, y;
|
||||||
|
|
||||||
/*
|
/* First of all check any of the active sub menus... */
|
||||||
* First of all check any of the active sub menus...
|
|
||||||
*/
|
|
||||||
for( menuEntry = (SFG_MenuEntry *)menu->Entries.First;
|
for( menuEntry = (SFG_MenuEntry *)menu->Entries.First;
|
||||||
menuEntry;
|
menuEntry;
|
||||||
menuEntry = (SFG_MenuEntry *)menuEntry->Node.Next )
|
menuEntry = (SFG_MenuEntry *)menuEntry->Node.Next )
|
||||||
@ -144,9 +142,7 @@ static GLboolean fghCheckMenuStatus( SFG_Window* window, SFG_Menu* menu )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/* That much about our sub menus, let's get to checking the current menu: */
|
||||||
* That much about our sub menus, let's get to checking the current menu:
|
|
||||||
*/
|
|
||||||
x = window->State.MouseX;
|
x = window->State.MouseX;
|
||||||
y = window->State.MouseY;
|
y = window->State.MouseY;
|
||||||
|
|
||||||
@ -157,9 +153,7 @@ static GLboolean fghCheckMenuStatus( SFG_Window* window, SFG_Menu* menu )
|
|||||||
|
|
||||||
menu->IsActive = GL_FALSE;
|
menu->IsActive = GL_FALSE;
|
||||||
|
|
||||||
/*
|
/* Check if the mouse cursor is contained within the current menu box */
|
||||||
* Check if the mouse cursor is contained within the current menu box
|
|
||||||
*/
|
|
||||||
if( ( x >= FREEGLUT_MENU_BORDER ) &&
|
if( ( x >= FREEGLUT_MENU_BORDER ) &&
|
||||||
( x < menu->Width - FREEGLUT_MENU_BORDER ) &&
|
( x < menu->Width - FREEGLUT_MENU_BORDER ) &&
|
||||||
( y >= FREEGLUT_MENU_BORDER ) &&
|
( y >= FREEGLUT_MENU_BORDER ) &&
|
||||||
@ -168,9 +162,7 @@ static GLboolean fghCheckMenuStatus( SFG_Window* window, SFG_Menu* menu )
|
|||||||
{
|
{
|
||||||
int menuID = ( y - FREEGLUT_MENU_BORDER ) / FREEGLUT_MENU_HEIGHT;
|
int menuID = ( y - FREEGLUT_MENU_BORDER ) / FREEGLUT_MENU_HEIGHT;
|
||||||
|
|
||||||
/*
|
/* The mouse cursor is somewhere over our box, check it out. */
|
||||||
* The mouse cursor is somewhere over our box, check it out.
|
|
||||||
*/
|
|
||||||
menuEntry = fghFindMenuEntry( menu, menuID + 1 );
|
menuEntry = fghFindMenuEntry( menu, menuID + 1 );
|
||||||
assert( menuEntry );
|
assert( menuEntry );
|
||||||
|
|
||||||
@ -200,14 +192,10 @@ static GLboolean fghCheckMenuStatus( SFG_Window* window, SFG_Menu* menu )
|
|||||||
{
|
{
|
||||||
SFG_Window *current_window = fgStructure.Window;
|
SFG_Window *current_window = fgStructure.Window;
|
||||||
|
|
||||||
/*
|
/* Set up the initial menu position now... */
|
||||||
* Set up the initial menu position now...
|
|
||||||
*/
|
|
||||||
menuEntry->SubMenu->IsActive = GL_TRUE;
|
menuEntry->SubMenu->IsActive = GL_TRUE;
|
||||||
|
|
||||||
/*
|
/* Set up the initial submenu position now: */
|
||||||
* Set up the initial submenu position now:
|
|
||||||
*/
|
|
||||||
menuEntry->SubMenu->X = menu->X + menu->Width;
|
menuEntry->SubMenu->X = menu->X + menu->Width;
|
||||||
menuEntry->SubMenu->Y = menu->Y +
|
menuEntry->SubMenu->Y = menu->Y +
|
||||||
menuEntry->Ordinal * FREEGLUT_MENU_HEIGHT;
|
menuEntry->Ordinal * FREEGLUT_MENU_HEIGHT;
|
||||||
@ -236,21 +224,15 @@ static GLboolean fghCheckMenuStatus( SFG_Window* window, SFG_Menu* menu )
|
|||||||
|
|
||||||
fghCheckMenuStatus( window, menuEntry->SubMenu );
|
fghCheckMenuStatus( window, menuEntry->SubMenu );
|
||||||
|
|
||||||
/*
|
/* Activate it because its parent entry is active */
|
||||||
* Activate it because its parent entry is active
|
|
||||||
*/
|
|
||||||
menuEntry->SubMenu->IsActive = GL_TRUE;
|
menuEntry->SubMenu->IsActive = GL_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/* Report back that we have caught the menu cursor */
|
||||||
* Report back that we have caught the menu cursor
|
|
||||||
*/
|
|
||||||
return GL_TRUE;
|
return GL_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/* Looks like the menu cursor is somewhere else... */
|
||||||
* Looks like the menu cursor is somewhere else...
|
|
||||||
*/
|
|
||||||
return GL_FALSE;
|
return GL_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -297,16 +279,12 @@ static void fghDisplayMenuBox( SFG_Menu* menu )
|
|||||||
glVertex2i( border, menu->Height - border);
|
glVertex2i( border, menu->Height - border);
|
||||||
glEnd( );
|
glEnd( );
|
||||||
|
|
||||||
/*
|
/* Check if any of the submenus is currently active... */
|
||||||
* Check if any of the submenus is currently active...
|
|
||||||
*/
|
|
||||||
for( menuEntry = (SFG_MenuEntry *)menu->Entries.First;
|
for( menuEntry = (SFG_MenuEntry *)menu->Entries.First;
|
||||||
menuEntry;
|
menuEntry;
|
||||||
menuEntry = (SFG_MenuEntry *)menuEntry->Node.Next )
|
menuEntry = (SFG_MenuEntry *)menuEntry->Node.Next )
|
||||||
{
|
{
|
||||||
/*
|
/* Has the menu been marked as active, maybe? */
|
||||||
* Has the menu been marked as active, maybe?
|
|
||||||
*/
|
|
||||||
if( menuEntry->IsActive )
|
if( menuEntry->IsActive )
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@ -316,9 +294,7 @@ static void fghDisplayMenuBox( SFG_Menu* menu )
|
|||||||
*/
|
*/
|
||||||
int menuID = menuEntry->Ordinal;
|
int menuID = menuEntry->Ordinal;
|
||||||
|
|
||||||
/*
|
/* So have the highlight drawn... */
|
||||||
* So have the highlight drawn...
|
|
||||||
*/
|
|
||||||
glColor4fv( menu_pen_hback );
|
glColor4fv( menu_pen_hback );
|
||||||
glBegin( GL_QUADS );
|
glBegin( GL_QUADS );
|
||||||
glVertex2i( border,
|
glVertex2i( border,
|
||||||
@ -333,9 +309,7 @@ static void fghDisplayMenuBox( SFG_Menu* menu )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/* Print the menu entries now... */
|
||||||
* Print the menu entries now...
|
|
||||||
*/
|
|
||||||
|
|
||||||
glColor4fv( menu_pen_fore );
|
glColor4fv( menu_pen_fore );
|
||||||
|
|
||||||
@ -343,15 +317,11 @@ static void fghDisplayMenuBox( SFG_Menu* menu )
|
|||||||
menuEntry;
|
menuEntry;
|
||||||
menuEntry = (SFG_MenuEntry *)menuEntry->Node.Next, ++i )
|
menuEntry = (SFG_MenuEntry *)menuEntry->Node.Next, ++i )
|
||||||
{
|
{
|
||||||
/*
|
/* If the menu entry is active, set the color to white */
|
||||||
* If the menu entry is active, set the color to white
|
|
||||||
*/
|
|
||||||
if( menuEntry->IsActive )
|
if( menuEntry->IsActive )
|
||||||
glColor4fv( menu_pen_hfore );
|
glColor4fv( menu_pen_hfore );
|
||||||
|
|
||||||
/*
|
/* Move the raster into position... */
|
||||||
* Move the raster into position...
|
|
||||||
*/
|
|
||||||
/* Try to center the text - JCJ 31 July 2003*/
|
/* Try to center the text - JCJ 31 July 2003*/
|
||||||
glRasterPos2i(
|
glRasterPos2i(
|
||||||
2 * border,
|
2 * border,
|
||||||
@ -359,15 +329,11 @@ static void fghDisplayMenuBox( SFG_Menu* menu )
|
|||||||
( int )( FREEGLUT_MENU_HEIGHT*0.3 - border )
|
( int )( FREEGLUT_MENU_HEIGHT*0.3 - border )
|
||||||
);
|
);
|
||||||
|
|
||||||
/*
|
/* Have the label drawn, character after character: */
|
||||||
* Have the label drawn, character after character:
|
|
||||||
*/
|
|
||||||
glutBitmapString( FREEGLUT_MENU_FONT,
|
glutBitmapString( FREEGLUT_MENU_FONT,
|
||||||
(unsigned char *)menuEntry->Text);
|
(unsigned char *)menuEntry->Text);
|
||||||
|
|
||||||
/*
|
/* If it's a submenu, draw a right arrow */
|
||||||
* If it's a submenu, draw a right arrow
|
|
||||||
*/
|
|
||||||
if( menuEntry->SubMenu )
|
if( menuEntry->SubMenu )
|
||||||
{
|
{
|
||||||
int width = glutBitmapWidth( FREEGLUT_MENU_FONT, '_' );
|
int width = glutBitmapWidth( FREEGLUT_MENU_FONT, '_' );
|
||||||
@ -381,28 +347,20 @@ static void fghDisplayMenuBox( SFG_Menu* menu )
|
|||||||
glEnd( );
|
glEnd( );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/* If the menu entry is active, reset the color */
|
||||||
* If the menu entry is active, reset the color
|
|
||||||
*/
|
|
||||||
if( menuEntry->IsActive )
|
if( menuEntry->IsActive )
|
||||||
glColor4fv( menu_pen_fore );
|
glColor4fv( menu_pen_fore );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/* Now we are ready to check if any of our children needs to be redrawn: */
|
||||||
* Now we are ready to check if any of our children needs to be redrawn:
|
|
||||||
*/
|
|
||||||
for( menuEntry = ( SFG_MenuEntry * )menu->Entries.First;
|
for( menuEntry = ( SFG_MenuEntry * )menu->Entries.First;
|
||||||
menuEntry;
|
menuEntry;
|
||||||
menuEntry = ( SFG_MenuEntry * )menuEntry->Node.Next )
|
menuEntry = ( SFG_MenuEntry * )menuEntry->Node.Next )
|
||||||
{
|
{
|
||||||
/*
|
/* Is that an active sub menu by any case? */
|
||||||
* Is that an active sub menu by any case?
|
|
||||||
*/
|
|
||||||
if( menuEntry->SubMenu && menuEntry->IsActive )
|
if( menuEntry->SubMenu && menuEntry->IsActive )
|
||||||
{
|
{
|
||||||
/*
|
/* Yeah, indeed. Have it redrawn now: */
|
||||||
* Yeah, indeed. Have it redrawn now:
|
|
||||||
*/
|
|
||||||
fgSetWindow( menuEntry->SubMenu->Window );
|
fgSetWindow( menuEntry->SubMenu->Window );
|
||||||
fghDisplayMenuBox( menuEntry->SubMenu );
|
fghDisplayMenuBox( menuEntry->SubMenu );
|
||||||
fgSetWindow( menu->Window );
|
fgSetWindow( menu->Window );
|
||||||
@ -438,9 +396,7 @@ void fgDisplayMenu( void )
|
|||||||
|
|
||||||
freeglut_assert_window;
|
freeglut_assert_window;
|
||||||
|
|
||||||
/*
|
/* Check if there is an active menu attached to this window... */
|
||||||
* Check if there is an active menu attached to this window...
|
|
||||||
*/
|
|
||||||
menu = window->ActiveMenu;
|
menu = window->ActiveMenu;
|
||||||
freeglut_return_if_fail( menu );
|
freeglut_return_if_fail( menu );
|
||||||
|
|
||||||
@ -487,21 +443,15 @@ void fgDisplayMenu( void )
|
|||||||
*/
|
*/
|
||||||
void fgActivateMenu( SFG_Window* window, int button )
|
void fgActivateMenu( SFG_Window* window, int button )
|
||||||
{
|
{
|
||||||
/*
|
/* We'll be referencing this menu a lot, so remember its address: */
|
||||||
* We'll be referencing this menu a lot, so remember its address:
|
|
||||||
*/
|
|
||||||
SFG_Menu* menu = window->Menu[ button ];
|
SFG_Menu* menu = window->Menu[ button ];
|
||||||
|
|
||||||
/*
|
/* Mark the menu as active, so that it gets displayed: */
|
||||||
* Mark the menu as active, so that it gets displayed:
|
|
||||||
*/
|
|
||||||
window->ActiveMenu = menu;
|
window->ActiveMenu = menu;
|
||||||
menu->IsActive = GL_TRUE;
|
menu->IsActive = GL_TRUE;
|
||||||
fgState.ActiveMenus++;
|
fgState.ActiveMenus++;
|
||||||
|
|
||||||
/*
|
/* Set up the initial menu position now: */
|
||||||
* Set up the initial menu position now:
|
|
||||||
*/
|
|
||||||
menu->X = window->State.MouseX + glutGet( GLUT_WINDOW_X );
|
menu->X = window->State.MouseX + glutGet( GLUT_WINDOW_X );
|
||||||
menu->Y = window->State.MouseY + glutGet( GLUT_WINDOW_Y );
|
menu->Y = window->State.MouseY + glutGet( GLUT_WINDOW_Y );
|
||||||
|
|
||||||
@ -546,9 +496,7 @@ void fgExecuteMenuCallback( SFG_Menu* menu )
|
|||||||
{
|
{
|
||||||
SFG_MenuEntry *menuEntry;
|
SFG_MenuEntry *menuEntry;
|
||||||
|
|
||||||
/*
|
/* First of all check any of the active sub menus... */
|
||||||
* First of all check any of the active sub menus...
|
|
||||||
*/
|
|
||||||
for( menuEntry = (SFG_MenuEntry *)menu->Entries.First;
|
for( menuEntry = (SFG_MenuEntry *)menu->Entries.First;
|
||||||
menuEntry;
|
menuEntry;
|
||||||
menuEntry = (SFG_MenuEntry *)menuEntry->Node.Next)
|
menuEntry = (SFG_MenuEntry *)menuEntry->Node.Next)
|
||||||
@ -572,42 +520,30 @@ void fgDeactivateMenu( SFG_Window *window )
|
|||||||
{
|
{
|
||||||
SFG_Window *current_window = fgStructure.Window;
|
SFG_Window *current_window = fgStructure.Window;
|
||||||
|
|
||||||
/*
|
/* Check if there is an active menu attached to this window... */
|
||||||
* Check if there is an active menu attached to this window...
|
|
||||||
*/
|
|
||||||
SFG_Menu* menu = window->ActiveMenu;
|
SFG_Menu* menu = window->ActiveMenu;
|
||||||
SFG_MenuEntry *menuEntry;
|
SFG_MenuEntry *menuEntry;
|
||||||
|
|
||||||
/*
|
/* Did we find an active window? */
|
||||||
* Did we find an active window?
|
|
||||||
*/
|
|
||||||
freeglut_return_if_fail( menu );
|
freeglut_return_if_fail( menu );
|
||||||
|
|
||||||
/*
|
/* Hide the present menu's window */
|
||||||
* Hide the present menu's window
|
|
||||||
*/
|
|
||||||
fgSetWindow( menu->Window );
|
fgSetWindow( menu->Window );
|
||||||
glutHideWindow( );
|
glutHideWindow( );
|
||||||
|
|
||||||
/*
|
/* Forget about having that menu active anymore, now: */
|
||||||
* Forget about having that menu active anymore, now:
|
|
||||||
*/
|
|
||||||
menu->Window->ActiveMenu = NULL;
|
menu->Window->ActiveMenu = NULL;
|
||||||
menu->ParentWindow->ActiveMenu = NULL;
|
menu->ParentWindow->ActiveMenu = NULL;
|
||||||
menu->IsActive = GL_FALSE;
|
menu->IsActive = GL_FALSE;
|
||||||
|
|
||||||
fgState.ActiveMenus--;
|
fgState.ActiveMenus--;
|
||||||
|
|
||||||
/*
|
/* Hide all submenu windows, and the root menu's window. */
|
||||||
* Hide all submenu windows, and the root menu's window.
|
|
||||||
*/
|
|
||||||
for ( menuEntry = ( SFG_MenuEntry * )menu->Entries.First;
|
for ( menuEntry = ( SFG_MenuEntry * )menu->Entries.First;
|
||||||
menuEntry;
|
menuEntry;
|
||||||
menuEntry = ( SFG_MenuEntry * )menuEntry->Node.Next )
|
menuEntry = ( SFG_MenuEntry * )menuEntry->Node.Next )
|
||||||
{
|
{
|
||||||
/*
|
/* Is that an active submenu by any case? */
|
||||||
* Is that an active submenu by any case?
|
|
||||||
*/
|
|
||||||
if( menuEntry->SubMenu )
|
if( menuEntry->SubMenu )
|
||||||
fgDeactivateSubMenu( menuEntry );
|
fgDeactivateSubMenu( menuEntry );
|
||||||
}
|
}
|
||||||
@ -622,28 +558,20 @@ void fgDeactivateSubMenu( SFG_MenuEntry *menuEntry )
|
|||||||
{
|
{
|
||||||
SFG_Window *current_window = fgStructure.Window;
|
SFG_Window *current_window = fgStructure.Window;
|
||||||
SFG_MenuEntry *subMenuIter;
|
SFG_MenuEntry *subMenuIter;
|
||||||
/*
|
/* Hide the present menu's window */
|
||||||
* Hide the present menu's window
|
|
||||||
*/
|
|
||||||
fgSetWindow( menuEntry->SubMenu->Window );
|
fgSetWindow( menuEntry->SubMenu->Window );
|
||||||
glutHideWindow( );
|
glutHideWindow( );
|
||||||
|
|
||||||
/*
|
/* Forget about having that menu active anymore, now: */
|
||||||
* Forget about having that menu active anymore, now:
|
|
||||||
*/
|
|
||||||
menuEntry->SubMenu->Window->ActiveMenu = NULL;
|
menuEntry->SubMenu->Window->ActiveMenu = NULL;
|
||||||
menuEntry->SubMenu->IsActive = GL_FALSE;
|
menuEntry->SubMenu->IsActive = GL_FALSE;
|
||||||
|
|
||||||
/*
|
/* Hide all submenu windows, and the root menu's window. */
|
||||||
* Hide all submenu windows, and the root menu's window.
|
|
||||||
*/
|
|
||||||
for ( subMenuIter = (SFG_MenuEntry *)menuEntry->SubMenu->Entries.First;
|
for ( subMenuIter = (SFG_MenuEntry *)menuEntry->SubMenu->Entries.First;
|
||||||
subMenuIter;
|
subMenuIter;
|
||||||
subMenuIter = (SFG_MenuEntry *)subMenuIter->Node.Next )
|
subMenuIter = (SFG_MenuEntry *)subMenuIter->Node.Next )
|
||||||
{
|
{
|
||||||
/*
|
/* Is that an active submenu by any case? */
|
||||||
* Is that an active submenu by any case?
|
|
||||||
*/
|
|
||||||
if( subMenuIter->SubMenu )
|
if( subMenuIter->SubMenu )
|
||||||
fgDeactivateSubMenu( subMenuIter );
|
fgDeactivateSubMenu( subMenuIter );
|
||||||
}
|
}
|
||||||
@ -659,22 +587,16 @@ void fghCalculateMenuBoxSize( void )
|
|||||||
SFG_MenuEntry* menuEntry;
|
SFG_MenuEntry* menuEntry;
|
||||||
int width = 0, height = 0;
|
int width = 0, height = 0;
|
||||||
|
|
||||||
/*
|
/* Make sure there is a current menu set */
|
||||||
* Make sure there is a current menu set
|
|
||||||
*/
|
|
||||||
freeglut_assert_ready;
|
freeglut_assert_ready;
|
||||||
freeglut_return_if_fail( fgStructure.Menu );
|
freeglut_return_if_fail( fgStructure.Menu );
|
||||||
|
|
||||||
/*
|
/* The menu's box size depends on the menu entries: */
|
||||||
* The menu's box size depends on the menu entries:
|
|
||||||
*/
|
|
||||||
for( menuEntry = ( SFG_MenuEntry * )fgStructure.Menu->Entries.First;
|
for( menuEntry = ( SFG_MenuEntry * )fgStructure.Menu->Entries.First;
|
||||||
menuEntry;
|
menuEntry;
|
||||||
menuEntry = ( SFG_MenuEntry * )menuEntry->Node.Next )
|
menuEntry = ( SFG_MenuEntry * )menuEntry->Node.Next )
|
||||||
{
|
{
|
||||||
/*
|
/* Update the menu entry's width value */
|
||||||
* Update the menu entry's width value
|
|
||||||
*/
|
|
||||||
menuEntry->Width = glutBitmapLength(
|
menuEntry->Width = glutBitmapLength(
|
||||||
FREEGLUT_MENU_FONT,
|
FREEGLUT_MENU_FONT,
|
||||||
(unsigned char *)menuEntry->Text
|
(unsigned char *)menuEntry->Text
|
||||||
@ -690,18 +612,14 @@ void fghCalculateMenuBoxSize( void )
|
|||||||
(unsigned char *)"_"
|
(unsigned char *)"_"
|
||||||
);
|
);
|
||||||
|
|
||||||
/*
|
/* Check if it's the biggest we've found */
|
||||||
* Check if it's the biggest we've found
|
|
||||||
*/
|
|
||||||
if( menuEntry->Width > width )
|
if( menuEntry->Width > width )
|
||||||
width = menuEntry->Width;
|
width = menuEntry->Width;
|
||||||
|
|
||||||
height += FREEGLUT_MENU_HEIGHT;
|
height += FREEGLUT_MENU_HEIGHT;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/* Store the menu's box size now: */
|
||||||
* Store the menu's box size now:
|
|
||||||
*/
|
|
||||||
fgStructure.Menu->Height = height + 2 * FREEGLUT_MENU_BORDER;
|
fgStructure.Menu->Height = height + 2 * FREEGLUT_MENU_BORDER;
|
||||||
fgStructure.Menu->Width = width + 4 * FREEGLUT_MENU_BORDER;
|
fgStructure.Menu->Width = width + 4 * FREEGLUT_MENU_BORDER;
|
||||||
}
|
}
|
||||||
@ -714,9 +632,7 @@ void fghCalculateMenuBoxSize( void )
|
|||||||
*/
|
*/
|
||||||
int FGAPIENTRY glutCreateMenu( void(* callback)( int ) )
|
int FGAPIENTRY glutCreateMenu( void(* callback)( int ) )
|
||||||
{
|
{
|
||||||
/*
|
/* The menu object creation code resides in freeglut_structure.c */
|
||||||
* The menu object creation code resides in freeglut_structure.c
|
|
||||||
*/
|
|
||||||
return fgCreateMenu( callback )->ID;
|
return fgCreateMenu( callback )->ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -730,9 +646,7 @@ void FGAPIENTRY glutDestroyMenu( int menuID )
|
|||||||
freeglut_assert_ready;
|
freeglut_assert_ready;
|
||||||
freeglut_return_if_fail( menu );
|
freeglut_return_if_fail( menu );
|
||||||
|
|
||||||
/*
|
/* The menu object destruction code resides in freeglut_structure.c */
|
||||||
* The menu object destruction code resides in freeglut_structure.c
|
|
||||||
*/
|
|
||||||
fgDestroyMenu( menu );
|
fgDestroyMenu( menu );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -776,9 +690,7 @@ void FGAPIENTRY glutAddMenuEntry( const char* label, int value )
|
|||||||
menuEntry->Text = strdup( label );
|
menuEntry->Text = strdup( label );
|
||||||
menuEntry->ID = value;
|
menuEntry->ID = value;
|
||||||
|
|
||||||
/*
|
/* Have the new menu entry attached to the current menu */
|
||||||
* Have the new menu entry attached to the current menu
|
|
||||||
*/
|
|
||||||
fgListAppend( &fgStructure.Menu->Entries, &menuEntry->Node );
|
fgListAppend( &fgStructure.Menu->Entries, &menuEntry->Node );
|
||||||
|
|
||||||
fghCalculateMenuBoxSize( );
|
fghCalculateMenuBoxSize( );
|
||||||
@ -801,9 +713,7 @@ void FGAPIENTRY glutAddSubMenu( const char *label, int subMenuID )
|
|||||||
menuEntry->SubMenu = subMenu;
|
menuEntry->SubMenu = subMenu;
|
||||||
menuEntry->ID = -1;
|
menuEntry->ID = -1;
|
||||||
|
|
||||||
/*
|
/* Make the submenu's parent window be the menu's parent window */
|
||||||
* Make the submenu's parent window be the menu's parent window
|
|
||||||
*/
|
|
||||||
fghSetSubmenuParentWindow( fgStructure.Menu->ParentWindow, subMenu );
|
fghSetSubmenuParentWindow( fgStructure.Menu->ParentWindow, subMenu );
|
||||||
|
|
||||||
fgListAppend( &fgStructure.Menu->Entries, &menuEntry->Node );
|
fgListAppend( &fgStructure.Menu->Entries, &menuEntry->Node );
|
||||||
@ -820,16 +730,12 @@ void FGAPIENTRY glutChangeToMenuEntry( int item, const char* label, int value )
|
|||||||
freeglut_assert_ready;
|
freeglut_assert_ready;
|
||||||
freeglut_return_if_fail( fgStructure.Menu );
|
freeglut_return_if_fail( fgStructure.Menu );
|
||||||
|
|
||||||
/*
|
/* Get n-th menu entry in the current menu, starting from one: */
|
||||||
* Get n-th menu entry in the current menu, starting from one:
|
|
||||||
*/
|
|
||||||
menuEntry = fghFindMenuEntry( fgStructure.Menu, item );
|
menuEntry = fghFindMenuEntry( fgStructure.Menu, item );
|
||||||
|
|
||||||
freeglut_return_if_fail( menuEntry );
|
freeglut_return_if_fail( menuEntry );
|
||||||
|
|
||||||
/*
|
/* We want it to become a normal menu entry, so: */
|
||||||
* We want it to become a normal menu entry, so:
|
|
||||||
*/
|
|
||||||
if( menuEntry->Text )
|
if( menuEntry->Text )
|
||||||
free( menuEntry->Text );
|
free( menuEntry->Text );
|
||||||
|
|
||||||
@ -852,16 +758,12 @@ void FGAPIENTRY glutChangeToSubMenu( int item, const char* label,
|
|||||||
freeglut_return_if_fail( fgStructure.Menu );
|
freeglut_return_if_fail( fgStructure.Menu );
|
||||||
freeglut_return_if_fail( subMenu );
|
freeglut_return_if_fail( subMenu );
|
||||||
|
|
||||||
/*
|
/* Get n-th menu entry in the current menu, starting from one: */
|
||||||
* Get n-th menu entry in the current menu, starting from one:
|
|
||||||
*/
|
|
||||||
menuEntry = fghFindMenuEntry( fgStructure.Menu, item );
|
menuEntry = fghFindMenuEntry( fgStructure.Menu, item );
|
||||||
|
|
||||||
freeglut_return_if_fail( menuEntry );
|
freeglut_return_if_fail( menuEntry );
|
||||||
|
|
||||||
/*
|
/* We want it to become a sub menu entry, so: */
|
||||||
* We want it to become a sub menu entry, so:
|
|
||||||
*/
|
|
||||||
if( menuEntry->Text )
|
if( menuEntry->Text )
|
||||||
free( menuEntry->Text );
|
free( menuEntry->Text );
|
||||||
|
|
||||||
@ -881,9 +783,7 @@ void FGAPIENTRY glutRemoveMenuItem( int item )
|
|||||||
freeglut_assert_ready;
|
freeglut_assert_ready;
|
||||||
freeglut_return_if_fail( fgStructure.Menu );
|
freeglut_return_if_fail( fgStructure.Menu );
|
||||||
|
|
||||||
/*
|
/* Get n-th menu entry in the current menu, starting from one: */
|
||||||
* Get n-th menu entry in the current menu, starting from one:
|
|
||||||
*/
|
|
||||||
menuEntry = fghFindMenuEntry( fgStructure.Menu, item );
|
menuEntry = fghFindMenuEntry( fgStructure.Menu, item );
|
||||||
|
|
||||||
freeglut_return_if_fail( menuEntry );
|
freeglut_return_if_fail( menuEntry );
|
||||||
@ -911,9 +811,7 @@ void FGAPIENTRY glutAttachMenu( int button )
|
|||||||
|
|
||||||
fgStructure.Window->Menu[ button ] = fgStructure.Menu;
|
fgStructure.Window->Menu[ button ] = fgStructure.Menu;
|
||||||
|
|
||||||
/*
|
/* Make the parent window of the menu (and all submenus) the current window */
|
||||||
* Make the parent window of the menu (and all submenus) the current window
|
|
||||||
*/
|
|
||||||
fghSetSubmenuParentWindow( fgStructure.Window, fgStructure.Menu );
|
fghSetSubmenuParentWindow( fgStructure.Window, fgStructure.Menu );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,9 +53,7 @@ int FGAPIENTRY glutExtensionSupported( const char* extension )
|
|||||||
const char *extensions, *start;
|
const char *extensions, *start;
|
||||||
const int len = strlen( extension );
|
const int len = strlen( extension );
|
||||||
|
|
||||||
/*
|
/* Make sure there is a current window, and thus a current context available */
|
||||||
* Make sure there is a current window, and thus a current context available
|
|
||||||
*/
|
|
||||||
freeglut_assert_ready;
|
freeglut_assert_ready;
|
||||||
freeglut_return_val_if_fail( fgStructure.Window != NULL, 0 );
|
freeglut_return_val_if_fail( fgStructure.Window != NULL, 0 );
|
||||||
|
|
||||||
@ -150,9 +148,7 @@ void FGAPIENTRY glutForceJoystickFunc( void )
|
|||||||
*/
|
*/
|
||||||
void FGAPIENTRY glutSetColor( int nColor, GLfloat red, GLfloat green, GLfloat blue )
|
void FGAPIENTRY glutSetColor( int nColor, GLfloat red, GLfloat green, GLfloat blue )
|
||||||
{
|
{
|
||||||
/*
|
/* We really need to do something here. */
|
||||||
*
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -160,9 +156,7 @@ void FGAPIENTRY glutSetColor( int nColor, GLfloat red, GLfloat green, GLfloat bl
|
|||||||
*/
|
*/
|
||||||
GLfloat FGAPIENTRY glutGetColor( int color, int component )
|
GLfloat FGAPIENTRY glutGetColor( int color, int component )
|
||||||
{
|
{
|
||||||
/*
|
/* We really need to do something here. */
|
||||||
*
|
|
||||||
*/
|
|
||||||
return( 0.0f );
|
return( 0.0f );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -171,9 +165,7 @@ GLfloat FGAPIENTRY glutGetColor( int color, int component )
|
|||||||
*/
|
*/
|
||||||
void FGAPIENTRY glutCopyColormap( int window )
|
void FGAPIENTRY glutCopyColormap( int window )
|
||||||
{
|
{
|
||||||
/*
|
/* We really need to do something here. */
|
||||||
*
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*** END OF FILE ***/
|
/*** END OF FILE ***/
|
||||||
|
@ -144,14 +144,10 @@ int FGAPIENTRY glutGet( GLenum eWhat )
|
|||||||
|
|
||||||
freeglut_assert_ready;
|
freeglut_assert_ready;
|
||||||
|
|
||||||
/*
|
/* XXX In chronological code add order. (WHY in that order?) */
|
||||||
* XXX In chronological code add order. (WHY in that order?)
|
|
||||||
*/
|
|
||||||
switch( eWhat )
|
switch( eWhat )
|
||||||
{
|
{
|
||||||
/*
|
/* Following values are stored in fgState and fgDisplay global structures */
|
||||||
* Following values are stored in fgState and fgDisplay global structures
|
|
||||||
*/
|
|
||||||
case GLUT_SCREEN_WIDTH: return fgDisplay.ScreenWidth ;
|
case GLUT_SCREEN_WIDTH: return fgDisplay.ScreenWidth ;
|
||||||
case GLUT_SCREEN_HEIGHT: return fgDisplay.ScreenHeight ;
|
case GLUT_SCREEN_HEIGHT: return fgDisplay.ScreenHeight ;
|
||||||
case GLUT_SCREEN_WIDTH_MM: return fgDisplay.ScreenWidthMM ;
|
case GLUT_SCREEN_WIDTH_MM: return fgDisplay.ScreenWidthMM ;
|
||||||
@ -167,9 +163,7 @@ int FGAPIENTRY glutGet( GLenum eWhat )
|
|||||||
* fghGetConfig().
|
* fghGetConfig().
|
||||||
*/
|
*/
|
||||||
case GLUT_WINDOW_NUM_SAMPLES:
|
case GLUT_WINDOW_NUM_SAMPLES:
|
||||||
/*
|
/* XXX Multisampling. Return what I know about multisampling. */
|
||||||
* XXX Multisampling. Return what I know about multisampling.
|
|
||||||
*/
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
#if TARGET_HOST_UNIX_X11
|
#if TARGET_HOST_UNIX_X11
|
||||||
@ -196,9 +190,7 @@ int FGAPIENTRY glutGet( GLenum eWhat )
|
|||||||
|
|
||||||
# undef GLX_QUERY
|
# undef GLX_QUERY
|
||||||
|
|
||||||
/*
|
/* Colormap size is handled in a bit different way than all the rest */
|
||||||
* Colormap size is handled in a bit different way than all the rest
|
|
||||||
*/
|
|
||||||
case GLUT_WINDOW_COLORMAP_SIZE:
|
case GLUT_WINDOW_COLORMAP_SIZE:
|
||||||
if( (fghGetConfig( GLX_RGBA )) || (fgStructure.Window == NULL) )
|
if( (fghGetConfig( GLX_RGBA )) || (fgStructure.Window == NULL) )
|
||||||
{
|
{
|
||||||
@ -270,15 +262,11 @@ int FGAPIENTRY glutGet( GLenum eWhat )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/* I do not know yet if there will be a fgChooseVisual() function for Win32 */
|
||||||
* I do not know yet if there will be a fgChooseVisual() function for Win32
|
|
||||||
*/
|
|
||||||
case GLUT_DISPLAY_MODE_POSSIBLE:
|
case GLUT_DISPLAY_MODE_POSSIBLE:
|
||||||
return( fgChooseVisual() == NULL ? 0 : 1 );
|
return( fgChooseVisual() == NULL ? 0 : 1 );
|
||||||
|
|
||||||
/*
|
/* This is system-dependant */
|
||||||
* This is system-dependant
|
|
||||||
*/
|
|
||||||
case GLUT_WINDOW_FORMAT_ID:
|
case GLUT_WINDOW_FORMAT_ID:
|
||||||
if( fgStructure.Window == NULL )
|
if( fgStructure.Window == NULL )
|
||||||
return 0;
|
return 0;
|
||||||
@ -287,9 +275,7 @@ int FGAPIENTRY glutGet( GLenum eWhat )
|
|||||||
|
|
||||||
#elif TARGET_HOST_WIN32 || TARGET_HOST_WINCE
|
#elif TARGET_HOST_WIN32 || TARGET_HOST_WINCE
|
||||||
|
|
||||||
/*
|
/* Handle the OpenGL inquiries */
|
||||||
* Handle the OpenGL inquiries
|
|
||||||
*/
|
|
||||||
case GLUT_WINDOW_RGBA:
|
case GLUT_WINDOW_RGBA:
|
||||||
glGetBooleanv ( GL_RGBA_MODE, &boolValue );
|
glGetBooleanv ( GL_RGBA_MODE, &boolValue );
|
||||||
returnValue = boolValue ? 1 : 0;
|
returnValue = boolValue ? 1 : 0;
|
||||||
@ -377,9 +363,7 @@ int FGAPIENTRY glutGet( GLenum eWhat )
|
|||||||
*/
|
*/
|
||||||
GetWindowRect( fgStructure.Window->Window.Handle, &winRect );
|
GetWindowRect( fgStructure.Window->Window.Handle, &winRect );
|
||||||
|
|
||||||
/*
|
/* ...then we've got to correct the results we've just received... */
|
||||||
* ...then we've got to correct the results we've just received...
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if !TARGET_HOST_WINCE
|
#if !TARGET_HOST_WINCE
|
||||||
if ( ( fgStructure.GameMode != fgStructure.Window ) && ( fgStructure.Window->Parent == NULL ) &&
|
if ( ( fgStructure.GameMode != fgStructure.Window ) && ( fgStructure.Window->Parent == NULL ) &&
|
||||||
@ -434,9 +418,7 @@ int FGAPIENTRY glutGet( GLenum eWhat )
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/* The window structure queries */
|
||||||
* The window structure queries
|
|
||||||
*/
|
|
||||||
case GLUT_WINDOW_PARENT:
|
case GLUT_WINDOW_PARENT:
|
||||||
if( fgStructure.Window == NULL ) return 0;
|
if( fgStructure.Window == NULL ) return 0;
|
||||||
if( fgStructure.Window->Parent == NULL ) return 0;
|
if( fgStructure.Window->Parent == NULL ) return 0;
|
||||||
@ -485,9 +467,7 @@ int FGAPIENTRY glutDeviceGet( GLenum eWhat )
|
|||||||
{
|
{
|
||||||
freeglut_assert_ready;
|
freeglut_assert_ready;
|
||||||
|
|
||||||
/*
|
/* XXX WARNING: we are mostly lying in this function. */
|
||||||
* XXX WARNING: we are mostly lying in this function.
|
|
||||||
*/
|
|
||||||
switch( eWhat )
|
switch( eWhat )
|
||||||
{
|
{
|
||||||
case GLUT_HAS_KEYBOARD:
|
case GLUT_HAS_KEYBOARD:
|
||||||
@ -539,9 +519,7 @@ int FGAPIENTRY glutDeviceGet( GLenum eWhat )
|
|||||||
return GetSystemMetrics( SM_MOUSEPRESENT );
|
return GetSystemMetrics( SM_MOUSEPRESENT );
|
||||||
|
|
||||||
case GLUT_NUM_MOUSE_BUTTONS:
|
case GLUT_NUM_MOUSE_BUTTONS:
|
||||||
/*
|
/* We are much more fortunate under Win32 about this... */
|
||||||
* We are much more fortunate under Win32 about this...
|
|
||||||
*/
|
|
||||||
#if TARGET_HOST_WINCE
|
#if TARGET_HOST_WINCE
|
||||||
return 1;
|
return 1;
|
||||||
#else
|
#else
|
||||||
@ -555,9 +533,7 @@ int FGAPIENTRY glutDeviceGet( GLenum eWhat )
|
|||||||
case GLUT_OWNS_JOYSTICK:
|
case GLUT_OWNS_JOYSTICK:
|
||||||
case GLUT_JOYSTICK_BUTTONS:
|
case GLUT_JOYSTICK_BUTTONS:
|
||||||
case GLUT_JOYSTICK_AXES:
|
case GLUT_JOYSTICK_AXES:
|
||||||
/*
|
/* XXX WARNING: THIS IS A BIG LIE! */
|
||||||
* XXX WARNING: THIS IS A BIG LIE!
|
|
||||||
*/
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case GLUT_HAS_SPACEBALL:
|
case GLUT_HAS_SPACEBALL:
|
||||||
@ -575,9 +551,7 @@ int FGAPIENTRY glutDeviceGet( GLenum eWhat )
|
|||||||
return fgStructure.Window ? fgStructure.Window->State.IgnoreKeyRepeat : 0;
|
return fgStructure.Window ? fgStructure.Window->State.IgnoreKeyRepeat : 0;
|
||||||
|
|
||||||
case GLUT_DEVICE_KEY_REPEAT:
|
case GLUT_DEVICE_KEY_REPEAT:
|
||||||
/*
|
/* XXX WARNING: THIS IS A BIG LIE! */
|
||||||
* XXX WARNING: THIS IS A BIG LIE!
|
|
||||||
*/
|
|
||||||
return GLUT_KEY_REPEAT_DEFAULT;
|
return GLUT_KEY_REPEAT_DEFAULT;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -585,9 +559,7 @@ int FGAPIENTRY glutDeviceGet( GLenum eWhat )
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/* And now -- the failure. */
|
||||||
* And now -- the failure.
|
|
||||||
*/
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -641,9 +613,7 @@ int FGAPIENTRY glutLayerGet( GLenum eWhat )
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case GLUT_NORMAL_DAMAGED:
|
case GLUT_NORMAL_DAMAGED:
|
||||||
/*
|
/* XXX Actually I do not know. Maybe. */
|
||||||
* XXX Actually I do not know. Maybe.
|
|
||||||
*/
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
case GLUT_OVERLAY_DAMAGED:
|
case GLUT_OVERLAY_DAMAGED:
|
||||||
@ -671,9 +641,7 @@ int FGAPIENTRY glutLayerGet( GLenum eWhat )
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case GLUT_NORMAL_DAMAGED:
|
case GLUT_NORMAL_DAMAGED:
|
||||||
/*
|
/* XXX Actually I do not know. Maybe. */
|
||||||
* XXX Actually I do not know. Maybe.
|
|
||||||
*/
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
case GLUT_OVERLAY_DAMAGED:
|
case GLUT_OVERLAY_DAMAGED:
|
||||||
@ -685,9 +653,7 @@ int FGAPIENTRY glutLayerGet( GLenum eWhat )
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/* And fail. That's good. Programs do love failing. */
|
||||||
* And fail. That's good. Programs do love failing.
|
|
||||||
*/
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,3 +1,30 @@
|
|||||||
|
/*
|
||||||
|
* freeglut_stroke_mono_roman.c
|
||||||
|
*
|
||||||
|
* freeglut Monospace Roman stroke font definition
|
||||||
|
*
|
||||||
|
* Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
|
||||||
|
* Written by Pawel W. Olszta, <olszta@sourceforge.net>
|
||||||
|
* Creation date: ?????
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
* copy of this software and associated documentation files (the "Software"),
|
||||||
|
* to deal in the Software without restriction, including without limitation
|
||||||
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
* and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
* Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included
|
||||||
|
* in all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
* PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
/* This file has been automatically generated by the genstroke utility. */
|
/* This file has been automatically generated by the genstroke utility. */
|
||||||
|
|
||||||
|
@ -1,3 +1,30 @@
|
|||||||
|
/*
|
||||||
|
* freeglut_stroke_roman.c
|
||||||
|
*
|
||||||
|
* freeglut Roman stroke font definition
|
||||||
|
*
|
||||||
|
* Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
|
||||||
|
* Written by Pawel W. Olszta, <olszta@sourceforge.net>
|
||||||
|
* Creation date: ?????
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
* copy of this software and associated documentation files (the "Software"),
|
||||||
|
* to deal in the Software without restriction, including without limitation
|
||||||
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
* and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
* Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included
|
||||||
|
* in all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
* PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
/* This file has been automatically generated by the genstroke utility. */
|
/* This file has been automatically generated by the genstroke utility. */
|
||||||
|
|
||||||
|
@ -73,9 +73,7 @@ SFG_Window* fgCreateWindow( SFG_Window* parent, const char* title,
|
|||||||
int x, int y, int w, int h,
|
int x, int y, int w, int h,
|
||||||
GLboolean gameMode, GLboolean isMenu )
|
GLboolean gameMode, GLboolean isMenu )
|
||||||
{
|
{
|
||||||
/*
|
/* Have the window object created */
|
||||||
* Have the window object created
|
|
||||||
*/
|
|
||||||
SFG_Window *window = (SFG_Window *)calloc( sizeof(SFG_Window), 1 );
|
SFG_Window *window = (SFG_Window *)calloc( sizeof(SFG_Window), 1 );
|
||||||
int fakeArgc = 0;
|
int fakeArgc = 0;
|
||||||
|
|
||||||
@ -88,9 +86,7 @@ SFG_Window* fgCreateWindow( SFG_Window* parent, const char* title,
|
|||||||
if( !fgState.Initialised )
|
if( !fgState.Initialised )
|
||||||
glutInit( &fakeArgc, NULL );
|
glutInit( &fakeArgc, NULL );
|
||||||
|
|
||||||
/*
|
/* Initialize the object properties */
|
||||||
* Initialize the object properties
|
|
||||||
*/
|
|
||||||
window->ID = ++fgStructure.WindowID;
|
window->ID = ++fgStructure.WindowID;
|
||||||
window->State.OldHeight = window->State.OldWidth = -1;
|
window->State.OldHeight = window->State.OldWidth = -1;
|
||||||
|
|
||||||
@ -103,9 +99,7 @@ SFG_Window* fgCreateWindow( SFG_Window* parent, const char* title,
|
|||||||
else
|
else
|
||||||
fgListAppend( &fgStructure.Windows, &window->Node );
|
fgListAppend( &fgStructure.Windows, &window->Node );
|
||||||
|
|
||||||
/*
|
/* Set the default mouse cursor and reset the modifiers value */
|
||||||
* Set the default mouse cursor and reset the modifiers value
|
|
||||||
*/
|
|
||||||
window->State.Cursor = GLUT_CURSOR_INHERIT;
|
window->State.Cursor = GLUT_CURSOR_INHERIT;
|
||||||
|
|
||||||
window->IsMenu = isMenu;
|
window->IsMenu = isMenu;
|
||||||
@ -131,9 +125,7 @@ SFG_Menu* fgCreateMenu( FGCBMenu menuCallback )
|
|||||||
int x = 100, y = 100, w = 100, h = 100;
|
int x = 100, y = 100, w = 100, h = 100;
|
||||||
SFG_Window *current_window = fgStructure.Window;
|
SFG_Window *current_window = fgStructure.Window;
|
||||||
|
|
||||||
/*
|
/* Have the menu object created */
|
||||||
* Have the menu object created
|
|
||||||
*/
|
|
||||||
SFG_Menu* menu = (SFG_Menu *)calloc( sizeof(SFG_Menu), 1 );
|
SFG_Menu* menu = (SFG_Menu *)calloc( sizeof(SFG_Menu), 1 );
|
||||||
int fakeArgc = 0;
|
int fakeArgc = 0;
|
||||||
|
|
||||||
@ -146,9 +138,7 @@ SFG_Menu* fgCreateMenu( FGCBMenu menuCallback )
|
|||||||
|
|
||||||
menu->ParentWindow = fgStructure.Window;
|
menu->ParentWindow = fgStructure.Window;
|
||||||
|
|
||||||
/*
|
/* Create a window for the menu to reside in. */
|
||||||
* Create a window for the menu to reside in.
|
|
||||||
*/
|
|
||||||
|
|
||||||
fgCreateWindow( NULL, "freeglut menu", x, y, w, h, GL_FALSE, GL_TRUE );
|
fgCreateWindow( NULL, "freeglut menu", x, y, w, h, GL_FALSE, GL_TRUE );
|
||||||
menu->Window = fgStructure.Window;
|
menu->Window = fgStructure.Window;
|
||||||
@ -157,9 +147,7 @@ SFG_Menu* fgCreateMenu( FGCBMenu menuCallback )
|
|||||||
glutHideWindow( ); /* Hide the window for now */
|
glutHideWindow( ); /* Hide the window for now */
|
||||||
fgSetWindow( current_window );
|
fgSetWindow( current_window );
|
||||||
|
|
||||||
/*
|
/* Initialize the object properties: */
|
||||||
* Initialize the object properties:
|
|
||||||
*/
|
|
||||||
menu->ID = ++fgStructure.MenuID;
|
menu->ID = ++fgStructure.MenuID;
|
||||||
menu->Callback = menuCallback;
|
menu->Callback = menuCallback;
|
||||||
menu->ActiveEntry = NULL;
|
menu->ActiveEntry = NULL;
|
||||||
@ -167,9 +155,7 @@ SFG_Menu* fgCreateMenu( FGCBMenu menuCallback )
|
|||||||
fgListInit( &menu->Entries );
|
fgListInit( &menu->Entries );
|
||||||
fgListAppend( &fgStructure.Menus, &menu->Node );
|
fgListAppend( &fgStructure.Menus, &menu->Node );
|
||||||
|
|
||||||
/*
|
/* Newly created menus implicitly become current ones */
|
||||||
* Newly created menus implicitly become current ones
|
|
||||||
*/
|
|
||||||
fgStructure.Menu = menu;
|
fgStructure.Menu = menu;
|
||||||
|
|
||||||
return menu;
|
return menu;
|
||||||
@ -187,9 +173,7 @@ void fgAddToWindowDestroyList( SFG_Window* window )
|
|||||||
new_list_entry->window = window;
|
new_list_entry->window = window;
|
||||||
fgListAppend( &fgStructure.WindowsToDestroy, &new_list_entry->node );
|
fgListAppend( &fgStructure.WindowsToDestroy, &new_list_entry->node );
|
||||||
|
|
||||||
/*
|
/* Check if the window is the current one... */
|
||||||
* Check if the window is the current one...
|
|
||||||
*/
|
|
||||||
if( fgStructure.Window == window )
|
if( fgStructure.Window == window )
|
||||||
fgStructure.Window = NULL;
|
fgStructure.Window = NULL;
|
||||||
|
|
||||||
@ -279,9 +263,7 @@ static void fghRemoveMenuFromWindow( SFG_Window* window, SFG_Menu* menu )
|
|||||||
if( window->Menu[ i ] == menu )
|
if( window->Menu[ i ] == menu )
|
||||||
window->Menu[ i ] = NULL;
|
window->Menu[ i ] = NULL;
|
||||||
|
|
||||||
/*
|
/* Call this function for all of the window's children recursively: */
|
||||||
* Call this function for all of the window's children recursively:
|
|
||||||
*/
|
|
||||||
for( subWindow = (SFG_Window *)window->Children.First;
|
for( subWindow = (SFG_Window *)window->Children.First;
|
||||||
subWindow;
|
subWindow;
|
||||||
subWindow = (SFG_Window *)subWindow->Node.Next)
|
subWindow = (SFG_Window *)subWindow->Node.Next)
|
||||||
@ -315,17 +297,13 @@ void fgDestroyMenu( SFG_Menu* menu )
|
|||||||
assert( menu );
|
assert( menu );
|
||||||
freeglut_assert_ready;
|
freeglut_assert_ready;
|
||||||
|
|
||||||
/*
|
/* First of all, have all references to this menu removed from all windows: */
|
||||||
* First of all, have all references to this menu removed from all windows:
|
|
||||||
*/
|
|
||||||
for( window = (SFG_Window *)fgStructure.Windows.First;
|
for( window = (SFG_Window *)fgStructure.Windows.First;
|
||||||
window;
|
window;
|
||||||
window = (SFG_Window *)window->Node.Next )
|
window = (SFG_Window *)window->Node.Next )
|
||||||
fghRemoveMenuFromWindow( window, menu );
|
fghRemoveMenuFromWindow( window, menu );
|
||||||
|
|
||||||
/*
|
/* Now proceed with removing menu entries that lead to this menu */
|
||||||
* Now proceed with removing menu entries that lead to this menu
|
|
||||||
*/
|
|
||||||
for( from = ( SFG_Menu * )fgStructure.Menus.First;
|
for( from = ( SFG_Menu * )fgStructure.Menus.First;
|
||||||
from;
|
from;
|
||||||
from = ( SFG_Menu * )from->Node.Next )
|
from = ( SFG_Menu * )from->Node.Next )
|
||||||
@ -398,14 +376,10 @@ void fgDestroyStructure( void )
|
|||||||
{
|
{
|
||||||
freeglut_assert_ready;
|
freeglut_assert_ready;
|
||||||
|
|
||||||
/*
|
/* Clean up the WindowsToDestroy list. */
|
||||||
* Clean up the WindowsToDestroy list.
|
|
||||||
*/
|
|
||||||
fgCloseWindows( );
|
fgCloseWindows( );
|
||||||
|
|
||||||
/*
|
/* Make sure all windows and menus have been deallocated */
|
||||||
* Make sure all windows and menus have been deallocated
|
|
||||||
*/
|
|
||||||
while( fgStructure.Menus.First )
|
while( fgStructure.Menus.First )
|
||||||
fgDestroyMenu( ( SFG_Menu * )fgStructure.Menus.First );
|
fgDestroyMenu( ( SFG_Menu * )fgStructure.Menus.First );
|
||||||
|
|
||||||
@ -423,9 +397,7 @@ void fgEnumWindows( FGCBenumerator enumCallback, SFG_Enumerator* enumerator )
|
|||||||
assert( enumCallback && enumerator );
|
assert( enumCallback && enumerator );
|
||||||
freeglut_assert_ready;
|
freeglut_assert_ready;
|
||||||
|
|
||||||
/*
|
/* Check every of the top-level windows */
|
||||||
* Check every of the top-level windows
|
|
||||||
*/
|
|
||||||
for( window = ( SFG_Window * )fgStructure.Windows.First;
|
for( window = ( SFG_Window * )fgStructure.Windows.First;
|
||||||
window;
|
window;
|
||||||
window = ( SFG_Window * )window->Node.Next )
|
window = ( SFG_Window * )window->Node.Next )
|
||||||
@ -467,9 +439,7 @@ static void fghcbWindowByHandle( SFG_Window *window,
|
|||||||
if ( enumerator->found )
|
if ( enumerator->found )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/*
|
/* Check the window's handle. Hope this works. Looks ugly. That's for sure. */
|
||||||
* Check the window's handle. Hope this works. Looks ugly. That's for sure.
|
|
||||||
*/
|
|
||||||
if( window->Window.Handle == (SFG_WindowHandleType) (enumerator->data) )
|
if( window->Window.Handle == (SFG_WindowHandleType) (enumerator->data) )
|
||||||
{
|
{
|
||||||
enumerator->found = GL_TRUE;
|
enumerator->found = GL_TRUE;
|
||||||
@ -478,9 +448,7 @@ static void fghcbWindowByHandle( SFG_Window *window,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/* Otherwise, check this window's children */
|
||||||
* Otherwise, check this window's children
|
|
||||||
*/
|
|
||||||
fgEnumSubWindows( window, fghcbWindowByHandle, enumerator );
|
fgEnumSubWindows( window, fghcbWindowByHandle, enumerator );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -493,9 +461,7 @@ SFG_Window* fgWindowByHandle ( SFG_WindowHandleType hWindow )
|
|||||||
{
|
{
|
||||||
SFG_Enumerator enumerator;
|
SFG_Enumerator enumerator;
|
||||||
|
|
||||||
/*
|
/* This is easy and makes use of the windows enumeration defined above */
|
||||||
* This is easy and makes use of the windows enumeration defined above
|
|
||||||
*/
|
|
||||||
enumerator.found = GL_FALSE;
|
enumerator.found = GL_FALSE;
|
||||||
enumerator.data = (void *)hWindow;
|
enumerator.data = (void *)hWindow;
|
||||||
fgEnumWindows( fghcbWindowByHandle, &enumerator );
|
fgEnumWindows( fghcbWindowByHandle, &enumerator );
|
||||||
@ -510,15 +476,11 @@ SFG_Window* fgWindowByHandle ( SFG_WindowHandleType hWindow )
|
|||||||
*/
|
*/
|
||||||
static void fghcbWindowByID( SFG_Window *window, SFG_Enumerator *enumerator )
|
static void fghcbWindowByID( SFG_Window *window, SFG_Enumerator *enumerator )
|
||||||
{
|
{
|
||||||
/*
|
/* Make sure we do not overwrite our precious results... */
|
||||||
* Make sure we do not overwrite our precious results...
|
|
||||||
*/
|
|
||||||
if( enumerator->found )
|
if( enumerator->found )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/*
|
/* Check the window's handle. Hope this works. Looks ugly. That's for sure. */
|
||||||
* Check the window's handle. Hope this works. Looks ugly. That's for sure.
|
|
||||||
*/
|
|
||||||
if( window->ID == *( int *)(enumerator->data) )
|
if( window->ID == *( int *)(enumerator->data) )
|
||||||
{
|
{
|
||||||
enumerator->found = GL_TRUE;
|
enumerator->found = GL_TRUE;
|
||||||
@ -527,9 +489,7 @@ static void fghcbWindowByID( SFG_Window *window, SFG_Enumerator *enumerator )
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/* Otherwise, check this window's children */
|
||||||
* Otherwise, check this window's children
|
|
||||||
*/
|
|
||||||
fgEnumSubWindows( window, fghcbWindowByID, enumerator );
|
fgEnumSubWindows( window, fghcbWindowByID, enumerator );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -542,9 +502,7 @@ SFG_Window* fgWindowByID( int windowID )
|
|||||||
{
|
{
|
||||||
SFG_Enumerator enumerator;
|
SFG_Enumerator enumerator;
|
||||||
|
|
||||||
/*
|
/* Uses a method very similiar for fgWindowByHandle... */
|
||||||
* Uses a method very similiar for fgWindowByHandle...
|
|
||||||
*/
|
|
||||||
enumerator.found = GL_FALSE;
|
enumerator.found = GL_FALSE;
|
||||||
enumerator.data = ( void * )&windowID;
|
enumerator.data = ( void * )&windowID;
|
||||||
fgEnumWindows( fghcbWindowByID, &enumerator );
|
fgEnumWindows( fghcbWindowByID, &enumerator );
|
||||||
@ -555,7 +513,7 @@ SFG_Window* fgWindowByID( int windowID )
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Looks up a menu given its ID. This is easier that fgWindowByXXX
|
* Looks up a menu given its ID. This is easier that fgWindowByXXX
|
||||||
* as all menus are placed in a single doubly linked list...
|
* as all menus are placed in one doubly linked list...
|
||||||
*/
|
*/
|
||||||
SFG_Menu* fgMenuByID( int menuID )
|
SFG_Menu* fgMenuByID( int menuID )
|
||||||
{
|
{
|
||||||
@ -563,9 +521,7 @@ SFG_Menu* fgMenuByID( int menuID )
|
|||||||
|
|
||||||
freeglut_assert_ready;
|
freeglut_assert_ready;
|
||||||
|
|
||||||
/*
|
/* It's enough to check all entries in fgStructure.Menus... */
|
||||||
* It's enough to check all entries in fgStructure.Menus...
|
|
||||||
*/
|
|
||||||
for( menu = (SFG_Menu *)fgStructure.Menus.First;
|
for( menu = (SFG_Menu *)fgStructure.Menus.First;
|
||||||
menu;
|
menu;
|
||||||
menu = (SFG_Menu *)menu->Node.Next )
|
menu = (SFG_Menu *)menu->Node.Next )
|
||||||
|
@ -182,9 +182,7 @@ static void teapot( GLint grid, GLdouble scale, GLenum type )
|
|||||||
*/
|
*/
|
||||||
void FGAPIENTRY glutWireTeapot( GLdouble size )
|
void FGAPIENTRY glutWireTeapot( GLdouble size )
|
||||||
{
|
{
|
||||||
/*
|
/* We will use the general teapot rendering code */
|
||||||
* We will use the general teapot rendering code
|
|
||||||
*/
|
|
||||||
teapot( 10, size, GL_LINE );
|
teapot( 10, size, GL_LINE );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -193,9 +191,7 @@ void FGAPIENTRY glutWireTeapot( GLdouble size )
|
|||||||
*/
|
*/
|
||||||
void FGAPIENTRY glutSolidTeapot( GLdouble size )
|
void FGAPIENTRY glutSolidTeapot( GLdouble size )
|
||||||
{
|
{
|
||||||
/*
|
/* We will use the general teapot rendering code */
|
||||||
* We will use the general teapot rendering code
|
|
||||||
*/
|
|
||||||
teapot( 7, size, GL_FILL );
|
teapot( 7, size, GL_FILL );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,8 +91,8 @@ XVisualInfo* fgChooseVisual( void )
|
|||||||
* First we have to process the display mode settings...
|
* First we have to process the display mode settings...
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
* Why is there a semi-colon in this #define? The code
|
* XXX Why is there a semi-colon in this #define? The code
|
||||||
* that uses the macro seems to always add more semicolons...
|
* XXX that uses the macro seems to always add more semicolons...
|
||||||
*/
|
*/
|
||||||
#define ATTRIB(a) attributes[where++]=a;
|
#define ATTRIB(a) attributes[where++]=a;
|
||||||
#define ATTRIB_VAL(a,v) {ATTRIB(a); ATTRIB(v);}
|
#define ATTRIB_VAL(a,v) {ATTRIB(a); ATTRIB(v);}
|
||||||
@ -447,13 +447,13 @@ void fgOpenWindow( SFG_Window* window, const char* title,
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Fill in the size hints values now (the x, y, width and height
|
* Fill in the size hints values now (the x, y, width and height
|
||||||
* settings are obsolote, are there any more WMs that support them?)
|
* settings are obsolete, are there any more WMs that support them?)
|
||||||
* Unless the X servers actually stop supporting these, we should
|
* Unless the X servers actually stop supporting these, we should
|
||||||
* continue to fill them in. It is *not* our place to tell the user
|
* continue to fill them in. It is *not* our place to tell the user
|
||||||
* that they should replace a window manager that they like, and which
|
* that they should replace a window manager that they like, and which
|
||||||
* works, just because *we* think that it's not "modern" enough.
|
* works, just because *we* think that it's not "modern" enough.
|
||||||
*/
|
*/
|
||||||
#if TARGET_HOST_WINCE
|
#if TARGET_HOST_WINCE /* Since this is in the X11 branch, it's pretty dumb */
|
||||||
sizeHints.x = 0;
|
sizeHints.x = 0;
|
||||||
sizeHints.y = 0;
|
sizeHints.y = 0;
|
||||||
sizeHints.width = 320;
|
sizeHints.width = 320;
|
||||||
@ -467,9 +467,7 @@ void fgOpenWindow( SFG_Window* window, const char* title,
|
|||||||
|
|
||||||
wmHints.flags = StateHint;
|
wmHints.flags = StateHint;
|
||||||
wmHints.initial_state = fgState.ForceIconic ? IconicState : NormalState;
|
wmHints.initial_state = fgState.ForceIconic ? IconicState : NormalState;
|
||||||
/*
|
/* Prepare the window and iconified window names... */
|
||||||
* Prepare the window and iconified window names...
|
|
||||||
*/
|
|
||||||
XStringListToTextProperty( (char **) &title, 1, &textProperty );
|
XStringListToTextProperty( (char **) &title, 1, &textProperty );
|
||||||
|
|
||||||
XSetWMProperties(
|
XSetWMProperties(
|
||||||
@ -498,9 +496,7 @@ void fgOpenWindow( SFG_Window* window, const char* title,
|
|||||||
|
|
||||||
freeglut_assert_ready;
|
freeglut_assert_ready;
|
||||||
|
|
||||||
/*
|
/* Grab the window class we have registered on glutInit(): */
|
||||||
* Grab the window class we have registered on glutInit():
|
|
||||||
*/
|
|
||||||
atom = GetClassInfo( fgDisplay.Instance, _T("FREEGLUT"), &wc );
|
atom = GetClassInfo( fgDisplay.Instance, _T("FREEGLUT"), &wc );
|
||||||
assert( atom != 0 );
|
assert( atom != 0 );
|
||||||
|
|
||||||
@ -640,9 +636,7 @@ void fgCloseWindow( SFG_Window* window )
|
|||||||
|
|
||||||
#elif TARGET_HOST_WIN32 || TARGET_HOST_WINCE
|
#elif TARGET_HOST_WIN32 || TARGET_HOST_WINCE
|
||||||
|
|
||||||
/*
|
/* Make sure we don't close a window with current context active */
|
||||||
* Make sure we don't close a window with current context active
|
|
||||||
*/
|
|
||||||
if( fgStructure.Window == window )
|
if( fgStructure.Window == window )
|
||||||
wglMakeCurrent( NULL, NULL );
|
wglMakeCurrent( NULL, NULL );
|
||||||
|
|
||||||
@ -690,7 +684,6 @@ int FGAPIENTRY glutCreateWindow( const char* title )
|
|||||||
int FGAPIENTRY glutCreateSubWindow( int parentID, int x, int y, int w, int h )
|
int FGAPIENTRY glutCreateSubWindow( int parentID, int x, int y, int w, int h )
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
SFG_Window* window = NULL;
|
SFG_Window* window = NULL;
|
||||||
SFG_Window* parent = NULL;
|
SFG_Window* parent = NULL;
|
||||||
|
|
||||||
@ -941,6 +934,7 @@ void FGAPIENTRY glutPositionWindow( int x, int y )
|
|||||||
{
|
{
|
||||||
RECT winRect;
|
RECT winRect;
|
||||||
|
|
||||||
|
/* "GetWindowRect" returns the pixel coordinates of the outside of the window */
|
||||||
GetWindowRect( fgStructure.Window->Window.Handle, &winRect );
|
GetWindowRect( fgStructure.Window->Window.Handle, &winRect );
|
||||||
MoveWindow(
|
MoveWindow(
|
||||||
fgStructure.Window->Window.Handle,
|
fgStructure.Window->Window.Handle,
|
||||||
|
Reference in New Issue
Block a user