mirror of
https://github.com/moonlight-stream/moonlight-embedded.git
synced 2026-02-16 10:30:47 +00:00
added support for *almost* every key
This commit is contained in:
@@ -15,6 +15,7 @@ public class Limelight implements NvConnectionListener {
|
||||
private String host;
|
||||
private StreamFrame streamFrame;
|
||||
private NvConnection conn;
|
||||
private boolean connectionFailed;
|
||||
|
||||
public Limelight(String host) {
|
||||
this.host = host;
|
||||
@@ -80,8 +81,11 @@ public class Limelight implements NvConnectionListener {
|
||||
@Override
|
||||
public void connectionTerminated(Exception e) {
|
||||
e.printStackTrace();
|
||||
JOptionPane.showMessageDialog(streamFrame, "The connection failed unexpectedly", "Connection Terminated", JOptionPane.ERROR_MESSAGE);
|
||||
conn.stop();
|
||||
if (!connectionFailed) {
|
||||
connectionFailed = true;
|
||||
JOptionPane.showMessageDialog(streamFrame, "The connection failed unexpectedly", "Connection Terminated", JOptionPane.ERROR_MESSAGE);
|
||||
conn.stop();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -26,6 +26,8 @@ public class StreamFrame extends JFrame {
|
||||
this.addMouseListener(mouse);
|
||||
this.addMouseMotionListener(mouse);
|
||||
|
||||
this.setFocusTraversalKeysEnabled(false);
|
||||
|
||||
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
|
||||
this.setSize(1280,720);
|
||||
//This might break if the screen res is too small...not sure though
|
||||
|
||||
@@ -4,6 +4,7 @@ import java.awt.event.KeyEvent;
|
||||
import java.awt.event.KeyListener;
|
||||
|
||||
import com.limelight.nvstream.NvConnection;
|
||||
import com.limelight.nvstream.input.KeyboardPacket;
|
||||
|
||||
public class KeyboardHandler implements KeyListener {
|
||||
|
||||
@@ -16,13 +17,41 @@ public class KeyboardHandler implements KeyListener {
|
||||
@Override
|
||||
public void keyPressed(KeyEvent event) {
|
||||
short keyMap = translator.translate(event.getKeyCode());
|
||||
translator.sendKeyDown(keyMap);
|
||||
|
||||
byte modifier = 0x0;
|
||||
|
||||
int modifiers = event.getModifiersEx();
|
||||
if ((modifiers & KeyEvent.SHIFT_DOWN_MASK) != 0) {
|
||||
modifier |= KeyboardPacket.MODIFIER_SHIFT;
|
||||
}
|
||||
if ((modifiers & KeyEvent.CTRL_DOWN_MASK) != 0) {
|
||||
modifier |= KeyboardPacket.MODIFIER_CTRL;
|
||||
}
|
||||
if ((modifiers & KeyEvent.ALT_DOWN_MASK) != 0) {
|
||||
modifier |= KeyboardPacket.MODIFIER_ALT;
|
||||
}
|
||||
|
||||
translator.sendKeyDown(keyMap, modifier);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void keyReleased(KeyEvent event) {
|
||||
short keyMap = translator.translate(event.getKeyCode());
|
||||
translator.sendKeyUp(keyMap);
|
||||
|
||||
byte modifier = 0x0;
|
||||
|
||||
int modifiers = event.getModifiersEx();
|
||||
if ((modifiers & KeyEvent.SHIFT_DOWN_MASK) != 0) {
|
||||
modifier |= KeyboardPacket.MODIFIER_SHIFT;
|
||||
}
|
||||
if ((modifiers & KeyEvent.CTRL_DOWN_MASK) != 0) {
|
||||
modifier |= KeyboardPacket.MODIFIER_CTRL;
|
||||
}
|
||||
if ((modifiers & KeyEvent.ALT_DOWN_MASK) != 0) {
|
||||
modifier |= KeyboardPacket.MODIFIER_ALT;
|
||||
}
|
||||
|
||||
translator.sendKeyUp(keyMap, modifier);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -7,7 +7,7 @@ import com.limelight.nvstream.input.KeycodeTranslator;
|
||||
|
||||
public class KeyboardTranslator extends KeycodeTranslator {
|
||||
|
||||
public static final short KEYCODE_A = (short) 0x8041;
|
||||
public static final short KEY_PREFIX = (short) 0x80;
|
||||
|
||||
public KeyboardTranslator(NvConnection conn) {
|
||||
super(conn);
|
||||
@@ -15,10 +15,22 @@ public class KeyboardTranslator extends KeycodeTranslator {
|
||||
|
||||
@Override
|
||||
public short translate(int keycode) {
|
||||
if (keycode >= KeyEvent.VK_A && keycode <= KeyEvent.VK_Z) {
|
||||
return (short) (KEYCODE_A + (short)(keycode - KeyEvent.VK_A));
|
||||
// change newline to carriage return
|
||||
if (keycode == KeyEvent.VK_ENTER) {
|
||||
keycode = 0x0d;
|
||||
}
|
||||
return 0;
|
||||
|
||||
// period maps to delete by default so we remap it
|
||||
if (keycode == KeyEvent.VK_PERIOD) {
|
||||
keycode = 0xbe;
|
||||
}
|
||||
|
||||
// Nvidia maps period to delete
|
||||
if (keycode == KeyEvent.VK_DELETE) {
|
||||
keycode = KeyEvent.VK_PERIOD;
|
||||
}
|
||||
|
||||
return (short) ((KEY_PREFIX << 8) | keycode);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -51,13 +51,11 @@ public class MouseHandler implements MouseListener, MouseMotionListener {
|
||||
@Override
|
||||
public void mousePressed(MouseEvent e) {
|
||||
conn.sendMouseButtonDown();
|
||||
e.consume();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseReleased(MouseEvent e) {
|
||||
conn.sendMouseButtonUp();
|
||||
e.consume();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -72,7 +70,6 @@ public class MouseHandler implements MouseListener, MouseMotionListener {
|
||||
conn.sendMouseMove((short)(x - lastX), (short)(y - lastY));
|
||||
lastX = x;
|
||||
lastY = y;
|
||||
e.consume();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user