Made Display.getImplementation package private, and made the input.* packages access it through reflection.
This commit is contained in:
parent
55f67e68cb
commit
ec9b449b78
|
@ -38,7 +38,7 @@ import org.lwjgl.BufferUtils;
|
|||
import org.lwjgl.LWJGLException;
|
||||
import org.lwjgl.LWJGLUtil;
|
||||
import org.lwjgl.Sys;
|
||||
import org.lwjgl.opengl.Display;
|
||||
import org.lwjgl.opengl.DisplayImplementation;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -115,7 +115,7 @@ public class Cursor {
|
|||
* @return the maximum size of a native cursor
|
||||
*/
|
||||
public static int getMinCursorSize() {
|
||||
return Display.getImplementation().getMinCursorSize();
|
||||
return Mouse.getImplementation().getMinCursorSize();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -126,7 +126,7 @@ public class Cursor {
|
|||
* @return the maximum size of a native cursor
|
||||
*/
|
||||
public static int getMaxCursorSize() {
|
||||
return Display.getImplementation().getMaxCursorSize();
|
||||
return Mouse.getImplementation().getMaxCursorSize();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -138,7 +138,7 @@ public class Cursor {
|
|||
* @return A bit mask with native cursor capabilities.
|
||||
*/
|
||||
public static int getCapabilities() {
|
||||
return Display.getImplementation().getNativeCursorCapabilities();
|
||||
return Mouse.getImplementation().getNativeCursorCapabilities();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -164,7 +164,7 @@ public class Cursor {
|
|||
// create our cursor elements
|
||||
cursors = new CursorElement[numImages];
|
||||
for(int i=0; i<numImages; i++) {
|
||||
Object handle = Display.getImplementation().createCursor(width, height, xHotspot, yHotspot, 1, images_copy, null);
|
||||
Object handle = Mouse.getImplementation().createCursor(width, height, xHotspot, yHotspot, 1, images_copy, null);
|
||||
long delay = (delays != null) ? delays.get(i) : 0;
|
||||
long timeout = System.currentTimeMillis();
|
||||
cursors[i] = new CursorElement(handle, delay, timeout);
|
||||
|
@ -175,7 +175,7 @@ public class Cursor {
|
|||
break;
|
||||
case LWJGLUtil.PLATFORM_LINUX:
|
||||
// create our cursor elements
|
||||
Object handle = Display.getImplementation().createCursor(width, height, xHotspot, yHotspot, numImages, images_copy, delays);
|
||||
Object handle = Mouse.getImplementation().createCursor(width, height, xHotspot, yHotspot, numImages, images_copy, delays);
|
||||
CursorElement cursor_element = new CursorElement(handle, -1, -1);
|
||||
cursors = new CursorElement[]{cursor_element};
|
||||
break;
|
||||
|
@ -251,7 +251,7 @@ public class Cursor {
|
|||
}
|
||||
}
|
||||
for(int i=0; i<cursors.length; i++) {
|
||||
Display.getImplementation().destroyCursor(cursors[i].cursorHandle);
|
||||
Mouse.getImplementation().destroyCursor(cursors[i].cursorHandle);
|
||||
}
|
||||
destroyed = true;
|
||||
}
|
||||
|
|
|
@ -42,6 +42,7 @@ import org.lwjgl.BufferUtils;
|
|||
import org.lwjgl.LWJGLException;
|
||||
import org.lwjgl.Sys;
|
||||
import org.lwjgl.opengl.Display;
|
||||
import org.lwjgl.opengl.DisplayImplementation;
|
||||
|
||||
/**
|
||||
* <br>
|
||||
|
@ -263,6 +264,8 @@ public class Keyboard {
|
|||
/** One time initialization */
|
||||
private static boolean initialized;
|
||||
|
||||
private static DisplayImplementation implementation;
|
||||
|
||||
/**
|
||||
* Keyboard cannot be constructed.
|
||||
*/
|
||||
|
@ -292,7 +295,8 @@ public class Keyboard {
|
|||
initialize();
|
||||
if (created)
|
||||
return;
|
||||
Display.getImplementation().createKeyboard();
|
||||
implementation = Mouse.getImplementation();
|
||||
implementation.createKeyboard();
|
||||
created = true;
|
||||
readBuffer = ByteBuffer.allocate(EVENT_SIZE*BUFFER_SIZE);
|
||||
reset();
|
||||
|
@ -321,7 +325,7 @@ public class Keyboard {
|
|||
if (!created)
|
||||
return;
|
||||
created = false;
|
||||
Display.getImplementation().destroyKeyboard();
|
||||
implementation.destroyKeyboard();
|
||||
reset();
|
||||
}
|
||||
|
||||
|
@ -346,13 +350,13 @@ public class Keyboard {
|
|||
public static void poll() {
|
||||
if (!created)
|
||||
throw new IllegalStateException("Keyboard must be created before you can poll the device");
|
||||
Display.getImplementation().pollKeyboard(keyDownBuffer);
|
||||
implementation.pollKeyboard(keyDownBuffer);
|
||||
read();
|
||||
}
|
||||
|
||||
private static void read() {
|
||||
readBuffer.compact();
|
||||
Display.getImplementation().readKeyboard(readBuffer);
|
||||
implementation.readKeyboard(readBuffer);
|
||||
readBuffer.flip();
|
||||
}
|
||||
|
||||
|
@ -376,7 +380,7 @@ public class Keyboard {
|
|||
/* public static int isStateKeySet(int key) {
|
||||
if (!created)
|
||||
throw new IllegalStateException("Keyboard must be created before you can query key state");
|
||||
return Display.getImplementation().isStateKeySet(key);
|
||||
return implementation.isStateKeySet(key);
|
||||
}
|
||||
*/
|
||||
/**
|
||||
|
|
|
@ -40,8 +40,15 @@ import org.lwjgl.BufferUtils;
|
|||
import org.lwjgl.LWJGLException;
|
||||
import org.lwjgl.LWJGLUtil;
|
||||
import org.lwjgl.Sys;
|
||||
import org.lwjgl.opengl.DisplayImplementation;
|
||||
import org.lwjgl.opengl.Display;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.security.AccessController;
|
||||
import java.security.PrivilegedExceptionAction;
|
||||
import java.security.PrivilegedActionException;
|
||||
|
||||
|
||||
/**
|
||||
* <br>
|
||||
* A raw Mouse interface. This can be used to poll the current state of the
|
||||
|
@ -126,6 +133,8 @@ public class Mouse {
|
|||
private static final int BUFFER_SIZE = 50;
|
||||
|
||||
private static boolean isGrabbed;
|
||||
|
||||
private static DisplayImplementation implementation;
|
||||
|
||||
/** Whether we're running windows - which need to manually update cursor animation */
|
||||
private static final boolean isWindows = LWJGLUtil.getPlatform() == LWJGLUtil.PLATFORM_WINDOWS;
|
||||
|
@ -163,10 +172,10 @@ public class Mouse {
|
|||
currentCursor = cursor;
|
||||
if (isCreated()) {
|
||||
if (currentCursor != null) {
|
||||
Display.getImplementation().setNativeCursor(currentCursor.getHandle());
|
||||
implementation.setNativeCursor(currentCursor.getHandle());
|
||||
currentCursor.setTimeout();
|
||||
} else {
|
||||
Display.getImplementation().setNativeCursor(null);
|
||||
implementation.setNativeCursor(null);
|
||||
}
|
||||
}
|
||||
return oldCursor;
|
||||
|
@ -187,7 +196,7 @@ public class Mouse {
|
|||
x = event_x = new_x;
|
||||
y = event_y = new_y;
|
||||
if (!isGrabbed() && (Cursor.getCapabilities() & Cursor.CURSOR_ONE_BIT_TRANSPARENCY) != 0)
|
||||
Display.getImplementation().setCursorPosition(x, y);
|
||||
implementation.setCursorPosition(x, y);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -211,6 +220,23 @@ public class Mouse {
|
|||
readBuffer.position(readBuffer.limit());
|
||||
}
|
||||
|
||||
static DisplayImplementation getImplementation() {
|
||||
/* Use reflection since we can't make Display.getImplementation
|
||||
* public
|
||||
*/
|
||||
try {
|
||||
return (DisplayImplementation)AccessController.doPrivileged(new PrivilegedExceptionAction() {
|
||||
public Object run() throws Exception{
|
||||
Method getImplementation_method = Display.class.getDeclaredMethod("getImplementation", null);
|
||||
getImplementation_method.setAccessible(true);
|
||||
return getImplementation_method.invoke(null, null);
|
||||
}
|
||||
});
|
||||
} catch (PrivilegedActionException e) {
|
||||
throw new Error(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* "Create" the mouse. The display must first have been created.
|
||||
* Initially, the mouse is not grabbed and the delta values are reported
|
||||
|
@ -224,12 +250,13 @@ public class Mouse {
|
|||
if (!initialized)
|
||||
initialize();
|
||||
if (created) return;
|
||||
Display.getImplementation().createMouse();
|
||||
hasWheel = Display.getImplementation().hasWheel();
|
||||
implementation = getImplementation();
|
||||
implementation.createMouse();
|
||||
hasWheel = implementation.hasWheel();
|
||||
created = true;
|
||||
|
||||
// set mouse buttons
|
||||
buttonCount = Display.getImplementation().getButtonCount();
|
||||
buttonCount = implementation.getButtonCount();
|
||||
buttons = BufferUtils.createByteBuffer(buttonCount);
|
||||
coord_buffer = BufferUtils.createIntBuffer(3);
|
||||
if (currentCursor != null)
|
||||
|
@ -255,7 +282,7 @@ public class Mouse {
|
|||
buttons = null;
|
||||
coord_buffer = null;
|
||||
|
||||
Display.getImplementation().destroyMouse();
|
||||
implementation.destroyMouse();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -281,7 +308,7 @@ public class Mouse {
|
|||
*/
|
||||
public static void poll() {
|
||||
if (!created) throw new IllegalStateException("Mouse must be created before you can poll it");
|
||||
Display.getImplementation().pollMouse(coord_buffer, buttons);
|
||||
implementation.pollMouse(coord_buffer, buttons);
|
||||
|
||||
/* If we're grabbed, poll returns mouse deltas, if not it returns absolute coordinates */
|
||||
int poll_coord1 = coord_buffer.get(0);
|
||||
|
@ -308,7 +335,7 @@ public class Mouse {
|
|||
|
||||
private static void read() {
|
||||
readBuffer.compact();
|
||||
Display.getImplementation().readMouse(readBuffer);
|
||||
implementation.readMouse(readBuffer);
|
||||
readBuffer.flip();
|
||||
}
|
||||
|
||||
|
@ -527,7 +554,7 @@ public class Mouse {
|
|||
public static void setGrabbed(boolean grab) {
|
||||
isGrabbed = grab;
|
||||
if (isCreated()) {
|
||||
Display.getImplementation().grabMouse(isGrabbed);
|
||||
implementation.grabMouse(isGrabbed);
|
||||
resetMouse();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -718,7 +718,7 @@ public final class Display {
|
|||
GL11.glViewport(0, 0, current_mode.getWidth(), current_mode.getHeight());
|
||||
}
|
||||
|
||||
public static DisplayImplementation getImplementation() {
|
||||
static DisplayImplementation getImplementation() {
|
||||
return display_impl;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue