solve keymod problem
This commit is contained in:
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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 );
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user