|
|
|
@ -39,6 +39,8 @@ import com.jme3.input.event.MouseButtonEvent; |
|
|
|
|
import com.jme3.input.event.MouseMotionEvent; |
|
|
|
|
import com.jme3.system.lwjgl.LwjglAbstractDisplay; |
|
|
|
|
import com.jme3.system.lwjgl.LwjglTimer; |
|
|
|
|
import java.util.HashMap; |
|
|
|
|
import java.util.Map; |
|
|
|
|
import java.util.logging.Level; |
|
|
|
|
import java.util.logging.Logger; |
|
|
|
|
import org.lwjgl.LWJGLException; |
|
|
|
@ -57,6 +59,12 @@ public class LwjglMouseInput implements MouseInput { |
|
|
|
|
private boolean supportHardwareCursor = false; |
|
|
|
|
private boolean cursorVisible = true; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* We need to cache the cursors |
|
|
|
|
* (https://github.com/jMonkeyEngine/jmonkeyengine/issues/537)
|
|
|
|
|
*/ |
|
|
|
|
private Map<JmeCursor, Cursor> cursorMap = new HashMap<JmeCursor, Cursor>(); |
|
|
|
|
|
|
|
|
|
private int curX, curY, curWheel; |
|
|
|
|
|
|
|
|
|
public LwjglMouseInput(LwjglAbstractDisplay context){ |
|
|
|
@ -120,7 +128,7 @@ public class LwjglMouseInput implements MouseInput { |
|
|
|
|
} |
|
|
|
|
if (btn != -1){ |
|
|
|
|
MouseButtonEvent evt = new MouseButtonEvent(btn, |
|
|
|
|
Mouse.getEventButtonState(), x, y); |
|
|
|
|
Mouse.getEventButtonState(), x, y); |
|
|
|
|
evt.setTime(Mouse.getEventNanoseconds()); |
|
|
|
|
listener.onMouseButtonEvent(evt); |
|
|
|
|
} |
|
|
|
@ -132,6 +140,13 @@ public class LwjglMouseInput implements MouseInput { |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
Mouse.destroy(); |
|
|
|
|
|
|
|
|
|
// Destroy the cursor cache
|
|
|
|
|
for (Cursor cursor : cursorMap.values()) { |
|
|
|
|
cursor.destroy(); |
|
|
|
|
} |
|
|
|
|
cursorMap.clear(); |
|
|
|
|
|
|
|
|
|
logger.fine("Mouse destroyed."); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -155,14 +170,20 @@ public class LwjglMouseInput implements MouseInput { |
|
|
|
|
try { |
|
|
|
|
Cursor newCursor = null; |
|
|
|
|
if (jmeCursor != null) { |
|
|
|
|
newCursor = new Cursor( |
|
|
|
|
jmeCursor.getWidth(), |
|
|
|
|
jmeCursor.getHeight(), |
|
|
|
|
jmeCursor.getXHotSpot(), |
|
|
|
|
jmeCursor.getYHotSpot(), |
|
|
|
|
jmeCursor.getNumImages(), |
|
|
|
|
jmeCursor.getImagesData(), |
|
|
|
|
jmeCursor.getImagesDelay()); |
|
|
|
|
newCursor = cursorMap.get(jmeCursor); |
|
|
|
|
if (newCursor == null) { |
|
|
|
|
newCursor = new Cursor( |
|
|
|
|
jmeCursor.getWidth(), |
|
|
|
|
jmeCursor.getHeight(), |
|
|
|
|
jmeCursor.getXHotSpot(), |
|
|
|
|
jmeCursor.getYHotSpot(), |
|
|
|
|
jmeCursor.getNumImages(), |
|
|
|
|
jmeCursor.getImagesData(), |
|
|
|
|
jmeCursor.getImagesDelay()); |
|
|
|
|
|
|
|
|
|
// Add to cache
|
|
|
|
|
cursorMap.put(jmeCursor, newCursor); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
Mouse.setNativeCursor(newCursor); |
|
|
|
|
} catch (LWJGLException ex) { |
|
|
|
|