diff options
Diffstat (limited to 'src/engine/external/glfw/lib/enable.c')
| -rw-r--r-- | src/engine/external/glfw/lib/enable.c | 295 |
1 files changed, 295 insertions, 0 deletions
diff --git a/src/engine/external/glfw/lib/enable.c b/src/engine/external/glfw/lib/enable.c new file mode 100644 index 00000000..6231a1f9 --- /dev/null +++ b/src/engine/external/glfw/lib/enable.c @@ -0,0 +1,295 @@ +//======================================================================== +// GLFW - An OpenGL framework +// File: enable.c +// Platform: Any +// API version: 2.6 +// WWW: http://glfw.sourceforge.net +//------------------------------------------------------------------------ +// Copyright (c) 2002-2006 Camilla Berglund +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would +// be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +// +//======================================================================== + +#include "internal.h" + + +//************************************************************************ +//**** GLFW internal functions **** +//************************************************************************ + +//======================================================================== +// Enable (show) mouse cursor +//======================================================================== + +static void _glfwEnableMouseCursor( void ) +{ + int CenterPosX, CenterPosY; + + if( !_glfwWin.Opened || !_glfwWin.MouseLock ) + { + return; + } + + // Show mouse cursor + _glfwPlatformShowMouseCursor(); + + CenterPosX = _glfwWin.Width / 2; + CenterPosY = _glfwWin.Height / 2; + + if( CenterPosX != _glfwInput.MousePosX || CenterPosY != _glfwInput.MousePosY ) + { + _glfwPlatformSetMouseCursorPos( CenterPosX, CenterPosY ); + + _glfwInput.MousePosX = CenterPosX; + _glfwInput.MousePosY = CenterPosY; + + if( _glfwWin.MousePosCallback ) + { + _glfwWin.MousePosCallback( _glfwInput.MousePosX, + _glfwInput.MousePosY ); + } + } + + // From now on the mouse is unlocked + _glfwWin.MouseLock = GL_FALSE; +} + +//======================================================================== +// Disable (hide) mouse cursor +//======================================================================== + +static void _glfwDisableMouseCursor( void ) +{ + if( !_glfwWin.Opened || _glfwWin.MouseLock ) + { + return; + } + + // Hide mouse cursor + _glfwPlatformHideMouseCursor(); + + // Move cursor to the middle of the window + _glfwPlatformSetMouseCursorPos( _glfwWin.Width>>1, + _glfwWin.Height>>1 ); + + // From now on the mouse is locked + _glfwWin.MouseLock = GL_TRUE; +} + + +//======================================================================== +// _glfwEnableStickyKeys() - Enable sticky keys +// _glfwDisableStickyKeys() - Disable sticky keys +//======================================================================== + +static void _glfwEnableStickyKeys( void ) +{ + _glfwInput.StickyKeys = 1; +} + +static void _glfwDisableStickyKeys( void ) +{ + int i; + + _glfwInput.StickyKeys = 0; + + // Release all sticky keys + for( i = 0; i <= GLFW_KEY_LAST; i ++ ) + { + if( _glfwInput.Key[ i ] == 2 ) + { + _glfwInput.Key[ i ] = 0; + } + } +} + + +//======================================================================== +// _glfwEnableStickyMouseButtons() - Enable sticky mouse buttons +// _glfwDisableStickyMouseButtons() - Disable sticky mouse buttons +//======================================================================== + +static void _glfwEnableStickyMouseButtons( void ) +{ + _glfwInput.StickyMouseButtons = 1; +} + +static void _glfwDisableStickyMouseButtons( void ) +{ + int i; + + _glfwInput.StickyMouseButtons = 0; + + // Release all sticky mouse buttons + for( i = 0; i <= GLFW_MOUSE_BUTTON_LAST; i ++ ) + { + if( _glfwInput.MouseButton[ i ] == 2 ) + { + _glfwInput.MouseButton[ i ] = 0; + } + } +} + + +//======================================================================== +// _glfwEnableSystemKeys() - Enable system keys +// _glfwDisableSystemKeys() - Disable system keys +//======================================================================== + +static void _glfwEnableSystemKeys( void ) +{ + if( !_glfwWin.SysKeysDisabled ) + { + return; + } + + _glfwPlatformEnableSystemKeys(); + + // Indicate that system keys are no longer disabled + _glfwWin.SysKeysDisabled = GL_FALSE; +} + +static void _glfwDisableSystemKeys( void ) +{ + if( _glfwWin.SysKeysDisabled ) + { + return; + } + + _glfwPlatformDisableSystemKeys(); + + // Indicate that system keys are now disabled + _glfwWin.SysKeysDisabled = GL_TRUE; +} + + +//======================================================================== +// _glfwEnableKeyRepeat() - Enable key repeat +// _glfwDisableKeyRepeat() - Disable key repeat +//======================================================================== + +static void _glfwEnableKeyRepeat( void ) +{ + _glfwInput.KeyRepeat = 1; +} + +static void _glfwDisableKeyRepeat( void ) +{ + _glfwInput.KeyRepeat = 0; +} + + +//======================================================================== +// _glfwEnableAutoPollEvents() - Enable automatic event polling +// _glfwDisableAutoPollEvents() - Disable automatic event polling +//======================================================================== + +static void _glfwEnableAutoPollEvents( void ) +{ + _glfwWin.AutoPollEvents = 1; +} + +static void _glfwDisableAutoPollEvents( void ) +{ + _glfwWin.AutoPollEvents = 0; +} + + + +//************************************************************************ +//**** GLFW user functions **** +//************************************************************************ + +//======================================================================== +// glfwEnable() - Enable certain GLFW/window/system functions. +//======================================================================== + +GLFWAPI void GLFWAPIENTRY glfwEnable( int token ) +{ + // Is GLFW initialized? + if( !_glfwInitialized ) + { + return; + } + + switch( token ) + { + case GLFW_MOUSE_CURSOR: + _glfwEnableMouseCursor(); + break; + case GLFW_STICKY_KEYS: + _glfwEnableStickyKeys(); + break; + case GLFW_STICKY_MOUSE_BUTTONS: + _glfwEnableStickyMouseButtons(); + break; + case GLFW_SYSTEM_KEYS: + _glfwEnableSystemKeys(); + break; + case GLFW_KEY_REPEAT: + _glfwEnableKeyRepeat(); + break; + case GLFW_AUTO_POLL_EVENTS: + _glfwEnableAutoPollEvents(); + break; + default: + break; + } +} + + +//======================================================================== +// glfwDisable() - Disable certain GLFW/window/system functions. +//======================================================================== + +GLFWAPI void GLFWAPIENTRY glfwDisable( int token ) +{ + // Is GLFW initialized? + if( !_glfwInitialized ) + { + return; + } + + switch( token ) + { + case GLFW_MOUSE_CURSOR: + _glfwDisableMouseCursor(); + break; + case GLFW_STICKY_KEYS: + _glfwDisableStickyKeys(); + break; + case GLFW_STICKY_MOUSE_BUTTONS: + _glfwDisableStickyMouseButtons(); + break; + case GLFW_SYSTEM_KEYS: + _glfwDisableSystemKeys(); + break; + case GLFW_KEY_REPEAT: + _glfwDisableKeyRepeat(); + break; + case GLFW_AUTO_POLL_EVENTS: + _glfwDisableAutoPollEvents(); + break; + default: + break; + } +} + |