Get initial mouse pos on init, pass it to the InputManager
This commit is contained in:
		
							parent
							
								
									5520863078
								
							
						
					
					
						commit
						54a98f13e5
					
				| @ -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 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user