From 50f8f78b8d1baa51c9eb6270954d469daddc4d61 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Wed, 3 Sep 2014 22:52:48 -0700 Subject: [PATCH] Add support for vertical mouse scrolling --- .../com/limelight/nvstream/NvConnection.java | 7 ++++ .../nvstream/input/ControllerStream.java | 5 +++ .../nvstream/input/MouseScrollPacket.java | 36 +++++++++++++++++++ 3 files changed, 48 insertions(+) create mode 100644 moonlight-common/src/com/limelight/nvstream/input/MouseScrollPacket.java diff --git a/moonlight-common/src/com/limelight/nvstream/NvConnection.java b/moonlight-common/src/com/limelight/nvstream/NvConnection.java index f60454d8..43acc4f6 100644 --- a/moonlight-common/src/com/limelight/nvstream/NvConnection.java +++ b/moonlight-common/src/com/limelight/nvstream/NvConnection.java @@ -335,4 +335,11 @@ public class NvConnection { inputStream.sendKeyboardInput(keyMap, keyDirection, modifier); } + + public void sendMouseScroll(final byte scrollClicks) { + if (inputStream == null) + return; + + inputStream.sendMouseScroll(scrollClicks); + } } diff --git a/moonlight-common/src/com/limelight/nvstream/input/ControllerStream.java b/moonlight-common/src/com/limelight/nvstream/input/ControllerStream.java index 62850c78..a37f5759 100644 --- a/moonlight-common/src/com/limelight/nvstream/input/ControllerStream.java +++ b/moonlight-common/src/com/limelight/nvstream/input/ControllerStream.java @@ -282,4 +282,9 @@ public class ControllerStream { { queuePacket(new KeyboardPacket(keyMap, keyDirection, modifier)); } + + public void sendMouseScroll(byte scrollClicks) + { + queuePacket(new MouseScrollPacket(scrollClicks)); + } } diff --git a/moonlight-common/src/com/limelight/nvstream/input/MouseScrollPacket.java b/moonlight-common/src/com/limelight/nvstream/input/MouseScrollPacket.java new file mode 100644 index 00000000..0b0218af --- /dev/null +++ b/moonlight-common/src/com/limelight/nvstream/input/MouseScrollPacket.java @@ -0,0 +1,36 @@ +package com.limelight.nvstream.input; + +import java.nio.ByteBuffer; + +public class MouseScrollPacket extends InputPacket { + public static final int PACKET_TYPE = 0xa; + public static final int PAYLOAD_LENGTH = 10; + public static final int PACKET_LENGTH = PAYLOAD_LENGTH + + InputPacket.HEADER_LENGTH; + + short scroll; + + public MouseScrollPacket(byte scrollClicks) + { + super(PACKET_TYPE); + this.scroll = (short)(scrollClicks * 120); + } + + @Override + public byte[] toWire() { + ByteBuffer bb = ByteBuffer.allocate(PACKET_LENGTH); + + bb.put(toWireHeader()); + bb.put((byte) 0x09); + bb.put((byte) 0); + bb.put((byte) 0); + bb.put((byte) 0); + + bb.putShort(scroll); + bb.putShort(scroll); + + bb.putShort((short) 0); + + return bb.array(); + } +}