From 24eab4dc2a14eed97897ec61b69f7f845ab84e04 Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Wed, 6 Nov 2013 07:06:58 +0100 Subject: NEWT Window: Expose 'setVisible(boolean wait, boolean visible)' allowing applications to not block until window becomes visible. --- src/newt/classes/com/jogamp/newt/Window.java | 21 +++++++++++++++----- .../classes/com/jogamp/newt/opengl/GLWindow.java | 5 +++++ src/newt/classes/jogamp/newt/WindowImpl.java | 23 +++++++++++----------- 3 files changed, 33 insertions(+), 16 deletions(-) diff --git a/src/newt/classes/com/jogamp/newt/Window.java b/src/newt/classes/com/jogamp/newt/Window.java index 04eb07a25..869b56331 100644 --- a/src/newt/classes/com/jogamp/newt/Window.java +++ b/src/newt/classes/com/jogamp/newt/Window.java @@ -158,10 +158,21 @@ public interface Window extends NativeWindow, WindowClosingProtocol { void setWindowDestroyNotifyAction(Runnable r); /** - * setVisible makes the window and children visible if visible is true, + * Calls {@link #setVisible(boolean, boolean) setVisible(true, visible)}, + * i.e. blocks until the window becomes visible. + * @see #setVisible(boolean, boolean) + */ + void setVisible(boolean visible); + + /** + * setVisible(..) makes the window and children visible if visible is true, * otherwise the window and children becomes invisible. *

- * The setVisible(true) is responsible to actual create the native window. + * setVisible(wait, true) is responsible to actual create the native window. + *

+ *

+ * If wait is true, method blocks until window is {@link #isVisible() visible} and {@link #isNativeValid() valid}, + * otherwise method returns immediately. *

*

* Zero size semantics are respected, see {@link #setSize(int,int)}:
@@ -178,12 +189,12 @@ public interface Window extends NativeWindow, WindowClosingProtocol { *

*

* In case this window is a child window and has a {@link javax.media.nativewindow.NativeWindow} parent,
- * setVisible(true) has no effect as long the parent's is not valid yet, + * setVisible(wait, true) has no effect as long the parent's is not valid yet, * i.e. {@link javax.media.nativewindow.NativeWindow#getWindowHandle()} returns null.
- * setVisible(true) shall be repeated when the parent becomes valid. + * setVisible(wait, true) shall be repeated when the parent becomes valid. *

*/ - void setVisible(boolean visible); + void setVisible(boolean wait, boolean visible); boolean isVisible(); diff --git a/src/newt/classes/com/jogamp/newt/opengl/GLWindow.java b/src/newt/classes/com/jogamp/newt/opengl/GLWindow.java index 4f259fe9a..52f19f783 100644 --- a/src/newt/classes/com/jogamp/newt/opengl/GLWindow.java +++ b/src/newt/classes/com/jogamp/newt/opengl/GLWindow.java @@ -425,6 +425,11 @@ public class GLWindow extends GLAutoDrawableBase implements GLAutoDrawable, Wind window.setVisible(visible); } + @Override + public void setVisible(boolean wait, boolean visible) { + window.setVisible(wait, visible); + } + @Override public final void setSize(int width, int height) { window.setSize(width, height); diff --git a/src/newt/classes/jogamp/newt/WindowImpl.java b/src/newt/classes/jogamp/newt/WindowImpl.java index 5102fd26d..77c19ae05 100644 --- a/src/newt/classes/jogamp/newt/WindowImpl.java +++ b/src/newt/classes/jogamp/newt/WindowImpl.java @@ -148,7 +148,7 @@ public abstract class WindowImpl implements Window, NEWTEventConsumer private volatile int x = 64, y = 64; // client-area pos w/o insets private volatile Insets insets = new Insets(); // insets of decoration (if top-level && decorated) - private RecursiveLock windowLock = LockFactory.createRecursiveLock(); // Window instance wide lock + private final RecursiveLock windowLock = LockFactory.createRecursiveLock(); // Window instance wide lock private int surfaceLockCount = 0; // surface lock recursion count private ScreenImpl screen; // never null after create - may change reference though (reparent) @@ -177,10 +177,10 @@ public abstract class WindowImpl implements Window, NEWTEventConsumer private FocusRunnable focusAction = null; private KeyListener keyboardFocusHandler = null; - private SurfaceUpdatedHelper surfaceUpdatedHelper = new SurfaceUpdatedHelper(); + private final SurfaceUpdatedHelper surfaceUpdatedHelper = new SurfaceUpdatedHelper(); - private Object childWindowsLock = new Object(); - private ArrayList childWindows = new ArrayList(); + private final Object childWindowsLock = new Object(); + private final ArrayList childWindows = new ArrayList(); private ArrayList mouseListeners = new ArrayList(); @@ -196,7 +196,7 @@ public abstract class WindowImpl implements Window, NEWTEventConsumer lastButtonPressTime = 0; } } - private PointerState0 pState0 = new PointerState0(); + private final PointerState0 pState0 = new PointerState0(); /** from direct input: {@link WindowImpl#doPointerEvent(boolean, boolean, int[], short, int, int, boolean, short[], int[], int[], float[], float, float[], float)}. */ private static class PointerState1 extends PointerState0 { @@ -227,7 +227,7 @@ public abstract class WindowImpl implements Window, NEWTEventConsumer return null; } } - private PointerState1 pState1 = new PointerState1(); + private final PointerState1 pState1 = new PointerState1(); /** pointer names -> pointer ID (consecutive index, starting w/ 0) */ private final ArrayHashSet pName2pID = new ArrayHashSet(); @@ -534,7 +534,7 @@ public abstract class WindowImpl implements Window, NEWTEventConsumer //---------------------------------------------------------------------- // WindowClosingProtocol implementation // - private Object closingListenerLock = new Object(); + private final Object closingListenerLock = new Object(); private WindowClosingMode defaultCloseOperation = WindowClosingMode.DISPOSE_ON_CLOSE; @Override @@ -965,7 +965,8 @@ public abstract class WindowImpl implements Window, NEWTEventConsumer } } - protected void setVisible(boolean wait, boolean visible) { + @Override + public void setVisible(boolean wait, boolean visible) { if(DEBUG_IMPLEMENTATION) { System.err.println("Window setVisible: START ("+getThreadName()+") "+getX()+"/"+getY()+" "+getWidth()+"x"+getHeight()+", fs "+fullscreen+", windowHandle "+toHexString(windowHandle)+", visible: "+this.visible+" -> "+visible+", parentWindowHandle "+toHexString(parentWindowHandle)+", parentWindow "+(null!=parentWindow)); } @@ -3007,7 +3008,7 @@ public abstract class WindowImpl implements Window, NEWTEventConsumer private final IntBitfield keyPressedState = new IntBitfield( keyTrackingRange + 1 ); protected final boolean isKeyCodeTracked(final short keyCode) { - return ( 0xFFFF & (int)keyCode ) <= keyTrackingRange; + return ( 0xFFFF & keyCode ) <= keyTrackingRange; } /** @@ -3016,7 +3017,7 @@ public abstract class WindowImpl implements Window, NEWTEventConsumer * @return the previus pressed value */ protected final boolean setKeyPressed(short keyCode, boolean pressed) { - final int v = 0xFFFF & (int)keyCode; + final int v = 0xFFFF & keyCode; if( v <= keyTrackingRange ) { return keyPressedState.put(v, pressed); } @@ -3027,7 +3028,7 @@ public abstract class WindowImpl implements Window, NEWTEventConsumer * @return true if pressed, otherwise false */ protected final boolean isKeyPressed(short keyCode) { - final int v = 0xFFFF & (int)keyCode; + final int v = 0xFFFF & keyCode; if( v <= keyTrackingRange ) { return keyPressedState.get(v); } -- cgit v1.2.3