mirror of
https://github.com/jneug/zeichenmaschine.git
synced 2026-04-14 06:33:34 +02:00
Synchronisierte EventQueue für InputEvents
Eingaben der Swing Componente werden nun in eine interen EventQueue einsortiert, die einmal pro Frame abgearbeitet wird. Das verhindert Probleme bei der Synchronisierung der ZM mit dem EDT von Swing. Im Moment werden die Originalen InputEvent gespeichert und verarbeitet. In Zukunft könnte eine eigene Event-Klasse sinnvoll sein, die die Events für die Nutzer vereinfacht (siehe Processing).
This commit is contained in:
@@ -289,6 +289,18 @@ public class Constants {
|
|||||||
*/
|
*/
|
||||||
public static double pmouseY = 0.0;
|
public static double pmouseY = 0.0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Die aktuelle (<em>current</em>) {@code x}-Koordinate der Maus
|
||||||
|
* (wird bei jeder Mausbewegung aktualisiert).
|
||||||
|
*/
|
||||||
|
public static double cmouseX = 0.0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Die aktuelle (<em>current</em>) {@code y}-Koordinate der Maus
|
||||||
|
* (wird bei jeder Mausbewegung aktualisiert).
|
||||||
|
*/
|
||||||
|
public static double cmouseY = 0.0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gibt an, ob ein Mausknopf derzeit gedrückt ist.
|
* Gibt an, ob ein Mausknopf derzeit gedrückt ist.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -321,67 +321,13 @@ public class Zeichenmaschine extends Constants {
|
|||||||
settings();
|
settings();
|
||||||
|
|
||||||
// Listener hinzufügen, um auf Maus- und Tastatureingaben zu hören.
|
// Listener hinzufügen, um auf Maus- und Tastatureingaben zu hören.
|
||||||
//canvas.addMouseListener(this);
|
InputListener inputListener = new InputListener();
|
||||||
//canvas.addMouseMotionListener(this);
|
canvas.addMouseListener(inputListener);
|
||||||
//canvas.addKeyListener(this);
|
canvas.addMouseMotionListener(inputListener);
|
||||||
canvas.addMouseListener(new MouseInputListener() {
|
canvas.addMouseWheelListener(inputListener);
|
||||||
@Override
|
canvas.addKeyListener(inputListener);
|
||||||
public void mouseClicked( MouseEvent e ) {
|
|
||||||
enqueueEvent(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
// Programm beenden, wenn Fenster geschlossen wird
|
||||||
public void mousePressed( MouseEvent e ) {
|
|
||||||
enqueueEvent(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void mouseReleased( MouseEvent e ) {
|
|
||||||
enqueueEvent(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void mouseEntered( MouseEvent e ) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void mouseExited( MouseEvent e ) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void mouseDragged( MouseEvent e ) {
|
|
||||||
enqueueEvent(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void mouseMoved( MouseEvent e ) {
|
|
||||||
enqueueEvent(e);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
/*
|
|
||||||
canvas.addMouseWheelListener(new MouseWheelListener() {
|
|
||||||
@Override
|
|
||||||
public void mouseWheelMoved( MouseWheelEvent e ) {
|
|
||||||
enqueueEvent(e);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
*/
|
|
||||||
canvas.addKeyListener(new KeyListener() {
|
|
||||||
@Override
|
|
||||||
public void keyTyped( KeyEvent e ) {
|
|
||||||
enqueueEvent(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void keyPressed( KeyEvent e ) {
|
|
||||||
enqueueEvent(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void keyReleased( KeyEvent e ) {
|
|
||||||
enqueueEvent(e);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
frame.addWindowListener(new WindowAdapter() {
|
frame.addWindowListener(new WindowAdapter() {
|
||||||
@Override
|
@Override
|
||||||
public void windowClosing( WindowEvent e ) {
|
public void windowClosing( WindowEvent e ) {
|
||||||
@@ -1136,7 +1082,7 @@ public class Zeichenmaschine extends Constants {
|
|||||||
private void enqueueEvent( InputEvent evt ) {
|
private void enqueueEvent( InputEvent evt ) {
|
||||||
eventQueue.add(evt);
|
eventQueue.add(evt);
|
||||||
|
|
||||||
if (isPaused()) {
|
if( isPaused() ) {
|
||||||
dispatchEvents();
|
dispatchEvents();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1146,7 +1092,6 @@ public class Zeichenmaschine extends Constants {
|
|||||||
while( !eventQueue.isEmpty() ) {
|
while( !eventQueue.isEmpty() ) {
|
||||||
InputEvent evt = eventQueue.poll();
|
InputEvent evt = eventQueue.poll();
|
||||||
|
|
||||||
// ???
|
|
||||||
switch( evt.getID() ) {
|
switch( evt.getID() ) {
|
||||||
case KeyEvent.KEY_TYPED:
|
case KeyEvent.KEY_TYPED:
|
||||||
case KeyEvent.KEY_PRESSED:
|
case KeyEvent.KEY_PRESSED:
|
||||||
@@ -1188,17 +1133,9 @@ public class Zeichenmaschine extends Constants {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void handleMouseEvent( MouseEvent evt ) {
|
private void handleMouseEvent( MouseEvent evt ) {
|
||||||
if( mouseEvent != null && evt.getComponent() == canvas ) {
|
|
||||||
pmouseX = mouseX;
|
|
||||||
pmouseY = mouseY;
|
|
||||||
|
|
||||||
mouseX = evt.getX();
|
|
||||||
mouseY = evt.getY();
|
|
||||||
}
|
|
||||||
|
|
||||||
mouseEvent = evt;
|
mouseEvent = evt;
|
||||||
|
|
||||||
switch( evt.getID() ){
|
switch( evt.getID() ) {
|
||||||
case MouseEvent.MOUSE_CLICKED:
|
case MouseEvent.MOUSE_CLICKED:
|
||||||
mouseClicked(evt);
|
mouseClicked(evt);
|
||||||
break;
|
break;
|
||||||
@@ -1213,9 +1150,11 @@ public class Zeichenmaschine extends Constants {
|
|||||||
mousePressed(evt);
|
mousePressed(evt);
|
||||||
break;
|
break;
|
||||||
case MouseEvent.MOUSE_DRAGGED:
|
case MouseEvent.MOUSE_DRAGGED:
|
||||||
|
//saveMousePosition(evt);
|
||||||
mouseDragged(evt);
|
mouseDragged(evt);
|
||||||
break;
|
break;
|
||||||
case MouseEvent.MOUSE_MOVED:
|
case MouseEvent.MOUSE_MOVED:
|
||||||
|
//saveMousePosition(evt);
|
||||||
mouseMoved(evt);
|
mouseMoved(evt);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1266,8 +1205,8 @@ public class Zeichenmaschine extends Constants {
|
|||||||
pmouseX = mouseX;
|
pmouseX = mouseX;
|
||||||
pmouseY = mouseY;
|
pmouseY = mouseY;
|
||||||
|
|
||||||
mouseX = event.getX();
|
mouseX = cmouseX;
|
||||||
mouseY = event.getY();
|
mouseY = cmouseY;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1349,7 +1288,7 @@ public class Zeichenmaschine extends Constants {
|
|||||||
delta = (System.nanoTime() - beforeTime) / 1000000000.0;
|
delta = (System.nanoTime() - beforeTime) / 1000000000.0;
|
||||||
beforeTime = System.nanoTime();
|
beforeTime = System.nanoTime();
|
||||||
|
|
||||||
//saveMousePosition(mouseEvent);
|
saveMousePosition(mouseEvent);
|
||||||
|
|
||||||
if( state != Options.AppState.PAUSED ) {
|
if( state != Options.AppState.PAUSED ) {
|
||||||
handleUpdate(delta);
|
handleUpdate(delta);
|
||||||
@@ -1444,6 +1383,65 @@ public class Zeichenmaschine extends Constants {
|
|||||||
@Override
|
@Override
|
||||||
public int compareTo( Delayed o ) {
|
public int compareTo( Delayed o ) {
|
||||||
return (int) (startTime- ((DelayedTask)o).startTime);
|
return (int) (startTime- ((DelayedTask)o).startTime);
|
||||||
|
|
||||||
|
class InputListener implements MouseInputListener, MouseMotionListener, MouseWheelListener, KeyListener{
|
||||||
|
@Override
|
||||||
|
public void mouseClicked( MouseEvent e ) {
|
||||||
|
enqueueEvent(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void mousePressed( MouseEvent e ) {
|
||||||
|
enqueueEvent(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void mouseReleased( MouseEvent e ) {
|
||||||
|
enqueueEvent(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void mouseEntered( MouseEvent e ) {
|
||||||
|
// Intentionally left blank
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void mouseExited( MouseEvent e ) {
|
||||||
|
// Intentionally left blank
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void mouseDragged( MouseEvent e ) {
|
||||||
|
cmouseX = e.getX();
|
||||||
|
cmouseY = e.getY();
|
||||||
|
enqueueEvent(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void mouseMoved( MouseEvent e ) {
|
||||||
|
cmouseX = e.getX();
|
||||||
|
cmouseY = e.getY();
|
||||||
|
enqueueEvent(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void keyTyped( KeyEvent e ) {
|
||||||
|
enqueueEvent(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void keyPressed( KeyEvent e ) {
|
||||||
|
enqueueEvent(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void keyReleased( KeyEvent e ) {
|
||||||
|
enqueueEvent(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void mouseWheelMoved( MouseWheelEvent e ) {
|
||||||
|
// enqueueEvent(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user