Exposing entry::KeyState to the user.

This commit is contained in:
Dario Manesku 2014-08-06 01:49:21 +01:00
parent 0baa2d46e6
commit 78ea520d7d
2 changed files with 131 additions and 2 deletions

View file

@ -147,13 +147,123 @@ namespace entry
return result;
}
bool processEvents(uint32_t& _width, uint32_t& _height, uint32_t& _debug, uint32_t& _reset, MouseState* _mouse)
char keyToAscii(entry::Key::Enum _key, bool _shiftModifier)
{
static const char s_keyToAscii[entry::Key::Count] =
{
'\0', // None
0x1b, // Esc
0x0d, // Return
0x09, // Tab
0x20, // Space
0x08, // Backspace
'\0', // Up
'\0', // Down
'\0', // Left
'\0', // Right
'\0', // PageUp
'\0', // PageDown
'\0', // Home
'\0', // End
'\0', // Print
0x3d, // Equals
0x2d, // Minus
'\0', // F1
'\0', // F2
'\0', // F3
'\0', // F4
'\0', // F5
'\0', // F6
'\0', // F7
'\0', // F8
'\0', // F9
'\0', // F10
'\0', // F11
'\0', // F12
0x30, // NumPad0
0x31, // NumPad1
0x32, // NumPad2
0x33, // NumPad3
0x34, // NumPad4
0x35, // NumPad5
0x36, // NumPad6
0x37, // NumPad7
0x38, // NumPad8
0x39, // NumPad9
0x30, // Key0
0x31, // Key1
0x32, // Key2
0x33, // Key3
0x34, // Key4
0x35, // Key5
0x36, // Key6
0x37, // Key7
0x38, // Key8
0x39, // Key9
0x61, // KeyA
0x62, // KeyB
0x63, // KeyC
0x64, // KeyD
0x65, // KeyE
0x66, // KeyF
0x67, // KeyG
0x68, // KeyH
0x69, // KeyI
0x6a, // KeyJ
0x6b, // KeyK
0x6c, // KeyL
0x6d, // KeyM
0x6e, // KeyN
0x6f, // KeyO
0x70, // KeyP
0x71, // KeyQ
0x72, // KeyR
0x73, // KeyS
0x74, // KeyT
0x75, // KeyU
0x76, // KeyV
0x77, // KeyW
0x78, // KeyX
0x79, // KeyY
0x7a, // KeyZ
};
char ascii = s_keyToAscii[_key];
if (_shiftModifier)
{
// Big letters.
if(ascii >= 'a' && ascii <= 'z')
{
ascii += 'A' - 'a';
}
// Special cases.
else if('-' == ascii)
{
ascii = '_';
}
else if ('=' == ascii)
{
ascii = '+';
}
}
return ascii;
}
bool processEvents(uint32_t& _width, uint32_t& _height, uint32_t& _debug, uint32_t& _reset, MouseState* _mouse, KeyState* _keyboard)
{
s_debug = _debug;
s_reset = _reset;
bool mouseLock = inputIsMouseLocked();
if (NULL != _keyboard)
{
_keyboard->m_modifiers = 0;
memset(_keyboard->m_keysDown, 0, sizeof(_keyboard->m_keysDown) );
}
const Event* ev;
do
{
@ -200,6 +310,16 @@ namespace entry
{
const KeyEvent* key = static_cast<const KeyEvent*>(ev);
inputSetKeyState(key->m_key, key->m_modifiers, key->m_down);
if (NULL != _keyboard)
{
_keyboard->m_modifiers |= key->m_modifiers;
if (key->m_down)
{
_keyboard->m_keysDown[key->m_key] = true;
}
}
}
break;

View file

@ -124,6 +124,8 @@ namespace entry
KeyX,
KeyY,
KeyZ,
Count,
};
};
@ -144,7 +146,14 @@ namespace entry
uint8_t m_buttons[entry::MouseButton::Count];
};
bool processEvents(uint32_t& _width, uint32_t& _height, uint32_t& _debug, uint32_t& _reset, MouseState* _mouse = NULL);
struct KeyState
{
uint8_t m_modifiers;
bool m_keysDown[entry::Key::Count];
};
char keyToAscii(entry::Key::Enum _key, bool _shiftModifier);
bool processEvents(uint32_t& _width, uint32_t& _height, uint32_t& _debug, uint32_t& _reset, MouseState* _mouse = NULL, KeyState* _keyboard = NULL);
void setWindowSize(uint32_t _width, uint32_t _height);
bool setWindowTitle(const char* _title);