Browse Source

Merge pull request #369 from dariomanesku/master

Fixing SDL char input.
Branimir Karadžić 10 years ago
parent
commit
b29e2290ac
1 changed files with 16 additions and 8 deletions
  1. 16 8
      examples/common/entry/entry_sdl.cpp

+ 16 - 8
examples/common/entry/entry_sdl.cpp

@@ -451,20 +451,28 @@ namespace entry
 								uint8_t modifiers = translateKeyModifiers(kev.keysym.mod);
 								Key::Enum key = translateKey(kev.keysym.scancode);
 
-								const uint8_t shiftMask = Modifier::LeftShift|Modifier::RightShift;
-								const bool nonShiftModifiers = (0 != (modifiers&(~shiftMask) ) );
-								const bool isCharPressed = (Key::Key0 <= key && key <= Key::KeyZ) || (Key::Esc <= key && key <= Key::Minus);
-								const bool isText = isCharPressed && !nonShiftModifiers;
-
-								if (isText)
+								// TODO: These keys are not captured by SDL_TEXTINPUT. Should be probably handled by SDL_TEXTEDITING. This is a workaround for now.
+								if (key == 1) // Escape
+								{
+									uint8_t pressedChar[4];
+									pressedChar[0] = 0x1b;
+									m_eventQueue.postCharEvent(handle, 1, pressedChar);
+								}
+								else if (key == 2) // Enter
+								{
+									uint8_t pressedChar[4];
+									pressedChar[0] = 0x0d;
+									m_eventQueue.postCharEvent(handle, 1, pressedChar);
+								}
+								else if (key == 5) // Backspace
 								{
 									uint8_t pressedChar[4];
-									pressedChar[0] = keyToAscii(key, modifiers);
+									pressedChar[0] = 0x08;
 									m_eventQueue.postCharEvent(handle, 1, pressedChar);
 								}
 								else
 								{
-									m_eventQueue.postKeyEvent(handle, key, modifiers, kev.state == SDL_PRESSED);
+								    m_eventQueue.postKeyEvent(handle, key, modifiers, kev.state == SDL_PRESSED);
 								}
 							}
 						}