diff options
5 files changed, 58 insertions, 56 deletions
diff --git a/src/newt/classes/com/jogamp/newt/Window.java b/src/newt/classes/com/jogamp/newt/Window.java index 57fcb626d..82199e9b5 100644 --- a/src/newt/classes/com/jogamp/newt/Window.java +++ b/src/newt/classes/com/jogamp/newt/Window.java @@ -603,6 +603,11 @@ public interface Window extends NativeWindow, WindowClosingProtocol { */ void windowRepaint(int x, int y, int width, int height); + /** + * Enqueues a {@link com.jogamp.newt.event.NEWTEvent NEWT event}. + * @param wait Passing <code>true</code> will block until the event has been processed, otherwise method returns immediately. + * @param event The {@link com.jogamp.newt.event.NEWTEvent event} to enqueue. + */ void enqueueEvent(boolean wait, com.jogamp.newt.event.NEWTEvent event); void runOnEDTIfAvail(boolean wait, final Runnable task); diff --git a/src/newt/classes/com/jogamp/newt/event/awt/AWTAdapter.java b/src/newt/classes/com/jogamp/newt/event/awt/AWTAdapter.java index 864db1f7b..cf533eb9e 100644 --- a/src/newt/classes/com/jogamp/newt/event/awt/AWTAdapter.java +++ b/src/newt/classes/com/jogamp/newt/event/awt/AWTAdapter.java @@ -218,12 +218,45 @@ public abstract class AWTAdapter implements java.util.EventListener public abstract AWTAdapter removeFrom(java.awt.Component awtComponent); /** - * Enqueues the event to the {@link #getNewtWindow()} is not null. + * Return value for {@link AWTAdapter#processEvent(boolean, com.jogamp.newt.event.NEWTEvent) event processing}. */ - void enqueueEvent(boolean wait, com.jogamp.newt.event.NEWTEvent event) { + static enum EventProcRes { + /** Event shall be dispatched appropriately */ + DISPATCH, + /** Event has been enqueued */ + ENQUEUED, + /** No known processing method applies */ + NOP + } + + /** + * Process the event. + * <p> + * If {@link #getNewtEventListener()} is not <code>null</code>, + * {@link EventProcRes#DISPATCH DISPATCH} is returned and caller shall dispatch the event appropriately. + * </p> + * <p> + * If {@link #getNewtWindow()} is not <code>null</code>, + * {@link EventProcRes#ENQUEUED ENQUEUED} is returned and the event has been {@link com.jogamp.newt.Window#enqueueEvent(boolean, com.jogamp.newt.event.NEWTEvent) enqueued already}. + * </p> + * <p> + * If none of the above matches, {@link EventProcRes#NOP NOP} is returned and none of the above processing method applies. + * </p> + * + * @param wait In case the event will be {@link EventProcRes#ENQUEUED ENQUEUED}, + * passing <code>true</code> will block until the event has been processed, otherwise method returns immediately. + * @param event The {@link com.jogamp.newt.event.NEWTEvent event} to enqueue. + * @return One of the {@link EventProcRes} values, see above. + */ + EventProcRes processEvent(final boolean wait, final com.jogamp.newt.event.NEWTEvent event) { + if(null != newtListener) { + return EventProcRes.DISPATCH; + } if( null != newtWindow ) { newtWindow.enqueueEvent(wait, event); + return EventProcRes.ENQUEUED; } + return EventProcRes.NOP; } } diff --git a/src/newt/classes/com/jogamp/newt/event/awt/AWTKeyAdapter.java b/src/newt/classes/com/jogamp/newt/event/awt/AWTKeyAdapter.java index d4226f53e..ddbeb6e42 100644 --- a/src/newt/classes/com/jogamp/newt/event/awt/AWTKeyAdapter.java +++ b/src/newt/classes/com/jogamp/newt/event/awt/AWTKeyAdapter.java @@ -72,10 +72,8 @@ public class AWTKeyAdapter extends AWTAdapter implements java.awt.event.KeyListe if( consumeAWTEvent ) { e.consume(); } - if(null!=newtListener) { + if( EventProcRes.DISPATCH == processEvent(false, event) ) { ((com.jogamp.newt.event.KeyListener)newtListener).keyPressed(event); - } else { - enqueueEvent(false, event); } } @@ -86,10 +84,8 @@ public class AWTKeyAdapter extends AWTAdapter implements java.awt.event.KeyListe if( consumeAWTEvent ) { e.consume(); } - if(null!=newtListener) { + if( EventProcRes.DISPATCH == processEvent(false, event) ) { ((com.jogamp.newt.event.KeyListener)newtListener).keyReleased(event); - } else { - enqueueEvent(false, event); } } diff --git a/src/newt/classes/com/jogamp/newt/event/awt/AWTMouseAdapter.java b/src/newt/classes/com/jogamp/newt/event/awt/AWTMouseAdapter.java index 8ad1fa6ab..d0f73ef33 100644 --- a/src/newt/classes/com/jogamp/newt/event/awt/AWTMouseAdapter.java +++ b/src/newt/classes/com/jogamp/newt/event/awt/AWTMouseAdapter.java @@ -73,10 +73,8 @@ public class AWTMouseAdapter extends AWTAdapter implements java.awt.event.MouseL if( consumeAWTEvent ) { e.consume(); } - if(null!=newtListener) { + if( EventProcRes.DISPATCH == processEvent(false, event) ) { ((com.jogamp.newt.event.MouseListener)newtListener).mouseClicked(event); - } else { - enqueueEvent(false, event); } } @@ -87,10 +85,8 @@ public class AWTMouseAdapter extends AWTAdapter implements java.awt.event.MouseL if( consumeAWTEvent ) { e.consume(); } - if(null!=newtListener) { + if( EventProcRes.DISPATCH == processEvent(false, event) ) { ((com.jogamp.newt.event.MouseListener)newtListener).mouseEntered(event); - } else { - enqueueEvent(false, event); } } @@ -101,10 +97,8 @@ public class AWTMouseAdapter extends AWTAdapter implements java.awt.event.MouseL if( consumeAWTEvent ) { e.consume(); } - if(null!=newtListener) { + if( EventProcRes.DISPATCH == processEvent(false, event) ) { ((com.jogamp.newt.event.MouseListener)newtListener).mouseExited(event); - } else { - enqueueEvent(false, event); } } @@ -115,10 +109,8 @@ public class AWTMouseAdapter extends AWTAdapter implements java.awt.event.MouseL if( consumeAWTEvent ) { e.consume(); } - if(null!=newtListener) { + if( EventProcRes.DISPATCH == processEvent(false, event) ) { ((com.jogamp.newt.event.MouseListener)newtListener).mousePressed(event); - } else { - enqueueEvent(false, event); } } @@ -129,10 +121,8 @@ public class AWTMouseAdapter extends AWTAdapter implements java.awt.event.MouseL if( consumeAWTEvent ) { e.consume(); } - if(null!=newtListener) { + if( EventProcRes.DISPATCH == processEvent(false, event) ) { ((com.jogamp.newt.event.MouseListener)newtListener).mouseReleased(event); - } else { - enqueueEvent(false, event); } } @@ -143,10 +133,8 @@ public class AWTMouseAdapter extends AWTAdapter implements java.awt.event.MouseL if( consumeAWTEvent ) { e.consume(); } - if(null!=newtListener) { + if( EventProcRes.DISPATCH == processEvent(false, event) ) { ((com.jogamp.newt.event.MouseListener)newtListener).mouseDragged(event); - } else { - enqueueEvent(false, event); } } @@ -157,10 +145,8 @@ public class AWTMouseAdapter extends AWTAdapter implements java.awt.event.MouseL if( consumeAWTEvent ) { e.consume(); } - if(null!=newtListener) { + if( EventProcRes.DISPATCH == processEvent(false, event) ) { ((com.jogamp.newt.event.MouseListener)newtListener).mouseMoved(event); - } else { - enqueueEvent(false, event); } } @@ -171,10 +157,8 @@ public class AWTMouseAdapter extends AWTAdapter implements java.awt.event.MouseL if( consumeAWTEvent ) { e.consume(); } - if(null!=newtListener) { + if( EventProcRes.DISPATCH == processEvent(false, event) ) { ((com.jogamp.newt.event.MouseListener)newtListener).mouseWheelMoved(event); - } else { - enqueueEvent(false, event); } } } diff --git a/src/newt/classes/com/jogamp/newt/event/awt/AWTWindowAdapter.java b/src/newt/classes/com/jogamp/newt/event/awt/AWTWindowAdapter.java index 2e5527ee1..43a28b3b3 100644 --- a/src/newt/classes/com/jogamp/newt/event/awt/AWTWindowAdapter.java +++ b/src/newt/classes/com/jogamp/newt/event/awt/AWTWindowAdapter.java @@ -104,10 +104,8 @@ public class AWTWindowAdapter if(DEBUG_IMPLEMENTATION) { System.err.println("AWT: focusGained: "+e+" -> "+event); } - if(null!=newtListener) { + if( EventProcRes.DISPATCH == processEvent(false, event) ) { ((com.jogamp.newt.event.WindowListener)newtListener).windowGainedFocus(event); - } else { - enqueueEvent(false, event); } } @@ -118,10 +116,8 @@ public class AWTWindowAdapter if(DEBUG_IMPLEMENTATION) { System.err.println("AWT: focusLost: "+e+" -> "+event); } - if(null!=newtListener) { + if( EventProcRes.DISPATCH == processEvent(false, event) ) { ((com.jogamp.newt.event.WindowListener)newtListener).windowLostFocus(event); - } else { - enqueueEvent(false, event); } } @@ -144,10 +140,8 @@ public class AWTWindowAdapter } System.err.println("AWT: componentResized: "+sz+" ( "+insets+", "+sz2+" ), "+e+" -> "+event); } - if(null!=newtListener) { + if( EventProcRes.DISPATCH == processEvent(false, event) ) { ((com.jogamp.newt.event.WindowListener)newtListener).windowResized(event); - } else { - enqueueEvent(false, event); } } @@ -158,10 +152,8 @@ public class AWTWindowAdapter if(DEBUG_IMPLEMENTATION) { System.err.println("AWT: componentMoved: "+e+" -> "+event); } - if(null!=newtListener) { + if( EventProcRes.DISPATCH == processEvent(false, event) ) { ((com.jogamp.newt.event.WindowListener)newtListener).windowMoved(event); - } else { - enqueueEvent(false, event); } } @@ -207,10 +199,8 @@ public class AWTWindowAdapter public synchronized void windowActivated(java.awt.event.WindowEvent e) { if( !isSetup ) { return; } com.jogamp.newt.event.WindowEvent event = AWTNewtEventFactory.createWindowEvent(e, newtWindow); - if(null!=newtListener) { + if( EventProcRes.DISPATCH == processEvent(false, event) ) { ((com.jogamp.newt.event.WindowListener)newtListener).windowGainedFocus(event); - } else { - enqueueEvent(false, event); } } @@ -224,10 +214,8 @@ public class AWTWindowAdapter public synchronized void windowDeactivated(java.awt.event.WindowEvent e) { if( !isSetup ) { return; } com.jogamp.newt.event.WindowEvent event = AWTNewtEventFactory.createWindowEvent(e, newtWindow); - if(null!=newtListener) { + if( EventProcRes.DISPATCH == processEvent(false, event) ) { ((com.jogamp.newt.event.WindowListener)newtListener).windowLostFocus(event); - } else { - enqueueEvent(false, event); } } @@ -246,10 +234,8 @@ public class AWTWindowAdapter synchronized( AWTWindowAdapter.this ) { if( !isSetup ) { return; } com.jogamp.newt.event.WindowEvent event = AWTNewtEventFactory.createWindowEvent(e, newtWindow); - if(null!=newtListener) { + if( EventProcRes.DISPATCH == processEvent(true, event) ) { ((com.jogamp.newt.event.WindowListener)newtListener).windowDestroyNotify(event); - } else { - enqueueEvent(true, event); } } } @@ -258,10 +244,8 @@ public class AWTWindowAdapter synchronized( AWTWindowAdapter.this ) { if( !isSetup ) { return; } com.jogamp.newt.event.WindowEvent event = AWTNewtEventFactory.createWindowEvent(e, newtWindow); - if(null!=newtListener) { + if( EventProcRes.DISPATCH == processEvent(true, event) ) { ((com.jogamp.newt.event.WindowListener)newtListener).windowDestroyed(event); - } else { - enqueueEvent(true, event); } } } |