Skip to content

Commit

Permalink
Fix repeating pressed events on keyboard input
Browse files Browse the repository at this point in the history
  • Loading branch information
usernameak committed Nov 16, 2024
1 parent 9fa1bea commit 2898aed
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 2 deletions.
4 changes: 4 additions & 0 deletions src/main/java/javax/microedition/lcdui/Canvas.java
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,10 @@ public static void emitKeyPressed(Canvas canvas, int keyCode) {
canvas.keyPressed(keyCode);
}

public static void emitKeyRepeated(Canvas canvas, int keyCode) {
canvas.keyRepeated(keyCode);
}

public static void emitKeyReleased(Canvas canvas, int keyCode) {
canvas.keyReleased(keyCode);
}
Expand Down
1 change: 1 addition & 0 deletions src/main/java/net/sktemu/ams/AppInstance.java
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,7 @@ public void onShutdown() {
public abstract boolean shutdown();

public abstract void keyPressed(int keyCode);
public abstract void keyRepeated(int keyCode);
public abstract void keyReleased(int keyCode);

public abstract AmsClassLoader getClassLoader();
Expand Down
8 changes: 8 additions & 0 deletions src/main/java/net/sktemu/ams/skvm/SkvmAppInstance.java
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,14 @@ public void keyPressed(int keyCode) {
});
}

@Override
public void keyRepeated(int keyCode) {
runOnAppThread(() -> {
Canvas canvas = (Canvas) display.getCurrent();
Canvas.emitKeyRepeated(canvas, keyCode);
});
}

@Override
public void keyReleased(int keyCode) {
runOnAppThread(() -> {
Expand Down
12 changes: 10 additions & 2 deletions src/main/java/net/sktemu/ui/EmuUIFrame.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,20 @@
import net.sktemu.ams.AppInstance;
import net.sktemu.ams.AppModel;

import javax.microedition.lcdui.Canvas;
import javax.swing.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.HashSet;

public class EmuUIFrame extends JFrame {
private final EmuCanvas canvas;

private AppInstance appInstance;

private HashSet<Integer> pressedKeys = new HashSet<Integer>();

public EmuUIFrame(AppModel appModel) {
setTitle("SKTemu \u2013 " + appModel.getAppTitle());

Expand Down Expand Up @@ -47,7 +49,12 @@ public void keyPressed(KeyEvent e) {
Integer keyCode = KeyMappings.keyMappings.get(e.getKeyCode());

if (keyCode != null) {
appInstance.keyPressed(keyCode);
if (!pressedKeys.contains(keyCode)) {
pressedKeys.add(keyCode);
appInstance.keyPressed(keyCode);
} else {
appInstance.keyRepeated(keyCode);
}
}
}

Expand All @@ -56,6 +63,7 @@ public void keyReleased(KeyEvent e) {
Integer keyCode = KeyMappings.keyMappings.get(e.getKeyCode());

if (keyCode != null) {
pressedKeys.remove(keyCode);
appInstance.keyReleased(keyCode);
}
}
Expand Down

0 comments on commit 2898aed

Please sign in to comment.