I am trying to use a MouseMotionListener with lwjgl, mostly because I prefer to have code run through notification instead of through polling, but when I try to attach a MouseMotionListener to a Canvas that I have used Display.setParent on, it won't receive any MosueEvents.
This code Does receive mouse events:
package net.daboross.test;
import java.awt.Canvas;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
/**
*
* @author daboross
*/
public class Test {
public static void main(String[] args) throws Exception {
JFrame jFrame = new JFrame("test");
jFrame.setResizable(false);
jFrame.setPreferredSize(new Dimension(640, 480));
jFrame.pack();
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
jFrame.setLocation((d.width - 640) / 2, (d.height - 480) / 2);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Canvas canvas = new Canvas();
jFrame.add(canvas);
canvas.addMouseMotionListener(new MouseMotionListener() {
public void mouseMoved(MouseEvent e) {
System.out.println(e);
}
public void mouseDragged(MouseEvent e) {
System.out.println(e);
}
});
jFrame.setVisible(true);
}
}
while this code doesn't:
package net.daboross.test;
import java.awt.Canvas;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
/**
*
* @author daboross
*/
public class Test {
public static void main(String[] args) throws Exception {
JFrame jFrame = new JFrame("test");
jFrame.setResizable(false);
jFrame.setPreferredSize(new Dimension(640, 480));
jFrame.pack();
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
jFrame.setLocation((d.width - 640) / 2, (d.height - 480) / 2);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Canvas canvas = new Canvas();
jFrame.add(canvas);
canvas.addMouseMotionListener(new MouseMotionListener() {
public void mouseMoved(MouseEvent e) {
System.out.println(e);
}
public void mouseDragged(MouseEvent e) {
System.out.println(e);
}
});
jFrame.setVisible(true);
try {
Display.setParent(canvas);
Display.setDisplayMode(new DisplayMode(640, 480));
Display.create();
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glOrtho(0, 640, 0, 480, 10, -10);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
} catch (LWJGLException lwjgle) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, "LWJGLException when initializing display", lwjgle);
System.exit(1);
}
}
}
Is the Display being loaded onto the Canvas stop that Canvas from outputting MouseEvents? Is this built into lwjgl, or is it a bug.
I can switch to using org.lwjgl.input.Mouse, but I would rather not to if there is another way,
I think that having java notify my program for mouse movement is more efficient then polling org.lwjgl.input.Mouse, but is that the case?