Splitting the other "glutGet" Windows-specific code into its own function
git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@998 7f0cb862-5218-0410-a997-914c9d46530a
This commit is contained in:
parent
c9e93c29b3
commit
7331abf64a
@ -42,6 +42,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
extern int fgPlatformGlutGet ( GLenum eWhat );
|
extern int fgPlatformGlutGet ( GLenum eWhat );
|
||||||
|
extern int fgPlatformGlutDeviceGet ( GLenum eWhat );
|
||||||
|
extern int fgPlatformGlutLayerGet ( GLenum eWhat );
|
||||||
|
|
||||||
/* -- LOCAL DEFINITIONS ---------------------------------------------------- */
|
/* -- LOCAL DEFINITIONS ---------------------------------------------------- */
|
||||||
|
|
||||||
@ -223,6 +225,92 @@ static int fgPlatformGlutGet ( GLenum eWhat )
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int fgPlatformGlutDeviceGet ( GLenum eWhat )
|
||||||
|
{
|
||||||
|
switch( eWhat )
|
||||||
|
{
|
||||||
|
case GLUT_HAS_KEYBOARD:
|
||||||
|
/*
|
||||||
|
* X11 has a core keyboard by definition, although it can
|
||||||
|
* be present as a virtual/dummy keyboard. For now, there
|
||||||
|
* is no reliable way to tell if a real keyboard is present.
|
||||||
|
*/
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
/* X11 has a mouse by definition */
|
||||||
|
case GLUT_HAS_MOUSE:
|
||||||
|
return 1 ;
|
||||||
|
|
||||||
|
case GLUT_NUM_MOUSE_BUTTONS:
|
||||||
|
/* We should be able to pass NULL when the last argument is zero,
|
||||||
|
* but at least one X server has a bug where this causes a segfault.
|
||||||
|
*
|
||||||
|
* In XFree86/Xorg servers, a mouse wheel is seen as two buttons
|
||||||
|
* rather than an Axis; "freeglut_main.c" expects this when
|
||||||
|
* checking for a wheel event.
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
unsigned char map;
|
||||||
|
int nbuttons = XGetPointerMapping(fgDisplay.Display, &map,0);
|
||||||
|
return nbuttons;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
fgWarning( "glutDeviceGet(): missing enum handle %d", eWhat );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* And now -- the failure. */
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int fgPlatformGlutLayerGet( GLenum eWhat )
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* This is easy as layers are not implemented ;-)
|
||||||
|
*
|
||||||
|
* XXX Can we merge the UNIX/X11 and WIN32 sections? Or
|
||||||
|
* XXX is overlay support planned?
|
||||||
|
*/
|
||||||
|
switch( eWhat )
|
||||||
|
{
|
||||||
|
case GLUT_OVERLAY_POSSIBLE:
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case GLUT_LAYER_IN_USE:
|
||||||
|
return GLUT_NORMAL;
|
||||||
|
|
||||||
|
case GLUT_HAS_OVERLAY:
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case GLUT_TRANSPARENT_INDEX:
|
||||||
|
/*
|
||||||
|
* Return just anything, which is always defined as zero
|
||||||
|
*
|
||||||
|
* XXX HUH?
|
||||||
|
*/
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case GLUT_NORMAL_DAMAGED:
|
||||||
|
/* XXX Actually I do not know. Maybe. */
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case GLUT_OVERLAY_DAMAGED:
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
default:
|
||||||
|
fgWarning( "glutLayerGet(): missing enum handle %d", eWhat );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* And fail. That's good. Programs do love failing. */
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* -- INTERFACE FUNCTIONS -------------------------------------------------- */
|
/* -- INTERFACE FUNCTIONS -------------------------------------------------- */
|
||||||
@ -389,61 +477,6 @@ int FGAPIENTRY glutDeviceGet( GLenum eWhat )
|
|||||||
/* 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:
|
|
||||||
/*
|
|
||||||
* Win32 is assumed a keyboard, and this cannot be queried,
|
|
||||||
* except for WindowsCE.
|
|
||||||
*
|
|
||||||
* X11 has a core keyboard by definition, although it can
|
|
||||||
* be present as a virtual/dummy keyboard. For now, there
|
|
||||||
* is no reliable way to tell if a real keyboard is present.
|
|
||||||
*/
|
|
||||||
#if defined(_WIN32_CE)
|
|
||||||
return ( GetKeyboardStatus() & KBDI_KEYBOARD_PRESENT ) ? 1 : 0;
|
|
||||||
# if FREEGLUT_LIB_PRAGMAS
|
|
||||||
# pragma comment (lib,"Kbdui.lib")
|
|
||||||
# endif
|
|
||||||
|
|
||||||
#else
|
|
||||||
return 1;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if TARGET_HOST_POSIX_X11
|
|
||||||
|
|
||||||
/* X11 has a mouse by definition */
|
|
||||||
case GLUT_HAS_MOUSE:
|
|
||||||
return 1 ;
|
|
||||||
|
|
||||||
case GLUT_NUM_MOUSE_BUTTONS:
|
|
||||||
/* We should be able to pass NULL when the last argument is zero,
|
|
||||||
* but at least one X server has a bug where this causes a segfault.
|
|
||||||
*
|
|
||||||
* In XFree86/Xorg servers, a mouse wheel is seen as two buttons
|
|
||||||
* rather than an Axis; "freeglut_main.c" expects this when
|
|
||||||
* checking for a wheel event.
|
|
||||||
*/
|
|
||||||
{
|
|
||||||
unsigned char map;
|
|
||||||
int nbuttons = XGetPointerMapping(fgDisplay.Display, &map,0);
|
|
||||||
return nbuttons;
|
|
||||||
}
|
|
||||||
|
|
||||||
#elif TARGET_HOST_MS_WINDOWS
|
|
||||||
|
|
||||||
case GLUT_HAS_MOUSE:
|
|
||||||
/*
|
|
||||||
* MS Windows can be booted without a mouse.
|
|
||||||
*/
|
|
||||||
return GetSystemMetrics( SM_MOUSEPRESENT );
|
|
||||||
|
|
||||||
case GLUT_NUM_MOUSE_BUTTONS:
|
|
||||||
# if defined(_WIN32_WCE)
|
|
||||||
return 1;
|
|
||||||
# else
|
|
||||||
return GetSystemMetrics( SM_CMOUSEBUTTONS );
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
case GLUT_HAS_JOYSTICK:
|
case GLUT_HAS_JOYSTICK:
|
||||||
return fgJoystickDetect ();
|
return fgJoystickDetect ();
|
||||||
|
|
||||||
@ -489,8 +522,7 @@ int FGAPIENTRY glutDeviceGet( GLenum eWhat )
|
|||||||
return fgState.KeyRepeat;
|
return fgState.KeyRepeat;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
fgWarning( "glutDeviceGet(): missing enum handle %d", eWhat );
|
return fgPlatformGlutDeviceGet ( eWhat );
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* And now -- the failure. */
|
/* And now -- the failure. */
|
||||||
@ -528,64 +560,8 @@ int FGAPIENTRY glutLayerGet( GLenum eWhat )
|
|||||||
switch( eWhat )
|
switch( eWhat )
|
||||||
{
|
{
|
||||||
|
|
||||||
#if TARGET_HOST_POSIX_X11
|
|
||||||
|
|
||||||
case GLUT_OVERLAY_POSSIBLE:
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case GLUT_LAYER_IN_USE:
|
|
||||||
return GLUT_NORMAL;
|
|
||||||
|
|
||||||
case GLUT_HAS_OVERLAY:
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case GLUT_TRANSPARENT_INDEX:
|
|
||||||
/*
|
|
||||||
* Return just anything, which is always defined as zero
|
|
||||||
*
|
|
||||||
* XXX HUH?
|
|
||||||
*/
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case GLUT_NORMAL_DAMAGED:
|
|
||||||
/* XXX Actually I do not know. Maybe. */
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case GLUT_OVERLAY_DAMAGED:
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
#elif TARGET_HOST_MS_WINDOWS
|
|
||||||
|
|
||||||
case GLUT_OVERLAY_POSSIBLE:
|
|
||||||
/* return fgSetupPixelFormat( fgStructure.CurrentWindow, GL_TRUE,
|
|
||||||
PFD_OVERLAY_PLANE ); */
|
|
||||||
return 0 ;
|
|
||||||
|
|
||||||
case GLUT_LAYER_IN_USE:
|
|
||||||
return GLUT_NORMAL;
|
|
||||||
|
|
||||||
case GLUT_HAS_OVERLAY:
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case GLUT_TRANSPARENT_INDEX:
|
|
||||||
/*
|
|
||||||
* Return just anything, which is always defined as zero
|
|
||||||
*
|
|
||||||
* XXX HUH?
|
|
||||||
*/
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case GLUT_NORMAL_DAMAGED:
|
|
||||||
/* XXX Actually I do not know. Maybe. */
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case GLUT_OVERLAY_DAMAGED:
|
|
||||||
return -1;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
fgWarning( "glutLayerGet(): missing enum handle %d", eWhat );
|
return fgPlatformGlutLayerGet( eWhat );
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* And fail. That's good. Programs do love failing. */
|
/* And fail. That's good. Programs do love failing. */
|
||||||
|
@ -229,3 +229,99 @@ int fgPlatformGlutGet ( GLenum eWhat )
|
|||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int fgPlatformGlutDeviceGet ( GLenum eWhat )
|
||||||
|
{
|
||||||
|
switch( eWhat )
|
||||||
|
{
|
||||||
|
case GLUT_HAS_KEYBOARD:
|
||||||
|
/*
|
||||||
|
* Win32 is assumed a keyboard, and this cannot be queried,
|
||||||
|
* except for WindowsCE.
|
||||||
|
*
|
||||||
|
* X11 has a core keyboard by definition, although it can
|
||||||
|
* be present as a virtual/dummy keyboard. For now, there
|
||||||
|
* is no reliable way to tell if a real keyboard is present.
|
||||||
|
*/
|
||||||
|
#if defined(_WIN32_CE)
|
||||||
|
return ( GetKeyboardStatus() & KBDI_KEYBOARD_PRESENT ) ? 1 : 0;
|
||||||
|
# if FREEGLUT_LIB_PRAGMAS
|
||||||
|
# pragma comment (lib,"Kbdui.lib")
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#else
|
||||||
|
return 1;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
case GLUT_HAS_MOUSE:
|
||||||
|
/*
|
||||||
|
* MS Windows can be booted without a mouse.
|
||||||
|
*/
|
||||||
|
return GetSystemMetrics( SM_MOUSEPRESENT );
|
||||||
|
|
||||||
|
case GLUT_NUM_MOUSE_BUTTONS:
|
||||||
|
# if defined(_WIN32_WCE)
|
||||||
|
return 1;
|
||||||
|
# else
|
||||||
|
return GetSystemMetrics( SM_CMOUSEBUTTONS );
|
||||||
|
# endif
|
||||||
|
|
||||||
|
default:
|
||||||
|
fgWarning( "glutDeviceGet(): missing enum handle %d", eWhat );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* And now -- the failure. */
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int fgPlatformGlutLayerGet( GLenum eWhat )
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* This is easy as layers are not implemented ;-)
|
||||||
|
*
|
||||||
|
* XXX Can we merge the UNIX/X11 and WIN32 sections? Or
|
||||||
|
* XXX is overlay support planned?
|
||||||
|
*/
|
||||||
|
switch( eWhat )
|
||||||
|
{
|
||||||
|
|
||||||
|
case GLUT_OVERLAY_POSSIBLE:
|
||||||
|
/* return fgSetupPixelFormat( fgStructure.CurrentWindow, GL_TRUE,
|
||||||
|
PFD_OVERLAY_PLANE ); */
|
||||||
|
return 0 ;
|
||||||
|
|
||||||
|
case GLUT_LAYER_IN_USE:
|
||||||
|
return GLUT_NORMAL;
|
||||||
|
|
||||||
|
case GLUT_HAS_OVERLAY:
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case GLUT_TRANSPARENT_INDEX:
|
||||||
|
/*
|
||||||
|
* Return just anything, which is always defined as zero
|
||||||
|
*
|
||||||
|
* XXX HUH?
|
||||||
|
*/
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case GLUT_NORMAL_DAMAGED:
|
||||||
|
/* XXX Actually I do not know. Maybe. */
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case GLUT_OVERLAY_DAMAGED:
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
default:
|
||||||
|
fgWarning( "glutLayerGet(): missing enum handle %d", eWhat );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* And fail. That's good. Programs do love failing. */
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user