|
|
|
@ -39,6 +39,7 @@ import com.jme3.input.event.MouseMotionEvent; |
|
|
|
|
import com.jme3.system.lwjgl.LwjglWindow; |
|
|
|
|
import com.jme3.util.BufferUtils; |
|
|
|
|
import java.nio.ByteBuffer; |
|
|
|
|
import java.nio.DoubleBuffer; |
|
|
|
|
import java.nio.IntBuffer; |
|
|
|
|
import java.util.ArrayDeque; |
|
|
|
|
import java.util.HashMap; |
|
|
|
@ -197,6 +198,7 @@ public class GlfwMouseInput implements MouseInput { |
|
|
|
|
currentHeight = height.get(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
initCurrentMousePosition(window); |
|
|
|
|
glfwSetCursorPosCallback(window, cursorPosCallback = new GLFWCursorPosCallback() { |
|
|
|
|
@Override |
|
|
|
|
public void invoke(final long window, final double xpos, final double ypos) { |
|
|
|
@ -226,11 +228,40 @@ public class GlfwMouseInput implements MouseInput { |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
if(listener != null) { |
|
|
|
|
sendFirstMouseEvent(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
setCursorVisible(cursorVisible); |
|
|
|
|
logger.fine("Mouse created."); |
|
|
|
|
initialized = true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void initCurrentMousePosition(long window) { |
|
|
|
|
DoubleBuffer x = BufferUtils.createDoubleBuffer(1); |
|
|
|
|
DoubleBuffer y = BufferUtils.createDoubleBuffer(1); |
|
|
|
|
glfwGetCursorPos(window, x, y); |
|
|
|
|
mouseX = (int) Math.round(x.get()); |
|
|
|
|
mouseY = (int) currentHeight - (int) Math.round(y.get()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Send the input listener a special mouse-motion event with zero deltas in |
|
|
|
|
* order to initialize the listener's cursor position. |
|
|
|
|
*/ |
|
|
|
|
private void sendFirstMouseEvent() { |
|
|
|
|
assert listener != null; |
|
|
|
|
|
|
|
|
|
int xDelta = 0; |
|
|
|
|
int yDelta = 0; |
|
|
|
|
int wheelDelta = 0; |
|
|
|
|
MouseMotionEvent evt = new MouseMotionEvent(mouseX, mouseY, xDelta, yDelta, |
|
|
|
|
mouseWheel, wheelDelta); |
|
|
|
|
evt.setTime(getInputTimeNanos()); |
|
|
|
|
|
|
|
|
|
listener.onMouseMotionEvent(evt); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public boolean isInitialized() { |
|
|
|
|
return initialized; |
|
|
|
@ -308,6 +339,9 @@ public class GlfwMouseInput implements MouseInput { |
|
|
|
|
@Override |
|
|
|
|
public void setInputListener(RawInputListener listener) { |
|
|
|
|
this.listener = listener; |
|
|
|
|
if (listener != null && initialized) { |
|
|
|
|
sendFirstMouseEvent(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|