Made the AWT setCursorPosition garbage free

This commit is contained in:
Elias Naur 2006-10-27 06:04:55 +00:00
parent 23248b01c3
commit d4d39bf869
3 changed files with 17 additions and 5 deletions

View File

@ -92,18 +92,25 @@ final class AWTUtil {
}
}
public static void setCursorPosition(final Component component, int x, int y) {
public static Robot createRobot(final Component component) {
try {
Robot robot = (Robot)AccessController.doPrivileged(new PrivilegedExceptionAction() {
public Object run() throws Exception {
return new Robot(component.getGraphicsConfiguration().getDevice());
}
});
return robot;
} catch (PrivilegedActionException e) {
LWJGLUtil.log("Got exception while creating robot: " + e.getCause());
return null;
}
}
public static void setCursorPosition(Component component, Robot robot, int x, int y) {
if (robot != null) {
int transformed_x = component.getX() + x;
int transformed_y = component.getY() + component.getHeight() - 1 - y;
robot.mouseMove(transformed_x, transformed_y);
} catch (PrivilegedActionException e) {
LWJGLUtil.log("Got exception while setting mouse cursor position: " + e);
}
}

View File

@ -38,6 +38,7 @@ import org.lwjgl.LWJGLException;
import org.lwjgl.LWJGLUtil;
import java.awt.Cursor;
import java.awt.Robot;
/**
*
@ -47,6 +48,7 @@ import java.awt.Cursor;
*/
abstract class AbstractAWTInput implements AWTCanvasInputImplementation {
private AWTGLCanvas canvas;
private Robot robot;
private KeyboardEventQueue keyboard_queue;
private MouseEventQueue mouse_queue;
@ -54,6 +56,7 @@ abstract class AbstractAWTInput implements AWTCanvasInputImplementation {
protected AbstractAWTInput(AWTGLCanvas canvas) {
this.canvas = canvas;
this.robot = AWTUtil.createRobot(canvas);
}
protected synchronized MouseEventQueue getMouseEventQueue() {
@ -117,7 +120,7 @@ abstract class AbstractAWTInput implements AWTCanvasInputImplementation {
}
public void setCursorPosition(int x, int y) {
AWTUtil.setCursorPosition(canvas, x, y);
AWTUtil.setCursorPosition(canvas, robot, x, y);
}
public void setNativeCursor(Object handle) throws LWJGLException {

View File

@ -69,6 +69,7 @@ final class MacOSXDisplay implements DisplayImplementation {
private static final int GAMMA_LENGTH = 256;
private MacOSXFrame frame;
private Robot robot;
private MacOSXMouseEventQueue mouse_queue;
private KeyboardEventQueue keyboard_queue;
private java.awt.DisplayMode requested_mode;
@ -85,6 +86,7 @@ final class MacOSXDisplay implements DisplayImplementation {
close_requested = false;
try {
frame = new MacOSXFrame(mode, requested_mode, fullscreen, x, y);
robot = AWTUtil.createRobot(frame);
} catch (LWJGLException e) {
destroyWindow();
throw e;
@ -319,7 +321,7 @@ final class MacOSXDisplay implements DisplayImplementation {
}
public void setCursorPosition(int x, int y) {
AWTUtil.setCursorPosition(frame, x, y);
AWTUtil.setCursorPosition(frame, robot, x, y);
}
public void setNativeCursor(Object handle) throws LWJGLException {