2013-05-03 14:36:17 +00:00
/*
2013-06-15 11:37:22 +00:00
* This file is subject to the terms of the GFX License . If a copy of
2013-05-03 14:36:17 +00:00
* the license was not distributed with this file , you can obtain one at :
*
2013-07-21 20:20:37 +00:00
* http : //ugfx.org/license.html
2013-05-03 14:36:17 +00:00
*/
2013-05-06 04:44:47 +00:00
/**
2014-08-20 07:42:53 +00:00
* @ file src / ginput / ginput_keyboard . h
2013-05-06 04:44:47 +00:00
* @ brief GINPUT GFX User Input subsystem header file .
*
* @ defgroup Keyboard Keyboard
* @ ingroup GINPUT
* @ {
*/
# ifndef _GINPUT_KEYBOARD_H
# define _GINPUT_KEYBOARD_H
# if GINPUT_NEED_KEYBOARD || defined(__DOXYGEN__)
/*===========================================================================*/
/* Type definitions */
/*===========================================================================*/
# define GINPUT_KEYBOARD_NUM_PORTS 1 // The total number of keyboard inputs
// Event types for various ginput sources
# define GEVENT_KEYBOARD (GEVENT_GINPUT_FIRST+2)
typedef struct GEventKeyboard_t {
GEventType type ; // The type of this event (GEVENT_KEYBOARD)
uint16_t instance ; // The keyboard instance
2014-08-23 03:00:10 +00:00
char c ; // The ASCII code for the current key press.
2013-05-06 04:44:47 +00:00
// The only possible values are 0(NUL), 8(BS), 9(TAB), 13(CR), 27(ESC), 32(SPACE) to 126(~), 127(DEL)
// 0 indicates an extended only key.
2014-08-23 03:00:10 +00:00
uint16_t code ; // An extended keyboard code. Codes less than 128 match their ASCII equivalent.
2013-05-06 04:44:47 +00:00
# define GKEY_NULL 0
# define GKEY_BACKSPACE 8
# define GKEY_TAB 9
# define GKEY_CR 13
# define GKEY_ESC 27
# define GKEY_SPACE 32
# define GKEY_DEL 127
# define GKEY_UP 0x0101
# define GKEY_DOWN 0x0102
# define GKEY_LEFT 0x0103
# define GKEY_RIGHT 0x0104
# define GKEY_HOME 0x0105
# define GKEY_END 0x0106
# define GKEY_PAGEUP 0x0107
# define GKEY_PAGEDOWN 0x0108
# define GKEY_INSERT 0x0109
# define GKEY_DELETE 0x010A
# define GKEY_SHIFT 0x0201
# define GKEY_CNTRL 0x0202
# define GKEY_ALT 0x0203
# define GKEY_WINKEY 0x0204
# define GKEY_RCLKEY 0x0205
# define GKEY_FNKEY 0x0206
# define GKEY_FN1 0x0301
# define GKEY_FN2 0x0302
# define GKEY_FN3 0x0303
# define GKEY_FN4 0x0304
# define GKEY_FN5 0x0305
# define GKEY_FN6 0x0306
# define GKEY_FN7 0x0307
# define GKEY_FN8 0x0308
# define GKEY_FN9 0x0309
# define GKEY_FN10 0x030A
# define GKEY_FN11 0x030B
# define GKEY_FN12 0x030C
uint16_t current_buttons ; // A bit is set to indicate various meta status.
# define GMETA_KEY_DOWN 0x0001
# define GMETA_KEY_SHIFT 0x0002
# define GMETA_KEY_CNTRL 0x0004
# define GMETA_KEY_ALT 0x0008
# define GMETA_KEY_WINKEY 0x0010
# define GMETA_KEY_RCLKKEY 0x0020
# define GMETA_KEY_FN 0x0040
# define GMETA_KEY_MISSED_EVENT 0x8000
uint16_t last_buttons ; // The value of current_buttons on the last event
} GEventKeyboard ;
// Keyboard Listen Flags - passed to geventAddSourceToListener()
# define GLISTEN_KEYREPEATS 0x0001 // Return key repeats (where the key is held down to get a repeat character)
# define GLISTEN_KEYCODES 0x0002 // Return all key presses including extended code key presses (not just ascii codes)
# define GLISTEN_KEYALL 0x0004 // Return keyup's, keydown's and everything in between (but not repeats unless GLISTEN_KEYREPEATS is set).
# define GLISTEN_KEYSINGLE 0x8000 // Return only when one particular extended code key is pressed or released. The particular extended code is OR'd into this value
// eg. (GLISTEN_KEYSINGLE | GKEY_CR)
// No other flags may be set with this flag.
/*===========================================================================*/
/* External declarations. */
/*===========================================================================*/
# ifdef __cplusplus
extern " C " {
# endif
/**
* @ brief Create a keyboard input instance
*
* @ param [ in ] instance The ID of the keyboard input instance ( from 0 to 9999 )
*
* @ return The source handle of the created input instance
*/
GSourceHandle ginputGetKeyboard ( uint16_t instance ) ;
/**
* @ brief Get the current keyboard status
*
* @ param [ in ] instance The ID of the keyboard input instance
* @ param [ in ] pkeyboard The keyboard event struct
*
* @ return Returns FALSE on an error ( eg invalid instance )
*/
bool_t ginputGetKeyboardStatus ( uint16_t instance , GEventKeyboard * pkeyboard ) ;
# ifdef __cplusplus
}
# endif
# endif /* GINPUT_NEED_KEYBOARD */
# endif /* _GINPUT_KEYBOARD_H */
/** @} */