Compare commits
3 commits
master
...
feature/mo
Author | SHA1 | Date | |
---|---|---|---|
![]() |
50341ac3b4 | ||
![]() |
4a12244aab | ||
![]() |
f037c2775b |
|
@ -133,6 +133,12 @@ public:
|
||||||
Numpad7, ///< The numpad 7 key
|
Numpad7, ///< The numpad 7 key
|
||||||
Numpad8, ///< The numpad 8 key
|
Numpad8, ///< The numpad 8 key
|
||||||
Numpad9, ///< The numpad 9 key
|
Numpad9, ///< The numpad 9 key
|
||||||
|
NumpadReturn, ///< The numpad Return key.
|
||||||
|
NumpadComma, ///< The numpad Comma key.
|
||||||
|
NumLock, ///< The Numlock key.
|
||||||
|
CapsLock, ///< The Caps Lock key.
|
||||||
|
ScrollLock, ///< The Scroll Lock key.
|
||||||
|
PrintScreen, ///< The Print Screen key.
|
||||||
F1, ///< The F1 key
|
F1, ///< The F1 key
|
||||||
F2, ///< The F2 key
|
F2, ///< The F2 key
|
||||||
F3, ///< The F3 key
|
F3, ///< The F3 key
|
||||||
|
|
|
@ -247,6 +247,8 @@ namespace
|
||||||
case XK_Control_L: return sf::Keyboard::LControl;
|
case XK_Control_L: return sf::Keyboard::LControl;
|
||||||
case XK_Control_R: return sf::Keyboard::RControl;
|
case XK_Control_R: return sf::Keyboard::RControl;
|
||||||
case XK_Alt_L: return sf::Keyboard::LAlt;
|
case XK_Alt_L: return sf::Keyboard::LAlt;
|
||||||
|
case XK_ISO_Level3_Shift:
|
||||||
|
case XK_Mode_switch:
|
||||||
case XK_Alt_R: return sf::Keyboard::RAlt;
|
case XK_Alt_R: return sf::Keyboard::RAlt;
|
||||||
case XK_Super_L: return sf::Keyboard::LSystem;
|
case XK_Super_L: return sf::Keyboard::LSystem;
|
||||||
case XK_Super_R: return sf::Keyboard::RSystem;
|
case XK_Super_R: return sf::Keyboard::RSystem;
|
||||||
|
@ -265,7 +267,7 @@ namespace
|
||||||
case XK_grave: return sf::Keyboard::Tilde;
|
case XK_grave: return sf::Keyboard::Tilde;
|
||||||
case XK_space: return sf::Keyboard::Space;
|
case XK_space: return sf::Keyboard::Space;
|
||||||
case XK_Return: return sf::Keyboard::Return;
|
case XK_Return: return sf::Keyboard::Return;
|
||||||
case XK_KP_Enter: return sf::Keyboard::Return;
|
case XK_KP_Enter: return sf::Keyboard::NumpadReturn;
|
||||||
case XK_BackSpace: return sf::Keyboard::BackSpace;
|
case XK_BackSpace: return sf::Keyboard::BackSpace;
|
||||||
case XK_Tab: return sf::Keyboard::Tab;
|
case XK_Tab: return sf::Keyboard::Tab;
|
||||||
case XK_Prior: return sf::Keyboard::PageUp;
|
case XK_Prior: return sf::Keyboard::PageUp;
|
||||||
|
@ -344,6 +346,11 @@ namespace
|
||||||
case XK_7: return sf::Keyboard::Num7;
|
case XK_7: return sf::Keyboard::Num7;
|
||||||
case XK_8: return sf::Keyboard::Num8;
|
case XK_8: return sf::Keyboard::Num8;
|
||||||
case XK_9: return sf::Keyboard::Num9;
|
case XK_9: return sf::Keyboard::Num9;
|
||||||
|
case XK_KP_Separator: return sf::Keyboard::NumpadComma;
|
||||||
|
case XK_Num_Lock: return sf::Keyboard::NumLock;
|
||||||
|
case XK_Caps_Lock: return sf::Keyboard::CapsLock;
|
||||||
|
case XK_Scroll_Lock: return sf::Keyboard::ScrollLock;
|
||||||
|
case XK_Print: return sf::Keyboard::PrintScreen;
|
||||||
}
|
}
|
||||||
|
|
||||||
return sf::Keyboard::Unknown;
|
return sf::Keyboard::Unknown;
|
||||||
|
@ -1757,17 +1764,23 @@ bool WindowImplX11::processEvent(XEvent windowEvent)
|
||||||
// Key down event
|
// Key down event
|
||||||
case KeyPress:
|
case KeyPress:
|
||||||
{
|
{
|
||||||
// Get the keysym of the key that has been pressed
|
Keyboard::Key key = Keyboard::Unknown;
|
||||||
static XComposeStatus keyboard;
|
|
||||||
char buffer[32];
|
// Try each KeySym index (modifier group) until we get a match
|
||||||
KeySym symbol;
|
for (int i = 0; i < 4; ++i)
|
||||||
XLookupString(&windowEvent.xkey, buffer, sizeof(buffer), &symbol, &keyboard);
|
{
|
||||||
|
// Get the SFML keyboard code from the keysym of the key that has been pressed
|
||||||
|
key = keysymToSF(XLookupKeysym(&windowEvent.xkey, i));
|
||||||
|
|
||||||
|
if (key != Keyboard::Unknown)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
// Fill the event parameters
|
// Fill the event parameters
|
||||||
// TODO: if modifiers are wrong, use XGetModifierMapping to retrieve the actual modifiers mapping
|
// TODO: if modifiers are wrong, use XGetModifierMapping to retrieve the actual modifiers mapping
|
||||||
Event event;
|
Event event;
|
||||||
event.type = Event::KeyPressed;
|
event.type = Event::KeyPressed;
|
||||||
event.key.code = keysymToSF(symbol);
|
event.key.code = key;
|
||||||
event.key.alt = windowEvent.xkey.state & Mod1Mask;
|
event.key.alt = windowEvent.xkey.state & Mod1Mask;
|
||||||
event.key.control = windowEvent.xkey.state & ControlMask;
|
event.key.control = windowEvent.xkey.state & ControlMask;
|
||||||
event.key.shift = windowEvent.xkey.state & ShiftMask;
|
event.key.shift = windowEvent.xkey.state & ShiftMask;
|
||||||
|
@ -1826,15 +1839,22 @@ bool WindowImplX11::processEvent(XEvent windowEvent)
|
||||||
// Key up event
|
// Key up event
|
||||||
case KeyRelease:
|
case KeyRelease:
|
||||||
{
|
{
|
||||||
// Get the keysym of the key that has been pressed
|
Keyboard::Key key = Keyboard::Unknown;
|
||||||
char buffer[32];
|
|
||||||
KeySym symbol;
|
// Try each KeySym index (modifier group) until we get a match
|
||||||
XLookupString(&windowEvent.xkey, buffer, 32, &symbol, NULL);
|
for (int i = 0; i < 4; ++i)
|
||||||
|
{
|
||||||
|
// Get the SFML keyboard code from the keysym of the key that has been released
|
||||||
|
key = keysymToSF(XLookupKeysym(&windowEvent.xkey, i));
|
||||||
|
|
||||||
|
if (key != Keyboard::Unknown)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
// Fill the event parameters
|
// Fill the event parameters
|
||||||
Event event;
|
Event event;
|
||||||
event.type = Event::KeyReleased;
|
event.type = Event::KeyReleased;
|
||||||
event.key.code = keysymToSF(symbol);
|
event.key.code = key;
|
||||||
event.key.alt = windowEvent.xkey.state & Mod1Mask;
|
event.key.alt = windowEvent.xkey.state & Mod1Mask;
|
||||||
event.key.control = windowEvent.xkey.state & ControlMask;
|
event.key.control = windowEvent.xkey.state & ControlMask;
|
||||||
event.key.shift = windowEvent.xkey.state & ShiftMask;
|
event.key.shift = windowEvent.xkey.state & ShiftMask;
|
||||||
|
|
Loading…
Reference in a new issue