fixed mouse derpiness for realz this time

This commit is contained in:
Diego Waxemberg
2013-12-12 23:36:07 -05:00
parent e32e0004b4
commit 50fb8a44cb

View File

@@ -2,12 +2,12 @@ package com.limelight.input;
import java.awt.AWTException; import java.awt.AWTException;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Point;
import java.awt.Robot; import java.awt.Robot;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.awt.event.MouseListener; import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener; import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
import javax.swing.SwingUtilities; import javax.swing.SwingUtilities;
import com.limelight.gui.StreamFrame; import com.limelight.gui.StreamFrame;
@@ -23,6 +23,8 @@ public class MouseHandler implements MouseListener, MouseMotionListener {
private int lastY = 0; private int lastY = 0;
private boolean captureMouse = true; private boolean captureMouse = true;
private final double mouseThresh = 0.45;
public MouseHandler(NvConnection conn, StreamFrame parent) { public MouseHandler(NvConnection conn, StreamFrame parent) {
this.conn = conn; this.conn = conn;
this.parent = parent; this.parent = parent;
@@ -32,7 +34,6 @@ public class MouseHandler implements MouseListener, MouseMotionListener {
e.printStackTrace(); e.printStackTrace();
} }
size = new Dimension(); size = new Dimension();
} }
public void free() { public void free() {
@@ -59,9 +60,7 @@ public class MouseHandler implements MouseListener, MouseMotionListener {
@Override @Override
public void mouseExited(MouseEvent e) { public void mouseExited(MouseEvent e) {
if (captureMouse) { if (captureMouse) {
parent.getSize(size); checkBoundaries(e);
moveMouse((int)parent.getLocationOnScreen().getX() + (size.width/2),
(int)parent.getLocationOnScreen().getY() + (size.height/2));
} }
} }
@@ -121,25 +120,45 @@ public class MouseHandler implements MouseListener, MouseMotionListener {
@Override @Override
public void mouseMoved(MouseEvent e) { public void mouseMoved(MouseEvent e) {
if (captureMouse) { if (captureMouse) {
int x = e.getX(); Point mouse = e.getLocationOnScreen();
int y = e.getY(); int x = (int)mouse.getX();
int y = (int)mouse.getY();
conn.sendMouseMove((short)(x - lastX), (short)(y - lastY)); conn.sendMouseMove((short)(x - lastX), (short)(y - lastY));
lastX = x; lastX = x;
lastY = y; lastY = y;
parent.getSize(size); checkBoundaries(e);
}
}
int leftEdge = (int) parent.getLocationOnScreen().getX(); private void checkBoundaries(MouseEvent e) {
int rightEdge = leftEdge + size.width; parent.getSize(size);
int upperEdge = (int) parent.getLocationOnScreen().getY();
int lowerEdge = upperEdge + size.height;
if (x < leftEdge + 100 || x > rightEdge - 100) { int leftEdge = (int) parent.getLocationOnScreen().getX();
moveMouse((leftEdge+rightEdge)/2, (upperEdge+lowerEdge)/2); int rightEdge = leftEdge + size.width;
} int upperEdge = (int) parent.getLocationOnScreen().getY();
if (y < upperEdge + 100 || y > lowerEdge - 100) { int lowerEdge = upperEdge + size.height;
moveMouse((leftEdge+rightEdge)/2, (upperEdge+lowerEdge)/2);
} Point mouse = e.getLocationOnScreen();
double xThresh = (size.width * mouseThresh);
double yThresh = (size.height * mouseThresh);
int newX = (int)mouse.getX();
int newY = (int)mouse.getY();
boolean shouldMoveMouse = false;
if (mouse.getX() < leftEdge + xThresh || mouse.getX() > rightEdge - xThresh) {
newX = (leftEdge + rightEdge) / 2;
shouldMoveMouse = true;
}
if (mouse.getY() < upperEdge + yThresh || mouse.getY() > lowerEdge - yThresh) {
newY = (upperEdge + lowerEdge) / 2;
shouldMoveMouse = true;
}
if (shouldMoveMouse) {
moveMouse(newX, newY);
} }
} }