solve keymod problem

This commit is contained in:
Benjamin Kyd
2022-05-18 00:48:00 +01:00
parent f2a4d7d75f
commit 7e635a031c
4 changed files with 38 additions and 65 deletions

View File

@@ -52,7 +52,7 @@ namespace Aeon::Core {
* MOUSE_SCROLL - y+-
* MOUSE_MOVE - move to x, y relative dx, dy
* ENGINE_INPUT_KEYBOARD
* KEYBOARD_KEYDOWN - keycode
* KEYBOARD_KEYDOWN - keycode
* KEYBOARD_KEYUP - keycode
* KEYBOARD_KEYPRESS - keycode for continual pressing
*/
@@ -60,18 +60,22 @@ namespace Aeon::Core {
struct GenericEvent
{
// always populated
std::string System;
std::string Type;
// the rest can be empty
// user defined
std::string Data;
// DISPLAY_RESIZE DISPLAY_MOVE MOUSE_MOVE
int x, y;
// MOUSE_MOVE
int dx, dy;
// KEYBOARD_KEYDOWN KEYBOARD_KEYUP KEYBOARD_PRESSED
Aeon::Input::EKeyCode keyCode;
uint16_t keyMods;
bool Handled = false;
};

View File

@@ -3,6 +3,8 @@
#include <iostream>
#include <algorithm>
#include <iterator>
#include <bitset>
#include <iomanip>
#include "Aeon/Core/Events.hpp"
#include "Aeon/Input/InputMap.hpp"
@@ -217,7 +219,7 @@ void Input::mPollKeyboard()
{
EKeyCode keycode = KeyCodeFromSDL( mEvent.key.keysym.sym );
Aeon::Core::GenericEvent e;
e.keyCode = keycode;
e.keyCode = KeyCodeFromSDL(keycode);
if ( mEvent.key.state == SDL_PRESSED )
{
e.Type = "KEYBOARD_KEYDOWN";
@@ -226,7 +228,10 @@ void Input::mPollKeyboard()
{
e.Type = "KEYBOARD_KEYUP";
}
std::cout << e.keyCode << " " << mEvent.key.keysym.sym << std::endl;
uint16_t mods = mEvent.key.keysym.mod;
e.keyMods = mods;
mKeyboardEventDispatcher.Dispatch( e );
}

View File

@@ -6,6 +6,22 @@
namespace Aeon::Input
{
enum EModCode {
LCTRL = 0x40,
RCTRL = 0x80,
LSHIFT = 0x1,
RSHIFT = 0x2,
LALT = 0x100,
RALT = 0x200,
LGUI = 0x400,
RGUI = 0x800,
CTRL = LCTRL | RCTRL,
SHIFT = LSHIFT | RSHIFT,
ALT = LALT | RALT,
GUI = LGUI | RGUI
};
enum EKeyCode
{
Unknown = 0,
@@ -153,19 +169,14 @@ enum EKeyCode
KeyPad_Space = SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_SPACE ),
KeyPad_At = SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_KP_AT ),
LCTRL = SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_LCTRL ),
RCTRL = SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_RCTRL ),
LSHIFT = SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_LSHIFT ),
RSHIFT = SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_RSHIFT ),
LALT = SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_LALT ),
RALT = SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_RALT ),
LGUI = SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_LGUI ),
RGUI = SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_RGUI ),
CTRL = LCTRL | RCTRL,
SHIFT = LSHIFT | RSHIFT,
ALT = LALT | RALT,
GUI = LGUI | RGUI
LeftCTRL = SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_LCTRL ),
RightCTRL = SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_RCTRL ),
LeftSHIFT = SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_LSHIFT ),
RightSHIFT = SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_RSHIFT ),
LeftALT = SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_LALT ),
RightALT = SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_RALT ),
LeftGUI = SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_LGUI ),
RightGUI = SDL_SCANCODE_TO_KEYCODE( SDL_SCANCODE_RGUI ),
};
inline EKeyCode KeyCodeFromSDL( SDL_Keycode key )
@@ -178,54 +189,6 @@ inline EKeyCode KeyCodeFromScanCode( SDL_Scancode key )
return KeyCodeFromSDL( SDL_GetKeyFromScancode( key ) );
}
inline EKeyCode KeyCodeFromKeymod( SDL_Keymod key )
{
switch ( key )
{
case KMOD_NONE:
return EKeyCode::Unknown;
break;
case KMOD_LSHIFT:
return EKeyCode::LSHIFT;
break;
case KMOD_RSHIFT:
return EKeyCode::RSHIFT;
break;
case KMOD_LCTRL:
return EKeyCode::LCTRL;
break;
case KMOD_RCTRL:
return EKeyCode::RCTRL;
break;
case KMOD_LALT:
return EKeyCode::LALT;
break;
case KMOD_RALT:
return EKeyCode::RALT;
break;
case KMOD_LGUI:
return EKeyCode::LGUI;
break;
case KMOD_RGUI:
return EKeyCode::RGUI;
break;
case KMOD_CTRL:
return EKeyCode::CTRL;
break;
case KMOD_SHIFT:
return EKeyCode::SHIFT;
break;
case KMOD_ALT:
return EKeyCode::ALT;
break;
case KMOD_GUI:
return EKeyCode::GUI;
break;
default:
return EKeyCode::Unknown;
}
}
}
#endif

View File

@@ -35,7 +35,8 @@ public:
bool EventRecieved( Aeon::Core::GenericEvent& e ) override
{
std::cout << "FROM LEVEL " << e.System << " " << (char)e.keyCode << std::endl;
std::cout << "FROM LEVEL " << e.Type << " " << (char)e.keyCode << std::endl;
return false;
}