Skip to content
Open
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 7 additions & 32 deletions jme3-lwjgl3/src/main/java/com/jme3/input/lwjgl/SdlKeyInput.java
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,6 @@ public void initialize() {
if (!context.isRenderable()) {
return;
}
// Text input events are delivered through SDL_EVENT_TEXT_INPUT.
SDL_StartTextInput(context.getWindowHandle());
initialized = true;
LOGGER.fine("SDL keyboard created.");
}
Expand All @@ -78,7 +76,8 @@ public void resetContext() {
if (!context.isRenderable()) {
return;
}
SDL_StartTextInput(context.getWindowHandle());
// nothing to do here

}

public void onSDLEvent(SDL_Event event) {
Expand All @@ -90,34 +89,13 @@ public void onSDLEvent(SDL_Event event) {
}

final int jmeKey = SdlKeyMap.toJmeKeyCode(key.scancode());
final KeyInputEvent keyEvent = new KeyInputEvent(jmeKey, '\0', key.down(), key.repeat());
final int sdlKey = SDL_GetKeyFromScancode(key.scancode(), key.mod(), true);
final char keyChar = sdlKey > 0 && sdlKey <= Character.MAX_VALUE && !Character.isISOControl((char) sdlKey)
? (char) sdlKey
: '\0';
final KeyInputEvent keyEvent = new KeyInputEvent(jmeKey, keyChar, key.down(), key.repeat());
keyEvent.setTime(key.timestamp());
keyInputEvents.add(keyEvent);
return;
}

if (type == SDL_EVENT_TEXT_INPUT) {
if (event.text().windowID() != context.getWindowId()) {
return;
}

final String text = event.text().textString();
if (text == null || text.isEmpty()) {
return;
}

for (int i = 0; i < text.length(); i++) {
final char keyChar = text.charAt(i);
final long time = event.text().timestamp();

KeyInputEvent pressed = new KeyInputEvent(KeyInput.KEY_UNKNOWN, keyChar, true, false);
pressed.setTime(time);
keyInputEvents.add(pressed);

KeyInputEvent released = new KeyInputEvent(KeyInput.KEY_UNKNOWN, keyChar, false, false);
released.setTime(time);
keyInputEvents.add(released);
}
}
}

Expand Down Expand Up @@ -146,9 +124,6 @@ public void update() {

@Override
public void destroy() {
if (context.isRenderable()) {
SDL_StopTextInput(context.getWindowHandle());
}
keyInputEvents.clear();
initialized = false;
LOGGER.fine("SDL keyboard destroyed.");
Expand Down
Loading