You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
310 lines
8.3 KiB
310 lines
8.3 KiB
//======================================================================== |
|
// GLFW - An OpenGL framework |
|
// Platform: Any |
|
// API version: 3.0 |
|
// WWW: http://www.glfw.org/ |
|
//------------------------------------------------------------------------ |
|
// Copyright (c) 2002-2006 Marcus Geelnard |
|
// Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org> |
|
// |
|
// 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 enableMouseCursor( 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 disableMouseCursor( 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; |
|
} |
|
|
|
|
|
//======================================================================== |
|
// Enable sticky keys |
|
//======================================================================== |
|
|
|
static void enableStickyKeys( void ) |
|
{ |
|
_glfwInput.StickyKeys = 1; |
|
} |
|
|
|
//======================================================================== |
|
// Disable sticky keys |
|
//======================================================================== |
|
|
|
static void disableStickyKeys( 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; |
|
} |
|
} |
|
} |
|
|
|
|
|
//======================================================================== |
|
// Enable sticky mouse buttons |
|
//======================================================================== |
|
|
|
static void enableStickyMouseButtons( void ) |
|
{ |
|
_glfwInput.StickyMouseButtons = 1; |
|
} |
|
|
|
//======================================================================== |
|
// Disable sticky mouse buttons |
|
//======================================================================== |
|
|
|
static void disableStickyMouseButtons( 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; |
|
} |
|
} |
|
} |
|
|
|
|
|
//======================================================================== |
|
// Enable system keys |
|
//======================================================================== |
|
|
|
static void enableSystemKeys( void ) |
|
{ |
|
if( !_glfwWin.sysKeysDisabled ) |
|
{ |
|
return; |
|
} |
|
|
|
_glfwPlatformEnableSystemKeys(); |
|
|
|
// Indicate that system keys are no longer disabled |
|
_glfwWin.sysKeysDisabled = GL_FALSE; |
|
} |
|
|
|
//======================================================================== |
|
// Disable system keys |
|
//======================================================================== |
|
|
|
static void disableSystemKeys( void ) |
|
{ |
|
if( _glfwWin.sysKeysDisabled ) |
|
{ |
|
return; |
|
} |
|
|
|
_glfwPlatformDisableSystemKeys(); |
|
|
|
// Indicate that system keys are now disabled |
|
_glfwWin.sysKeysDisabled = GL_TRUE; |
|
} |
|
|
|
|
|
//======================================================================== |
|
// Enable key repeat |
|
//======================================================================== |
|
|
|
static void enableKeyRepeat( void ) |
|
{ |
|
_glfwInput.KeyRepeat = 1; |
|
} |
|
|
|
//======================================================================== |
|
// Disable key repeat |
|
//======================================================================== |
|
|
|
static void disableKeyRepeat( void ) |
|
{ |
|
_glfwInput.KeyRepeat = 0; |
|
} |
|
|
|
|
|
//======================================================================== |
|
// Enable automatic event polling |
|
//======================================================================== |
|
|
|
static void enableAutoPollEvents( void ) |
|
{ |
|
_glfwWin.autoPollEvents = 1; |
|
} |
|
|
|
//======================================================================== |
|
// Disable automatic event polling |
|
//======================================================================== |
|
|
|
static void disableAutoPollEvents( void ) |
|
{ |
|
_glfwWin.autoPollEvents = 0; |
|
} |
|
|
|
|
|
|
|
//************************************************************************ |
|
//**** GLFW user functions **** |
|
//************************************************************************ |
|
|
|
//======================================================================== |
|
// Enable certain GLFW/window/system functions. |
|
//======================================================================== |
|
|
|
GLFWAPI void glfwEnable( int token ) |
|
{ |
|
// Is GLFW initialized? |
|
if( !_glfwInitialized ) |
|
{ |
|
return; |
|
} |
|
|
|
switch( token ) |
|
{ |
|
case GLFW_MOUSE_CURSOR: |
|
enableMouseCursor(); |
|
break; |
|
case GLFW_STICKY_KEYS: |
|
enableStickyKeys(); |
|
break; |
|
case GLFW_STICKY_MOUSE_BUTTONS: |
|
enableStickyMouseButtons(); |
|
break; |
|
case GLFW_SYSTEM_KEYS: |
|
enableSystemKeys(); |
|
break; |
|
case GLFW_KEY_REPEAT: |
|
enableKeyRepeat(); |
|
break; |
|
case GLFW_AUTO_POLL_EVENTS: |
|
enableAutoPollEvents(); |
|
break; |
|
default: |
|
break; |
|
} |
|
} |
|
|
|
|
|
//======================================================================== |
|
// Disable certain GLFW/window/system functions. |
|
//======================================================================== |
|
|
|
GLFWAPI void glfwDisable( int token ) |
|
{ |
|
// Is GLFW initialized? |
|
if( !_glfwInitialized ) |
|
{ |
|
return; |
|
} |
|
|
|
switch( token ) |
|
{ |
|
case GLFW_MOUSE_CURSOR: |
|
disableMouseCursor(); |
|
break; |
|
case GLFW_STICKY_KEYS: |
|
disableStickyKeys(); |
|
break; |
|
case GLFW_STICKY_MOUSE_BUTTONS: |
|
disableStickyMouseButtons(); |
|
break; |
|
case GLFW_SYSTEM_KEYS: |
|
disableSystemKeys(); |
|
break; |
|
case GLFW_KEY_REPEAT: |
|
disableKeyRepeat(); |
|
break; |
|
case GLFW_AUTO_POLL_EVENTS: |
|
disableAutoPollEvents(); |
|
break; |
|
default: |
|
break; |
|
} |
|
} |
|
|
|
|