Added scancode to key callback.
This commit is contained in:
parent
362bf5de64
commit
11615fcaf2
@ -311,6 +311,7 @@ GLFW.
|
|||||||
* Added `GLFW_VISIBLE` window hint and parameter for controlling and polling
|
* Added `GLFW_VISIBLE` window hint and parameter for controlling and polling
|
||||||
window visibility
|
window visibility
|
||||||
* Added `GLFW_REPEAT` key action for repeated keys
|
* Added `GLFW_REPEAT` key action for repeated keys
|
||||||
|
* Added scancode parameter to key callback
|
||||||
* Added `refreshRate` member to `GLFWvidmode` struct
|
* Added `refreshRate` member to `GLFWvidmode` struct
|
||||||
* Added key modifier parameter to key and mouse button callbacks
|
* Added key modifier parameter to key and mouse button callbacks
|
||||||
* Added `windows` simple multi-window test program
|
* Added `windows` simple multi-window test program
|
||||||
|
@ -43,7 +43,7 @@
|
|||||||
void init( void );
|
void init( void );
|
||||||
void display( void );
|
void display( void );
|
||||||
void reshape( GLFWwindow* window, int w, int h );
|
void reshape( GLFWwindow* window, int w, int h );
|
||||||
void key_callback( GLFWwindow* window, int key, int action, int mods );
|
void key_callback( GLFWwindow* window, int key, int scancode, int action, int mods );
|
||||||
void DrawBoingBall( void );
|
void DrawBoingBall( void );
|
||||||
void BounceBall( double dt );
|
void BounceBall( double dt );
|
||||||
void DrawBoingBallBand( GLfloat long_lo, GLfloat long_hi );
|
void DrawBoingBallBand( GLfloat long_lo, GLfloat long_hi );
|
||||||
@ -245,7 +245,7 @@ void reshape( GLFWwindow* window, int w, int h )
|
|||||||
0.0, -1.0, 0.0 ); /* up vector */
|
0.0, -1.0, 0.0 ); /* up vector */
|
||||||
}
|
}
|
||||||
|
|
||||||
void key_callback( GLFWwindow* window, int key, int action, int mods )
|
void key_callback( GLFWwindow* window, int key, int scancode, int action, int mods )
|
||||||
{
|
{
|
||||||
if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
|
if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
|
||||||
glfwSetWindowShouldClose(window, GL_TRUE);
|
glfwSetWindowShouldClose(window, GL_TRUE);
|
||||||
|
@ -211,7 +211,7 @@ static void animate(void)
|
|||||||
|
|
||||||
|
|
||||||
/* change view angle, exit upon ESC */
|
/* change view angle, exit upon ESC */
|
||||||
void key( GLFWwindow* window, int k, int action, int mods )
|
void key( GLFWwindow* window, int k, int s, int action, int mods )
|
||||||
{
|
{
|
||||||
if( action != GLFW_PRESS ) return;
|
if( action != GLFW_PRESS ) return;
|
||||||
|
|
||||||
|
@ -477,7 +477,7 @@ static void update_mesh(void)
|
|||||||
* GLFW callback functions
|
* GLFW callback functions
|
||||||
*********************************************************************/
|
*********************************************************************/
|
||||||
|
|
||||||
static void key_callback(GLFWwindow* window, int key, int action, int mods)
|
static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
|
||||||
{
|
{
|
||||||
switch(key)
|
switch(key)
|
||||||
{
|
{
|
||||||
|
@ -434,7 +434,7 @@ static void mouseButtonFun(GLFWwindow* window, int button, int action, int mods)
|
|||||||
do_redraw = 1;
|
do_redraw = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void key_callback(GLFWwindow* window, int key, int action, int mods)
|
static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
|
||||||
{
|
{
|
||||||
if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
|
if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
|
||||||
glfwSetWindowShouldClose(window, GL_TRUE);
|
glfwSetWindowShouldClose(window, GL_TRUE);
|
||||||
|
@ -270,7 +270,7 @@ static void error_callback(int error, const char* description)
|
|||||||
// Handle key strokes
|
// Handle key strokes
|
||||||
//========================================================================
|
//========================================================================
|
||||||
|
|
||||||
void key_callback(GLFWwindow* window, int key, int action, int mods)
|
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
|
||||||
{
|
{
|
||||||
if (action != GLFW_PRESS)
|
if (action != GLFW_PRESS)
|
||||||
return;
|
return;
|
||||||
|
@ -265,6 +265,9 @@ extern "C" {
|
|||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* The unknown key */
|
||||||
|
#define GLFW_KEY_UNKNOWN -1
|
||||||
|
|
||||||
/* Printable keys */
|
/* Printable keys */
|
||||||
#define GLFW_KEY_SPACE 32
|
#define GLFW_KEY_SPACE 32
|
||||||
#define GLFW_KEY_APOSTROPHE 39 /* ' */
|
#define GLFW_KEY_APOSTROPHE 39 /* ' */
|
||||||
@ -744,6 +747,7 @@ typedef void (* GLFWscrollfun)(GLFWwindow*,double,double);
|
|||||||
*
|
*
|
||||||
* @param[in] window The window that received the event.
|
* @param[in] window The window that received the event.
|
||||||
* @param[in] key The [keyboard key](@ref keys) that was pressed or released.
|
* @param[in] key The [keyboard key](@ref keys) that was pressed or released.
|
||||||
|
* @param[in] scancode The system-specific scancode of the key.
|
||||||
* @param[in] action @ref GLFW_PRESS, @ref GLFW_RELEASE or @ref GLFW_REPEAT.
|
* @param[in] action @ref GLFW_PRESS, @ref GLFW_RELEASE or @ref GLFW_REPEAT.
|
||||||
* @param[in] mods Bit field describing which [modifier keys](@ref mods) were
|
* @param[in] mods Bit field describing which [modifier keys](@ref mods) were
|
||||||
* held down.
|
* held down.
|
||||||
@ -752,7 +756,7 @@ typedef void (* GLFWscrollfun)(GLFWwindow*,double,double);
|
|||||||
*
|
*
|
||||||
* @ingroup input
|
* @ingroup input
|
||||||
*/
|
*/
|
||||||
typedef void (* GLFWkeyfun)(GLFWwindow*,int,int,int);
|
typedef void (* GLFWkeyfun)(GLFWwindow*,int,int,int,int);
|
||||||
|
|
||||||
/*! @brief The function signature for Unicode character callbacks.
|
/*! @brief The function signature for Unicode character callbacks.
|
||||||
*
|
*
|
||||||
@ -1771,6 +1775,8 @@ GLFWAPI void glfwSetInputMode(GLFWwindow* window, int mode, int value);
|
|||||||
* @param[in] key The desired [keyboard key](@ref keys).
|
* @param[in] key The desired [keyboard key](@ref keys).
|
||||||
* @return One of `GLFW_PRESS` or `GLFW_RELEASE`.
|
* @return One of `GLFW_PRESS` or `GLFW_RELEASE`.
|
||||||
*
|
*
|
||||||
|
* @note `GLFW_KEY_UNKNOWN` is not a valid key for this function.
|
||||||
|
*
|
||||||
* @ingroup input
|
* @ingroup input
|
||||||
*/
|
*/
|
||||||
GLFWAPI int glfwGetKey(GLFWwindow* window, int key);
|
GLFWAPI int glfwGetKey(GLFWwindow* window, int key);
|
||||||
@ -1857,6 +1863,14 @@ GLFWAPI void glfwSetCursorPos(GLFWwindow* window, double xpos, double ypos);
|
|||||||
* focus, i.e. `GLFW_FOCUSED` will be false and the focus callback will have
|
* focus, i.e. `GLFW_FOCUSED` will be false and the focus callback will have
|
||||||
* already been called.
|
* already been called.
|
||||||
*
|
*
|
||||||
|
* The scancode of a key is specific to that platform or sometimes even to that
|
||||||
|
* machine. Scancodes are intended to allow users to bind keys that don't have
|
||||||
|
* a GLFW key token. Such keys have `key` set to `GLFW_KEY_UNKNOWN`, their
|
||||||
|
* state is not saved and so it cannot be retrieved with @ref glfwGetKey.
|
||||||
|
*
|
||||||
|
* Sometimes GLFW needs to generate synthetic key events, in which case the
|
||||||
|
* scancode may be zero.
|
||||||
|
*
|
||||||
* @param[in] window The window whose callback to set.
|
* @param[in] window The window whose callback to set.
|
||||||
* @param[in] cbfun The new key callback, or `NULL` to remove the currently
|
* @param[in] cbfun The new key callback, or `NULL` to remove the currently
|
||||||
* set callback.
|
* set callback.
|
||||||
|
@ -203,9 +203,9 @@ static void centerCursor(_GLFWwindow *window)
|
|||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
// Converts Mac OS X key modifiers into GLFW ones
|
// Translates Mac OS X key modifiers into GLFW ones
|
||||||
//
|
//
|
||||||
static int convertKeyMods(NSUInteger flags)
|
static int translateFlags(NSUInteger flags)
|
||||||
{
|
{
|
||||||
int mods = 0;
|
int mods = 0;
|
||||||
|
|
||||||
@ -221,9 +221,9 @@ static int convertKeyMods(NSUInteger flags)
|
|||||||
return mods;
|
return mods;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Converts a Mac OS X keycode to a GLFW keycode
|
// Translates a Mac OS X keycode to a GLFW keycode
|
||||||
//
|
//
|
||||||
static int convertMacKeyCode(unsigned int macKeyCode)
|
static int translateKey(unsigned int key)
|
||||||
{
|
{
|
||||||
// Keyboard symbol translation table
|
// Keyboard symbol translation table
|
||||||
// TODO: Need to find mappings for F13-F15, volume down/up/mute, and eject.
|
// TODO: Need to find mappings for F13-F15, volume down/up/mute, and eject.
|
||||||
@ -281,7 +281,7 @@ static int convertMacKeyCode(unsigned int macKeyCode)
|
|||||||
/* 31 */ GLFW_KEY_SPACE,
|
/* 31 */ GLFW_KEY_SPACE,
|
||||||
/* 32 */ GLFW_KEY_WORLD_1,
|
/* 32 */ GLFW_KEY_WORLD_1,
|
||||||
/* 33 */ GLFW_KEY_BACKSPACE,
|
/* 33 */ GLFW_KEY_BACKSPACE,
|
||||||
/* 34 */ -1,
|
/* 34 */ GLFW_KEY_UNKNOWN,
|
||||||
/* 35 */ GLFW_KEY_ESCAPE,
|
/* 35 */ GLFW_KEY_ESCAPE,
|
||||||
/* 36 */ GLFW_KEY_RIGHT_SUPER,
|
/* 36 */ GLFW_KEY_RIGHT_SUPER,
|
||||||
/* 37 */ GLFW_KEY_LEFT_SUPER,
|
/* 37 */ GLFW_KEY_LEFT_SUPER,
|
||||||
@ -292,21 +292,21 @@ static int convertMacKeyCode(unsigned int macKeyCode)
|
|||||||
/* 3c */ GLFW_KEY_RIGHT_SHIFT,
|
/* 3c */ GLFW_KEY_RIGHT_SHIFT,
|
||||||
/* 3d */ GLFW_KEY_RIGHT_ALT,
|
/* 3d */ GLFW_KEY_RIGHT_ALT,
|
||||||
/* 3e */ GLFW_KEY_RIGHT_CONTROL,
|
/* 3e */ GLFW_KEY_RIGHT_CONTROL,
|
||||||
/* 3f */ -1, /* Function */
|
/* 3f */ GLFW_KEY_UNKNOWN, /* Function */
|
||||||
/* 40 */ GLFW_KEY_F17,
|
/* 40 */ GLFW_KEY_F17,
|
||||||
/* 41 */ GLFW_KEY_KP_DECIMAL,
|
/* 41 */ GLFW_KEY_KP_DECIMAL,
|
||||||
/* 42 */ -1,
|
/* 42 */ GLFW_KEY_UNKNOWN,
|
||||||
/* 43 */ GLFW_KEY_KP_MULTIPLY,
|
/* 43 */ GLFW_KEY_KP_MULTIPLY,
|
||||||
/* 44 */ -1,
|
/* 44 */ GLFW_KEY_UNKNOWN,
|
||||||
/* 45 */ GLFW_KEY_KP_ADD,
|
/* 45 */ GLFW_KEY_KP_ADD,
|
||||||
/* 46 */ -1,
|
/* 46 */ GLFW_KEY_UNKNOWN,
|
||||||
/* 47 */ GLFW_KEY_NUM_LOCK, /* Really KeypadClear... */
|
/* 47 */ GLFW_KEY_NUM_LOCK, /* Really KeypadClear... */
|
||||||
/* 48 */ -1, /* VolumeUp */
|
/* 48 */ GLFW_KEY_UNKNOWN, /* VolumeUp */
|
||||||
/* 49 */ -1, /* VolumeDown */
|
/* 49 */ GLFW_KEY_UNKNOWN, /* VolumeDown */
|
||||||
/* 4a */ -1, /* Mute */
|
/* 4a */ GLFW_KEY_UNKNOWN, /* Mute */
|
||||||
/* 4b */ GLFW_KEY_KP_DIVIDE,
|
/* 4b */ GLFW_KEY_KP_DIVIDE,
|
||||||
/* 4c */ GLFW_KEY_KP_ENTER,
|
/* 4c */ GLFW_KEY_KP_ENTER,
|
||||||
/* 4d */ -1,
|
/* 4d */ GLFW_KEY_UNKNOWN,
|
||||||
/* 4e */ GLFW_KEY_KP_SUBTRACT,
|
/* 4e */ GLFW_KEY_KP_SUBTRACT,
|
||||||
/* 4f */ GLFW_KEY_F18,
|
/* 4f */ GLFW_KEY_F18,
|
||||||
/* 50 */ GLFW_KEY_F19,
|
/* 50 */ GLFW_KEY_F19,
|
||||||
@ -322,26 +322,26 @@ static int convertMacKeyCode(unsigned int macKeyCode)
|
|||||||
/* 5a */ GLFW_KEY_F20,
|
/* 5a */ GLFW_KEY_F20,
|
||||||
/* 5b */ GLFW_KEY_KP_8,
|
/* 5b */ GLFW_KEY_KP_8,
|
||||||
/* 5c */ GLFW_KEY_KP_9,
|
/* 5c */ GLFW_KEY_KP_9,
|
||||||
/* 5d */ -1,
|
/* 5d */ GLFW_KEY_UNKNOWN,
|
||||||
/* 5e */ -1,
|
/* 5e */ GLFW_KEY_UNKNOWN,
|
||||||
/* 5f */ -1,
|
/* 5f */ GLFW_KEY_UNKNOWN,
|
||||||
/* 60 */ GLFW_KEY_F5,
|
/* 60 */ GLFW_KEY_F5,
|
||||||
/* 61 */ GLFW_KEY_F6,
|
/* 61 */ GLFW_KEY_F6,
|
||||||
/* 62 */ GLFW_KEY_F7,
|
/* 62 */ GLFW_KEY_F7,
|
||||||
/* 63 */ GLFW_KEY_F3,
|
/* 63 */ GLFW_KEY_F3,
|
||||||
/* 64 */ GLFW_KEY_F8,
|
/* 64 */ GLFW_KEY_F8,
|
||||||
/* 65 */ GLFW_KEY_F9,
|
/* 65 */ GLFW_KEY_F9,
|
||||||
/* 66 */ -1,
|
/* 66 */ GLFW_KEY_UNKNOWN,
|
||||||
/* 67 */ GLFW_KEY_F11,
|
/* 67 */ GLFW_KEY_F11,
|
||||||
/* 68 */ -1,
|
/* 68 */ GLFW_KEY_UNKNOWN,
|
||||||
/* 69 */ GLFW_KEY_PRINT_SCREEN,
|
/* 69 */ GLFW_KEY_PRINT_SCREEN,
|
||||||
/* 6a */ GLFW_KEY_F16,
|
/* 6a */ GLFW_KEY_F16,
|
||||||
/* 6b */ GLFW_KEY_F14,
|
/* 6b */ GLFW_KEY_F14,
|
||||||
/* 6c */ -1,
|
/* 6c */ GLFW_KEY_UNKNOWN,
|
||||||
/* 6d */ GLFW_KEY_F10,
|
/* 6d */ GLFW_KEY_F10,
|
||||||
/* 6e */ -1,
|
/* 6e */ GLFW_KEY_UNKNOWN,
|
||||||
/* 6f */ GLFW_KEY_F12,
|
/* 6f */ GLFW_KEY_F12,
|
||||||
/* 70 */ -1,
|
/* 70 */ GLFW_KEY_UNKNOWN,
|
||||||
/* 71 */ GLFW_KEY_F15,
|
/* 71 */ GLFW_KEY_F15,
|
||||||
/* 72 */ GLFW_KEY_INSERT, /* Really Help... */
|
/* 72 */ GLFW_KEY_INSERT, /* Really Help... */
|
||||||
/* 73 */ GLFW_KEY_HOME,
|
/* 73 */ GLFW_KEY_HOME,
|
||||||
@ -356,13 +356,13 @@ static int convertMacKeyCode(unsigned int macKeyCode)
|
|||||||
/* 7c */ GLFW_KEY_RIGHT,
|
/* 7c */ GLFW_KEY_RIGHT,
|
||||||
/* 7d */ GLFW_KEY_DOWN,
|
/* 7d */ GLFW_KEY_DOWN,
|
||||||
/* 7e */ GLFW_KEY_UP,
|
/* 7e */ GLFW_KEY_UP,
|
||||||
/* 7f */ -1,
|
/* 7f */ GLFW_KEY_UNKNOWN,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (macKeyCode >= 128)
|
if (key >= 128)
|
||||||
return -1;
|
return GLFW_KEY_UNKNOWN;
|
||||||
|
|
||||||
return table[macKeyCode];
|
return table[key];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -436,7 +436,7 @@ static int convertMacKeyCode(unsigned int macKeyCode)
|
|||||||
_glfwInputMouseClick(window,
|
_glfwInputMouseClick(window,
|
||||||
GLFW_MOUSE_BUTTON_LEFT,
|
GLFW_MOUSE_BUTTON_LEFT,
|
||||||
GLFW_PRESS,
|
GLFW_PRESS,
|
||||||
convertKeyMods([event modifierFlags]));
|
translateFlags([event modifierFlags]));
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)mouseDragged:(NSEvent *)event
|
- (void)mouseDragged:(NSEvent *)event
|
||||||
@ -449,7 +449,7 @@ static int convertMacKeyCode(unsigned int macKeyCode)
|
|||||||
_glfwInputMouseClick(window,
|
_glfwInputMouseClick(window,
|
||||||
GLFW_MOUSE_BUTTON_LEFT,
|
GLFW_MOUSE_BUTTON_LEFT,
|
||||||
GLFW_RELEASE,
|
GLFW_RELEASE,
|
||||||
convertKeyMods([event modifierFlags]));
|
translateFlags([event modifierFlags]));
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)mouseMoved:(NSEvent *)event
|
- (void)mouseMoved:(NSEvent *)event
|
||||||
@ -470,7 +470,7 @@ static int convertMacKeyCode(unsigned int macKeyCode)
|
|||||||
_glfwInputMouseClick(window,
|
_glfwInputMouseClick(window,
|
||||||
GLFW_MOUSE_BUTTON_RIGHT,
|
GLFW_MOUSE_BUTTON_RIGHT,
|
||||||
GLFW_PRESS,
|
GLFW_PRESS,
|
||||||
convertKeyMods([event modifierFlags]));
|
translateFlags([event modifierFlags]));
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)rightMouseDragged:(NSEvent *)event
|
- (void)rightMouseDragged:(NSEvent *)event
|
||||||
@ -483,7 +483,7 @@ static int convertMacKeyCode(unsigned int macKeyCode)
|
|||||||
_glfwInputMouseClick(window,
|
_glfwInputMouseClick(window,
|
||||||
GLFW_MOUSE_BUTTON_RIGHT,
|
GLFW_MOUSE_BUTTON_RIGHT,
|
||||||
GLFW_RELEASE,
|
GLFW_RELEASE,
|
||||||
convertKeyMods([event modifierFlags]));
|
translateFlags([event modifierFlags]));
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)otherMouseDown:(NSEvent *)event
|
- (void)otherMouseDown:(NSEvent *)event
|
||||||
@ -491,7 +491,7 @@ static int convertMacKeyCode(unsigned int macKeyCode)
|
|||||||
_glfwInputMouseClick(window,
|
_glfwInputMouseClick(window,
|
||||||
[event buttonNumber],
|
[event buttonNumber],
|
||||||
GLFW_PRESS,
|
GLFW_PRESS,
|
||||||
convertKeyMods([event modifierFlags]));
|
translateFlags([event modifierFlags]));
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)otherMouseDragged:(NSEvent *)event
|
- (void)otherMouseDragged:(NSEvent *)event
|
||||||
@ -504,7 +504,7 @@ static int convertMacKeyCode(unsigned int macKeyCode)
|
|||||||
_glfwInputMouseClick(window,
|
_glfwInputMouseClick(window,
|
||||||
[event buttonNumber],
|
[event buttonNumber],
|
||||||
GLFW_RELEASE,
|
GLFW_RELEASE,
|
||||||
convertKeyMods([event modifierFlags]));
|
translateFlags([event modifierFlags]));
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)mouseExited:(NSEvent *)event
|
- (void)mouseExited:(NSEvent *)event
|
||||||
@ -548,14 +548,11 @@ static int convertMacKeyCode(unsigned int macKeyCode)
|
|||||||
|
|
||||||
- (void)keyDown:(NSEvent *)event
|
- (void)keyDown:(NSEvent *)event
|
||||||
{
|
{
|
||||||
const NSUInteger mods = [event modifierFlags];
|
const int key = translateKey([event keyCode]);
|
||||||
|
const int mods = translateFlags([event modifierFlags]);
|
||||||
|
_glfwInputKey(window, key, [event keyCode], GLFW_PRESS, mods);
|
||||||
|
|
||||||
_glfwInputKey(window,
|
if (mods & GLFW_MOD_SUPER)
|
||||||
convertMacKeyCode([event keyCode]),
|
|
||||||
GLFW_PRESS,
|
|
||||||
convertKeyMods(mods));
|
|
||||||
|
|
||||||
if ([event modifierFlags] & NSCommandKeyMask)
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
NSString* characters = [event characters];
|
NSString* characters = [event characters];
|
||||||
@ -567,7 +564,7 @@ static int convertMacKeyCode(unsigned int macKeyCode)
|
|||||||
|
|
||||||
- (void)flagsChanged:(NSEvent *)event
|
- (void)flagsChanged:(NSEvent *)event
|
||||||
{
|
{
|
||||||
int action, key;
|
int action;
|
||||||
unsigned int newModifierFlags =
|
unsigned int newModifierFlags =
|
||||||
[event modifierFlags] & NSDeviceIndependentModifierFlagsMask;
|
[event modifierFlags] & NSDeviceIndependentModifierFlagsMask;
|
||||||
|
|
||||||
@ -578,17 +575,16 @@ static int convertMacKeyCode(unsigned int macKeyCode)
|
|||||||
|
|
||||||
window->ns.modifierFlags = newModifierFlags;
|
window->ns.modifierFlags = newModifierFlags;
|
||||||
|
|
||||||
key = convertMacKeyCode([event keyCode]);
|
const int key = translateKey([event keyCode]);
|
||||||
if (key != -1)
|
const int mods = translateFlags([event modifierFlags]);
|
||||||
_glfwInputKey(window, key, action, convertKeyMods([event modifierFlags]));
|
_glfwInputKey(window, key, [event keyCode], action, mods);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)keyUp:(NSEvent *)event
|
- (void)keyUp:(NSEvent *)event
|
||||||
{
|
{
|
||||||
_glfwInputKey(window,
|
const int key = translateKey([event keyCode]);
|
||||||
convertMacKeyCode([event keyCode]),
|
const int mods = translateFlags([event modifierFlags]);
|
||||||
GLFW_RELEASE,
|
_glfwInputKey(window, key, [event keyCode], GLFW_RELEASE, mods);
|
||||||
convertKeyMods([event modifierFlags]));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)scrollWheel:(NSEvent *)event
|
- (void)scrollWheel:(NSEvent *)event
|
||||||
|
22
src/input.c
22
src/input.c
@ -122,29 +122,29 @@ static void setStickyMouseButtons(_GLFWwindow* window, int enabled)
|
|||||||
////// GLFW event API //////
|
////// GLFW event API //////
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void _glfwInputKey(_GLFWwindow* window, int key, int action, int mods)
|
void _glfwInputKey(_GLFWwindow* window, int key, int scancode, int action, int mods)
|
||||||
{
|
{
|
||||||
GLboolean repeated = GL_FALSE;
|
GLboolean repeated = GL_FALSE;
|
||||||
|
|
||||||
if (key < 0 || key > GLFW_KEY_LAST)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (action == GLFW_RELEASE && window->key[key] == GLFW_RELEASE)
|
if (action == GLFW_RELEASE && window->key[key] == GLFW_RELEASE)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (action == GLFW_PRESS && window->key[key] == GLFW_PRESS)
|
if (key >= 0 && key <= GLFW_KEY_LAST)
|
||||||
repeated = GL_TRUE;
|
{
|
||||||
|
if (action == GLFW_PRESS && window->key[key] == GLFW_PRESS)
|
||||||
|
repeated = GL_TRUE;
|
||||||
|
|
||||||
if (action == GLFW_RELEASE && window->stickyKeys)
|
if (action == GLFW_RELEASE && window->stickyKeys)
|
||||||
window->key[key] = _GLFW_STICK;
|
window->key[key] = _GLFW_STICK;
|
||||||
else
|
else
|
||||||
window->key[key] = (char) action;
|
window->key[key] = (char) action;
|
||||||
|
}
|
||||||
|
|
||||||
if (repeated)
|
if (repeated)
|
||||||
action = GLFW_REPEAT;
|
action = GLFW_REPEAT;
|
||||||
|
|
||||||
if (window->callbacks.key)
|
if (window->callbacks.key)
|
||||||
window->callbacks.key((GLFWwindow*) window, key, action, mods);
|
window->callbacks.key((GLFWwindow*) window, key, scancode, action, mods);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _glfwInputChar(_GLFWwindow* window, unsigned int character)
|
void _glfwInputChar(_GLFWwindow* window, unsigned int character)
|
||||||
|
@ -606,11 +606,12 @@ void _glfwInputWindowCloseRequest(_GLFWwindow* window);
|
|||||||
/*! @brief Notifies shared code of a physical key event.
|
/*! @brief Notifies shared code of a physical key event.
|
||||||
* @param[in] window The window that received the event.
|
* @param[in] window The window that received the event.
|
||||||
* @param[in] key The key that was pressed or released.
|
* @param[in] key The key that was pressed or released.
|
||||||
|
* @param[in] scancode The system-specific scan code of the key.
|
||||||
* @param[in] action @ref GLFW_PRESS or @ref GLFW_RELEASE.
|
* @param[in] action @ref GLFW_PRESS or @ref GLFW_RELEASE.
|
||||||
* @param[in] mods The modifiers pressed when the event was generated.
|
* @param[in] mods The modifiers pressed when the event was generated.
|
||||||
* @ingroup event
|
* @ingroup event
|
||||||
*/
|
*/
|
||||||
void _glfwInputKey(_GLFWwindow* window, int key, int action, int mods);
|
void _glfwInputKey(_GLFWwindow* window, int key, int scancode, int action, int mods);
|
||||||
|
|
||||||
/*! @brief Notifies shared code of a Unicode character input event.
|
/*! @brief Notifies shared code of a Unicode character input event.
|
||||||
* @param[in] window The window that received the event.
|
* @param[in] window The window that received the event.
|
||||||
|
@ -34,6 +34,8 @@
|
|||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#include <windowsx.h>
|
#include <windowsx.h>
|
||||||
|
|
||||||
|
#define _GLFW_KEY_INVALID -2
|
||||||
|
|
||||||
|
|
||||||
// Updates the cursor clip rect
|
// Updates the cursor clip rect
|
||||||
//
|
//
|
||||||
@ -214,7 +216,7 @@ static int translateKey(WPARAM wParam, LPARAM lParam)
|
|||||||
{
|
{
|
||||||
// Next message is a RALT down message, which
|
// Next message is a RALT down message, which
|
||||||
// means that this is not a proper LCTRL message
|
// means that this is not a proper LCTRL message
|
||||||
return -1;
|
return _GLFW_KEY_INVALID;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -360,8 +362,8 @@ static int translateKey(WPARAM wParam, LPARAM lParam)
|
|||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// No matching translation was found, so return -1
|
// No matching translation was found
|
||||||
return -1;
|
return GLFW_KEY_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Window callback function (handles window events)
|
// Window callback function (handles window events)
|
||||||
@ -471,7 +473,12 @@ static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg,
|
|||||||
case WM_KEYDOWN:
|
case WM_KEYDOWN:
|
||||||
case WM_SYSKEYDOWN:
|
case WM_SYSKEYDOWN:
|
||||||
{
|
{
|
||||||
_glfwInputKey(window, translateKey(wParam, lParam), GLFW_PRESS, getKeyMods());
|
const int scancode = (lParam >> 16) & 0xff;
|
||||||
|
const int key = translateKey(wParam, lParam);
|
||||||
|
if (key == _GLFW_KEY_INVALID)
|
||||||
|
break;
|
||||||
|
|
||||||
|
_glfwInputKey(window, key, scancode, GLFW_PRESS, getKeyMods());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -500,22 +507,26 @@ static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg,
|
|||||||
case WM_SYSKEYUP:
|
case WM_SYSKEYUP:
|
||||||
{
|
{
|
||||||
const int mods = getKeyMods();
|
const int mods = getKeyMods();
|
||||||
|
const int scancode = (lParam >> 16) & 0xff;
|
||||||
|
const int key = translateKey(wParam, lParam);
|
||||||
|
if (key == _GLFW_KEY_INVALID)
|
||||||
|
break;
|
||||||
|
|
||||||
if (wParam == VK_SHIFT)
|
if (wParam == VK_SHIFT)
|
||||||
{
|
{
|
||||||
// Release both Shift keys on Shift up event, as only one event
|
// Release both Shift keys on Shift up event, as only one event
|
||||||
// is sent even if both keys are released
|
// is sent even if both keys are released
|
||||||
_glfwInputKey(window, GLFW_KEY_LEFT_SHIFT, GLFW_RELEASE, mods);
|
_glfwInputKey(window, GLFW_KEY_LEFT_SHIFT, scancode, GLFW_RELEASE, mods);
|
||||||
_glfwInputKey(window, GLFW_KEY_RIGHT_SHIFT, GLFW_RELEASE, mods);
|
_glfwInputKey(window, GLFW_KEY_RIGHT_SHIFT, scancode, GLFW_RELEASE, mods);
|
||||||
}
|
}
|
||||||
else if (wParam == VK_SNAPSHOT)
|
else if (wParam == VK_SNAPSHOT)
|
||||||
{
|
{
|
||||||
// Key down is not reported for the print screen key
|
// Key down is not reported for the print screen key
|
||||||
_glfwInputKey(window, GLFW_KEY_PRINT_SCREEN, GLFW_PRESS, mods);
|
_glfwInputKey(window, key, scancode, GLFW_PRESS, mods);
|
||||||
_glfwInputKey(window, GLFW_KEY_PRINT_SCREEN, GLFW_RELEASE, mods);
|
_glfwInputKey(window, key, scancode, GLFW_RELEASE, mods);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
_glfwInputKey(window, translateKey(wParam, lParam), GLFW_RELEASE, getKeyMods());
|
_glfwInputKey(window, key, scancode, GLFW_RELEASE, mods);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1064,10 +1075,10 @@ void _glfwPlatformPollEvents(void)
|
|||||||
// See if this differs from our belief of what has happened
|
// See if this differs from our belief of what has happened
|
||||||
// (we only have to check for lost key up events)
|
// (we only have to check for lost key up events)
|
||||||
if (!lshiftDown && window->key[GLFW_KEY_LEFT_SHIFT] == 1)
|
if (!lshiftDown && window->key[GLFW_KEY_LEFT_SHIFT] == 1)
|
||||||
_glfwInputKey(window, GLFW_KEY_LEFT_SHIFT, GLFW_RELEASE, mods);
|
_glfwInputKey(window, GLFW_KEY_LEFT_SHIFT, 0, GLFW_RELEASE, mods);
|
||||||
|
|
||||||
if (!rshiftDown && window->key[GLFW_KEY_RIGHT_SHIFT] == 1)
|
if (!rshiftDown && window->key[GLFW_KEY_RIGHT_SHIFT] == 1)
|
||||||
_glfwInputKey(window, GLFW_KEY_RIGHT_SHIFT, GLFW_RELEASE, mods);
|
_glfwInputKey(window, GLFW_KEY_RIGHT_SHIFT, 0, GLFW_RELEASE, mods);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Did the cursor move in an focused window that has captured the cursor
|
// Did the cursor move in an focused window that has captured the cursor
|
||||||
|
@ -77,7 +77,7 @@ void _glfwInputWindowFocus(_GLFWwindow* window, GLboolean focused)
|
|||||||
for (i = 0; i <= GLFW_KEY_LAST; i++)
|
for (i = 0; i <= GLFW_KEY_LAST; i++)
|
||||||
{
|
{
|
||||||
if (window->key[i] == GLFW_PRESS)
|
if (window->key[i] == GLFW_PRESS)
|
||||||
_glfwInputKey(window, i, GLFW_RELEASE, 0);
|
_glfwInputKey(window, i, 0, GLFW_RELEASE, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Release all pressed mouse buttons
|
// Release all pressed mouse buttons
|
||||||
|
@ -39,13 +39,13 @@
|
|||||||
|
|
||||||
// Translate an X11 key code to a GLFW key code.
|
// Translate an X11 key code to a GLFW key code.
|
||||||
//
|
//
|
||||||
static int keyCodeToGLFWKeyCode(int keyCode)
|
static int translateKey(int keyCode)
|
||||||
{
|
{
|
||||||
int keySym;
|
int keySym;
|
||||||
|
|
||||||
// Valid key code range is [8,255], according to the XLib manual
|
// Valid key code range is [8,255], according to the XLib manual
|
||||||
if (keyCode < 8 || keyCode > 255)
|
if (keyCode < 8 || keyCode > 255)
|
||||||
return -1;
|
return GLFW_KEY_UNKNOWN;
|
||||||
|
|
||||||
// Try secondary keysym, for numeric keypad keys
|
// Try secondary keysym, for numeric keypad keys
|
||||||
// Note: This way we always force "NumLock = ON", which is intentional
|
// Note: This way we always force "NumLock = ON", which is intentional
|
||||||
@ -211,8 +211,8 @@ static int keyCodeToGLFWKeyCode(int keyCode)
|
|||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// No matching translation was found, so return -1
|
// No matching translation was found
|
||||||
return -1;
|
return GLFW_KEY_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the key code LUT
|
// Update the key code LUT
|
||||||
@ -225,7 +225,7 @@ static void updateKeyCodeLUT(void)
|
|||||||
|
|
||||||
// Clear the LUT
|
// Clear the LUT
|
||||||
for (keyCode = 0; keyCode < 256; keyCode++)
|
for (keyCode = 0; keyCode < 256; keyCode++)
|
||||||
_glfw.x11.keyCodeLUT[keyCode] = -1;
|
_glfw.x11.keyCodeLUT[keyCode] = GLFW_KEY_UNKNOWN;
|
||||||
|
|
||||||
// Use XKB to determine physical key locations independently of the current
|
// Use XKB to determine physical key locations independently of the current
|
||||||
// keyboard layout
|
// keyboard layout
|
||||||
@ -296,7 +296,7 @@ static void updateKeyCodeLUT(void)
|
|||||||
else if (strcmp(name, "AB10") == 0) keyCodeGLFW = GLFW_KEY_SLASH;
|
else if (strcmp(name, "AB10") == 0) keyCodeGLFW = GLFW_KEY_SLASH;
|
||||||
else if (strcmp(name, "BKSL") == 0) keyCodeGLFW = GLFW_KEY_BACKSLASH;
|
else if (strcmp(name, "BKSL") == 0) keyCodeGLFW = GLFW_KEY_BACKSLASH;
|
||||||
else if (strcmp(name, "LSGT") == 0) keyCodeGLFW = GLFW_KEY_WORLD_1;
|
else if (strcmp(name, "LSGT") == 0) keyCodeGLFW = GLFW_KEY_WORLD_1;
|
||||||
else keyCodeGLFW = -1;
|
else keyCodeGLFW = GLFW_KEY_UNKNOWN;
|
||||||
|
|
||||||
// Update the key code LUT
|
// Update the key code LUT
|
||||||
if ((keyCode >= 0) && (keyCode < 256))
|
if ((keyCode >= 0) && (keyCode < 256))
|
||||||
@ -311,7 +311,7 @@ static void updateKeyCodeLUT(void)
|
|||||||
for (keyCode = 0; keyCode < 256; keyCode++)
|
for (keyCode = 0; keyCode < 256; keyCode++)
|
||||||
{
|
{
|
||||||
if (_glfw.x11.keyCodeLUT[keyCode] < 0)
|
if (_glfw.x11.keyCodeLUT[keyCode] < 0)
|
||||||
_glfw.x11.keyCodeLUT[keyCode] = keyCodeToGLFWKeyCode(keyCode);
|
_glfw.x11.keyCodeLUT[keyCode] = translateKey(keyCode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,8 +83,8 @@ static int translateKey(int keycode)
|
|||||||
// Use the pre-filled LUT (see updateKeyCodeLUT() in x11_init.c)
|
// Use the pre-filled LUT (see updateKeyCodeLUT() in x11_init.c)
|
||||||
if ((keycode >= 0) && (keycode < 256))
|
if ((keycode >= 0) && (keycode < 256))
|
||||||
return _glfw.x11.keyCodeLUT[keycode];
|
return _glfw.x11.keyCodeLUT[keycode];
|
||||||
else
|
|
||||||
return -1;
|
return GLFW_KEY_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Translates an X Window event to Unicode
|
// Translates an X Window event to Unicode
|
||||||
@ -515,7 +515,7 @@ static void processEvent(XEvent *event)
|
|||||||
const int key = translateKey(event->xkey.keycode);
|
const int key = translateKey(event->xkey.keycode);
|
||||||
const int mods = translateState(event->xkey.state);
|
const int mods = translateState(event->xkey.state);
|
||||||
|
|
||||||
_glfwInputKey(window, key, GLFW_PRESS, mods);
|
_glfwInputKey(window, key, event->xkey.keycode, GLFW_PRESS, mods);
|
||||||
|
|
||||||
if (!(mods & GLFW_MOD_CONTROL) && !(mods & GLFW_MOD_ALT))
|
if (!(mods & GLFW_MOD_CONTROL) && !(mods & GLFW_MOD_ALT))
|
||||||
_glfwInputChar(window, translateChar(&event->xkey));
|
_glfwInputChar(window, translateChar(&event->xkey));
|
||||||
@ -528,7 +528,7 @@ static void processEvent(XEvent *event)
|
|||||||
const int key = translateKey(event->xkey.keycode);
|
const int key = translateKey(event->xkey.keycode);
|
||||||
const int mods = translateState(event->xkey.state);
|
const int mods = translateState(event->xkey.state);
|
||||||
|
|
||||||
_glfwInputKey(window, key, GLFW_RELEASE, mods);
|
_glfwInputKey(window, key, event->xkey.keycode, GLFW_RELEASE, mods);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,7 +74,7 @@ static void cursor_position_callback(GLFWwindow* window, double x, double y)
|
|||||||
cursor_y = y;
|
cursor_y = y;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void key_callback(GLFWwindow* window, int key, int action, int mods)
|
static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
|
||||||
{
|
{
|
||||||
if (key == GLFW_KEY_SPACE && action == GLFW_PRESS)
|
if (key == GLFW_KEY_SPACE && action == GLFW_PRESS)
|
||||||
set_swap_interval(window, 1 - swap_interval);
|
set_swap_interval(window, 1 - swap_interval);
|
||||||
|
@ -44,7 +44,7 @@ static void error_callback(int error, const char* description)
|
|||||||
fprintf(stderr, "Error: %s\n", description);
|
fprintf(stderr, "Error: %s\n", description);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void key_callback(GLFWwindow* window, int key, int action, int mods)
|
static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
|
||||||
{
|
{
|
||||||
if (action != GLFW_PRESS)
|
if (action != GLFW_PRESS)
|
||||||
return;
|
return;
|
||||||
|
@ -172,6 +172,7 @@ static const char* get_key_name(int key)
|
|||||||
case GLFW_KEY_LEFT_SUPER: return "LEFT SUPER";
|
case GLFW_KEY_LEFT_SUPER: return "LEFT SUPER";
|
||||||
case GLFW_KEY_RIGHT_SUPER: return "RIGHT SUPER";
|
case GLFW_KEY_RIGHT_SUPER: return "RIGHT SUPER";
|
||||||
case GLFW_KEY_MENU: return "MENU";
|
case GLFW_KEY_MENU: return "MENU";
|
||||||
|
case GLFW_KEY_UNKNOWN: return "UNKNOWN";
|
||||||
|
|
||||||
default: return NULL;
|
default: return NULL;
|
||||||
}
|
}
|
||||||
@ -339,11 +340,12 @@ static void scroll_callback(GLFWwindow* window, double x, double y)
|
|||||||
printf("%08x at %0.3f: Scroll: %0.3f %0.3f\n", counter++, glfwGetTime(), x, y);
|
printf("%08x at %0.3f: Scroll: %0.3f %0.3f\n", counter++, glfwGetTime(), x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void key_callback(GLFWwindow* window, int key, int action, int mods)
|
static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
|
||||||
{
|
{
|
||||||
const char* name = get_key_name(key);
|
const char* name = get_key_name(key);
|
||||||
|
|
||||||
printf("%08x at %0.3f: Key 0x%04x", counter++, glfwGetTime(), key);
|
printf("%08x at %0.3f: Key 0x%04x Scancode 0x%04x",
|
||||||
|
counter++, glfwGetTime(), key, scancode);
|
||||||
|
|
||||||
if (name)
|
if (name)
|
||||||
printf(" (%s)", name);
|
printf(" (%s)", name);
|
||||||
|
@ -48,7 +48,7 @@ static void framebuffer_size_callback(GLFWwindow* window, int width, int height)
|
|||||||
glViewport(0, 0, width, height);
|
glViewport(0, 0, width, height);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void key_callback(GLFWwindow* window, int key, int action, int mods)
|
static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
|
||||||
{
|
{
|
||||||
if (action != GLFW_PRESS)
|
if (action != GLFW_PRESS)
|
||||||
return;
|
return;
|
||||||
|
@ -60,7 +60,7 @@ static void error_callback(int error, const char* description)
|
|||||||
fprintf(stderr, "Error: %s\n", description);
|
fprintf(stderr, "Error: %s\n", description);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void key_callback(GLFWwindow* window, int key, int action, int mods)
|
static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
|
||||||
{
|
{
|
||||||
if (action != GLFW_PRESS)
|
if (action != GLFW_PRESS)
|
||||||
return;
|
return;
|
||||||
|
@ -45,7 +45,7 @@ static void error_callback(int error, const char* description)
|
|||||||
fprintf(stderr, "Error: %s\n", description);
|
fprintf(stderr, "Error: %s\n", description);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void key_callback(GLFWwindow* window, int key, int action, int mods)
|
static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
|
||||||
{
|
{
|
||||||
printf("%0.2f Key %s\n",
|
printf("%0.2f Key %s\n",
|
||||||
glfwGetTime(),
|
glfwGetTime(),
|
||||||
|
@ -74,7 +74,7 @@ static void framebuffer_size_callback(GLFWwindow* window, int width, int height)
|
|||||||
glViewport(0, 0, width, height);
|
glViewport(0, 0, width, height);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void key_callback(GLFWwindow* window, int key, int action, int mods)
|
static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
|
||||||
{
|
{
|
||||||
if (key == GLFW_KEY_ESCAPE)
|
if (key == GLFW_KEY_ESCAPE)
|
||||||
glfwSetWindowShouldClose(window, GL_TRUE);
|
glfwSetWindowShouldClose(window, GL_TRUE);
|
||||||
|
@ -65,7 +65,7 @@ static void cursor_position_callback(GLFWwindow* window, double x, double y)
|
|||||||
cursor_y = y;
|
cursor_y = y;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void key_callback(GLFWwindow* window, int key, int action, int mods)
|
static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
|
||||||
{
|
{
|
||||||
switch (key)
|
switch (key)
|
||||||
{
|
{
|
||||||
|
@ -54,7 +54,7 @@ static void window_close_callback(GLFWwindow* window)
|
|||||||
printf("Close callback triggered\n");
|
printf("Close callback triggered\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void key_callback(GLFWwindow* window, int key, int action, int mods)
|
static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
|
||||||
{
|
{
|
||||||
if (action != GLFW_PRESS)
|
if (action != GLFW_PRESS)
|
||||||
return;
|
return;
|
||||||
|
@ -44,7 +44,7 @@ static void error_callback(int error, const char* description)
|
|||||||
fprintf(stderr, "Error: %s\n", description);
|
fprintf(stderr, "Error: %s\n", description);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void key_callback(GLFWwindow* window, int key, int action, int mods)
|
static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
|
||||||
{
|
{
|
||||||
if (action == GLFW_PRESS && key == GLFW_KEY_ESCAPE)
|
if (action == GLFW_PRESS && key == GLFW_KEY_ESCAPE)
|
||||||
glfwSetWindowShouldClose(window, GL_TRUE);
|
glfwSetWindowShouldClose(window, GL_TRUE);
|
||||||
|
@ -64,7 +64,7 @@ static void framebuffer_size_callback(GLFWwindow* window, int width, int height)
|
|||||||
glViewport(0, 0, width, height);
|
glViewport(0, 0, width, height);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void key_callback(GLFWwindow* window, int key, int action, int mods)
|
static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
|
||||||
{
|
{
|
||||||
if (key == GLFW_KEY_SPACE && action == GLFW_PRESS)
|
if (key == GLFW_KEY_SPACE && action == GLFW_PRESS)
|
||||||
set_swap_interval(window, 1 - swap_interval);
|
set_swap_interval(window, 1 - swap_interval);
|
||||||
|
Loading…
Reference in New Issue
Block a user