diff options
author | Julien Gouesse <[email protected]> | 2014-01-09 23:09:03 +0100 |
---|---|---|
committer | Julien Gouesse <[email protected]> | 2014-01-09 23:09:03 +0100 |
commit | 9308ead643b1bce9e4224945bd187b8a125cc266 (patch) | |
tree | 12f387defdf9b89a7f9c73e3946b5a3a13472426 /ardor3d-jogl | |
parent | cb8c3e4c4de129cb4afee0282c315fb3af68d9c4 (diff) |
First implementation of setCursor in the JOGL NEWT backend
Diffstat (limited to 'ardor3d-jogl')
-rw-r--r-- | ardor3d-jogl/src/main/java/com/ardor3d/input/jogl/JoglNewtMouseManager.java | 54 |
1 files changed, 39 insertions, 15 deletions
diff --git a/ardor3d-jogl/src/main/java/com/ardor3d/input/jogl/JoglNewtMouseManager.java b/ardor3d-jogl/src/main/java/com/ardor3d/input/jogl/JoglNewtMouseManager.java index 1a9f8cc..5403cef 100644 --- a/ardor3d-jogl/src/main/java/com/ardor3d/input/jogl/JoglNewtMouseManager.java +++ b/ardor3d-jogl/src/main/java/com/ardor3d/input/jogl/JoglNewtMouseManager.java @@ -10,27 +10,52 @@ package com.ardor3d.input.jogl; +import java.nio.ByteBuffer; + +import javax.media.nativewindow.util.Dimension; +import javax.media.nativewindow.util.DimensionImmutable; +import javax.media.nativewindow.util.PixelFormat; +import javax.media.nativewindow.util.PixelRectangle; + import com.ardor3d.framework.jogl.NewtWindowContainer; +import com.ardor3d.image.Image; import com.ardor3d.input.GrabbedState; import com.ardor3d.input.MouseCursor; import com.ardor3d.input.MouseManager; +import com.jogamp.newt.Display.PointerIcon; import com.jogamp.newt.opengl.GLWindow; - -public class JoglNewtMouseManager implements MouseManager{ +public class JoglNewtMouseManager implements MouseManager { /** our current grabbed state */ private GrabbedState _grabbedState; - - private GLWindow _newtWindow; - + + private final GLWindow _newtWindow; + + private PointerIcon _previousPointerIcon; + public JoglNewtMouseManager(final NewtWindowContainer newtWindowContainer) { _newtWindow = newtWindowContainer.getNewtWindow(); } @Override - public void setCursor(MouseCursor cursor) { - //FIXME not supported by NEWT + public void setCursor(final MouseCursor cursor) { + final Image image = cursor.getImage(); + final DimensionImmutable size = new Dimension(image.getWidth(), image.getHeight()); + final ByteBuffer pixels = image.getData(0); + + PixelFormat pixFormat = null; + for (final PixelFormat pf : PixelFormat.values()) { + if (pf.componentCount == image.getDataFormat().getComponents() + && pf.bitsPerPixel == image.getDataType().getBytesPerPixel(pf.componentCount) * 8) { + pixFormat = pf; + break; + } + } + + final PixelRectangle.GenericPixelRect rec = new PixelRectangle.GenericPixelRect(pixFormat, size, 0, false, + pixels); + _newtWindow.getScreen().getDisplay().createPointerIcon(rec, cursor.getHotspotX(), cursor.getHotspotY()); } @Override @@ -39,23 +64,22 @@ public class JoglNewtMouseManager implements MouseManager{ } @Override - public void setGrabbed(GrabbedState grabbedState) { + public void setGrabbed(final GrabbedState grabbedState) { // check if we should be here. if (_grabbedState == grabbedState) { return; } - + // remember our grabbed state mode. _grabbedState = grabbedState; if (grabbedState == GrabbedState.GRABBED) { - //FIXME remember our old cursor - + // remember our old cursor + _previousPointerIcon = _newtWindow.getPointerIcon(); // set our cursor to be invisible _newtWindow.setPointerVisible(false); - } - else { - //FIXME restore our old cursor - + } else { + // restore our old cursor + _newtWindow.setPointerIcon(_previousPointerIcon); // set our cursor to be visible _newtWindow.setPointerVisible(true); } |