aboutsummaryrefslogtreecommitdiffstats
path: root/src/newt/classes/com/jogamp/newt/Window.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/newt/classes/com/jogamp/newt/Window.java')
-rwxr-xr-xsrc/newt/classes/com/jogamp/newt/Window.java179
1 files changed, 169 insertions, 10 deletions
diff --git a/src/newt/classes/com/jogamp/newt/Window.java b/src/newt/classes/com/jogamp/newt/Window.java
index 89c1bd146..e9289f5dc 100755
--- a/src/newt/classes/com/jogamp/newt/Window.java
+++ b/src/newt/classes/com/jogamp/newt/Window.java
@@ -42,6 +42,7 @@ import javax.media.nativewindow.*;
import com.jogamp.nativewindow.impl.RecursiveToolkitLock;
import java.util.ArrayList;
+import java.util.List;
import java.util.Iterator;
import java.lang.reflect.Method;
@@ -706,9 +707,9 @@ public abstract class Window implements NativeWindow
public void reparentWindow(NativeWindow newParent, Screen newScreen) {
if(!isDestroyed()) {
runOnEDTIfAvail(true, new ReparentAction(newParent, newScreen));
- if( isVisible() ) {
- enqueueWindowEvent(WindowEvent.EVENT_WINDOW_RESIZED); // trigger a resize/relayout to listener
- }
+ // if( isVisible() ) {
+ enqueueWindowEvent(true, WindowEvent.EVENT_WINDOW_RESIZED); // trigger a resize/relayout to listener
+ // }
}
}
@@ -974,13 +975,36 @@ public abstract class Window implements NativeWindow
private ArrayList surfaceUpdatedListeners = new ArrayList();
+ /**
+ * Appends the given {@link com.jogamp.newt.event.SurfaceUpdatedListener} to the end of
+ * the list.
+ */
public void addSurfaceUpdatedListener(SurfaceUpdatedListener l) {
+ getInnerWindow().addSurfaceUpdatedListener(-1, l);
+ }
+
+ /**
+ * Inserts the given {@link com.jogamp.newt.event.SurfaceUpdatedListener} at the
+ * specified position in the list.<br>
+
+ * @param index Position where the listener will be inserted.
+ * Should be within (0 <= index && index <= size()).
+ * An index value of -1 is interpreted as the end of the list, size().
+ * @param l The listener object to be inserted
+ * @throws IndexOutOfBoundsException If the index is not within (0 <= index && index <= size()), or -1
+ */
+ public void addSurfaceUpdatedListener(int index, SurfaceUpdatedListener l)
+ throws IndexOutOfBoundsException
+ {
if(l == null) {
return;
}
synchronized(surfaceUpdatedListeners) {
+ if(0>index) {
+ index = surfaceUpdatedListeners.size();
+ }
ArrayList newSurfaceUpdatedListeners = (ArrayList) surfaceUpdatedListeners.clone();
- newSurfaceUpdatedListeners.add(l);
+ newSurfaceUpdatedListeners.add(index, l);
surfaceUpdatedListeners = newSurfaceUpdatedListeners;
}
}
@@ -1002,7 +1026,16 @@ public abstract class Window implements NativeWindow
}
}
- public SurfaceUpdatedListener[] getSurfaceUpdatedListener() {
+ public SurfaceUpdatedListener getSurfaceUpdatedListener(int index) {
+ synchronized(surfaceUpdatedListeners) {
+ if(0>index) {
+ index = surfaceUpdatedListeners.size()-1;
+ }
+ return (SurfaceUpdatedListener) surfaceUpdatedListeners.get(index);
+ }
+ }
+
+ public SurfaceUpdatedListener[] getSurfaceUpdatedListeners() {
synchronized(surfaceUpdatedListeners) {
return (SurfaceUpdatedListener[]) surfaceUpdatedListeners.toArray();
}
@@ -1088,13 +1121,34 @@ public abstract class Window implements NativeWindow
}
+ /**
+ * Appends the given {@link com.jogamp.newt.event.MouseListener} to the end of
+ * the list.
+ */
public void addMouseListener(MouseListener l) {
+ getInnerWindow().addMouseListener(-1, l);
+ }
+
+ /**
+ * Inserts the given {@link com.jogamp.newt.event.MouseListener} at the
+ * specified position in the list.<br>
+
+ * @param index Position where the listener will be inserted.
+ * Should be within (0 <= index && index <= size()).
+ * An index value of -1 is interpreted as the end of the list, size().
+ * @param l The listener object to be inserted
+ * @throws IndexOutOfBoundsException If the index is not within (0 <= index && index <= size()), or -1
+ */
+ public void addMouseListener(int index, MouseListener l) {
if(l == null) {
return;
}
synchronized(mouseListeners) {
+ if(0>index) {
+ index = mouseListeners.size();
+ }
ArrayList newMouseListeners = (ArrayList) mouseListeners.clone();
- newMouseListeners.add(l);
+ newMouseListeners.add(index, l);
mouseListeners = newMouseListeners;
}
}
@@ -1110,6 +1164,15 @@ public abstract class Window implements NativeWindow
}
}
+ public MouseListener getMouseListener(int index) {
+ synchronized(mouseListeners) {
+ if(0>index) {
+ index = mouseListeners.size()-1;
+ }
+ return (MouseListener) mouseListeners.get(index);
+ }
+ }
+
public MouseListener[] getMouseListeners() {
synchronized(mouseListeners) {
return (MouseListener[]) mouseListeners.toArray();
@@ -1168,13 +1231,34 @@ public abstract class Window implements NativeWindow
modifiers, keyCode, keyChar) );
}
+ /**
+ * Appends the given {@link com.jogamp.newt.event.KeyListener} to the end of
+ * the list.
+ */
public void addKeyListener(KeyListener l) {
+ getInnerWindow().addKeyListener(-1, l);
+ }
+
+ /**
+ * Inserts the given {@link com.jogamp.newt.event.KeyListener} at the
+ * specified position in the list.<br>
+
+ * @param index Position where the listener will be inserted.
+ * Should be within (0 <= index && index <= size()).
+ * An index value of -1 is interpreted as the end of the list, size().
+ * @param l The listener object to be inserted
+ * @throws IndexOutOfBoundsException If the index is not within (0 <= index && index <= size()), or -1
+ */
+ public void addKeyListener(int index, KeyListener l) {
if(l == null) {
return;
}
synchronized(keyListeners) {
+ if(0>index) {
+ index = keyListeners.size();
+ }
ArrayList newKeyListeners = (ArrayList) keyListeners.clone();
- newKeyListeners.add(l);
+ newKeyListeners.add(index, l);
keyListeners = newKeyListeners;
}
}
@@ -1190,6 +1274,15 @@ public abstract class Window implements NativeWindow
}
}
+ public KeyListener getKeyListener(int index) {
+ synchronized(keyListeners) {
+ if(0>index) {
+ index = keyListeners.size()-1;
+ }
+ return (KeyListener) keyListeners.get(index);
+ }
+ }
+
public KeyListener[] getKeyListeners() {
synchronized(keyListeners) {
return (KeyListener[]) keyListeners.toArray();
@@ -1228,20 +1321,47 @@ public abstract class Window implements NativeWindow
// WindowListener/Event Support
//
protected void enqueueWindowEvent(int eventType) {
+ enqueueWindowEvent(false, eventType);
+ }
+
+ protected void enqueueWindowEvent(boolean wait, int eventType) {
WindowEvent event = new WindowEvent(eventType, this, System.currentTimeMillis());
- screen.getDisplay().enqueueEvent( event );
+ screen.getDisplay().enqueueEvent( wait, event );
// sendWindowEvent ( event ); // FIXME: Think about performance/lag .. ?
}
private ArrayList windowListeners = new ArrayList();
+ /**
+ * Appends the given {@link com.jogamp.newt.event.WindowListener} to the end of
+ * the list.
+ */
public void addWindowListener(WindowListener l) {
+ getInnerWindow().addWindowListener(-1, l);
+ }
+
+ /**
+ * Inserts the given {@link com.jogamp.newt.event.WindowListener} at the
+ * specified position in the list.<br>
+
+ * @param index Position where the listener will be inserted.
+ * Should be within (0 <= index && index <= size()).
+ * An index value of -1 is interpreted as the end of the list, size().
+ * @param l The listener object to be inserted
+ * @throws IndexOutOfBoundsException If the index is not within (0 <= index && index <= size()), or -1
+ */
+ public void addWindowListener(int index, WindowListener l)
+ throws IndexOutOfBoundsException
+ {
if(l == null) {
return;
}
synchronized(windowListeners) {
+ if(0>index) {
+ index = windowListeners.size();
+ }
ArrayList newWindowListeners = (ArrayList) windowListeners.clone();
- newWindowListeners.add(l);
+ newWindowListeners.add(index, l);
windowListeners = newWindowListeners;
}
}
@@ -1257,6 +1377,15 @@ public abstract class Window implements NativeWindow
}
}
+ public WindowListener getWindowListener(int index) {
+ synchronized(windowListeners) {
+ if(0>index) {
+ index = windowListeners.size()-1;
+ }
+ return (WindowListener) windowListeners.get(index);
+ }
+ }
+
public WindowListener[] getWindowListeners() {
synchronized(windowListeners) {
return (WindowListener[]) windowListeners.toArray();
@@ -1304,13 +1433,34 @@ public abstract class Window implements NativeWindow
private ArrayList paintListeners = new ArrayList();
+ /**
+ * Appends the given {@link com.jogamp.newt.event.PaintListener} to the end of
+ * the list.
+ */
public void addPaintListener(PaintListener l) {
+ getInnerWindow().addPaintListener(-1, l);
+ }
+
+ /**
+ * Inserts the given {@link com.jogamp.newt.event.PaintListener} at the
+ * specified position in the list.<br>
+
+ * @param index Position where the listener will be inserted.
+ * Should be within (0 <= index && index <= size()).
+ * An index value of -1 is interpreted as the end of the list, size().
+ * @param l The listener object to be inserted
+ * @throws IndexOutOfBoundsException If the index is not within (0 <= index && index <= size()), or -1
+ */
+ public void addPaintListener(int index, PaintListener l) {
if(l == null) {
return;
}
synchronized(paintListeners) {
+ if(0>index) {
+ index = paintListeners.size();
+ }
ArrayList newPaintListeners = (ArrayList) paintListeners.clone();
- newPaintListeners.add(l);
+ newPaintListeners.add(index, l);
paintListeners = newPaintListeners;
}
}
@@ -1326,6 +1476,15 @@ public abstract class Window implements NativeWindow
}
}
+ public PaintListener getPaintListener(int index) {
+ synchronized(paintListeners) {
+ if(0>index) {
+ index = paintListeners.size()-1;
+ }
+ return (PaintListener) paintListeners.get(index);
+ }
+ }
+
protected void sendPaintEvent(int eventType, int x, int y, int w, int h) {
sendPaintEvent( new PaintEvent(eventType, this, System.currentTimeMillis(), x, y, w, h) );
}