jMonkeyEngine / jMonkeyEngine/jmonkeyengine
Mouse pointer moves to centre of canvas on click in OpenGL3 with Swing
Nobody has claimed this yet.
- Dominant language
- Java
- Stars
- 4.3k
- Forks
- 1.2k
- Avg merge
- 4d 7h
- Merged PRs (30d)
- 14
Description
With JME3.7 we can now embed OpenGL3 canvas in a Swing window. I have noticed an issue with the mouse with this configuration.
Steps to reproduce:
- Use JME 3.7.0-stable
- Be running OpenGL3
- Have a jme canvas embedded in a swing window
- Listen for jme mouse events using InputManager.addListener(ActionListener)
- Left click on the canvas
- In the ActionListener, get the position of the mouse using InputManager.getCursorPosition()
Observed
The mouseDown (i.e. keyPressed=true) will have the correct mouse position.
By the time the mouseUp event is processed (i.e. keyPressed=false), the position of the mouse has been moved to the centre of the canvas.
- The mouse is physically displayed in the centre of the canvas
- InputManager.getCursorPosition() will return a mouse position in the centre of the canvas
Notes:
- This does not happen if you are not using Swing
- This does not happen in OpenGL2 with Swing
- Seen on both Windows 10 and current Debian linux stable (12.7)
A workaround (more a hack) is to
- Store the location of the mousedown event
- In the mouseup event, use java.awt.Robot to move the mouse back to where the mousedown event happened.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reproducing the issue with JME 3.7.0-stable, an OpenGL3 canvas embedded in Swing, and an InputManager.addListener(ActionListener) handler. Compare InputManager.getCursorPosition() during mouseDown and mouseUp, then investigate the OpenGL3 Swing canvas input path against the OpenGL2 behavior. Done means the cursor remains at its physical position and both events report the expected coordinates without the Robot workaround.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- desktop
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100