From 5ebd08709bceee1a7bee45cb042c60e299140fdf Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Wed, 20 Mar 2019 23:01:25 +0100 Subject: Adding NativeWindowHolder extends NativeSurfaceHolder; API Doc for NEWTDemoListener NativeWindowHolder abstracts access to is-a or has-a parent component's NativeWindow like NewtCanvasAWT, NewtCanvasJFX and NewtCanvasSWT Adding API Doc for NEWTDemoListener. --- .../classes/com/jogamp/newt/awt/NewtCanvasAWT.java | 21 +++++++++--- .../com/jogamp/newt/javafx/NewtCanvasJFX.java | 37 +++++++++++---------- .../jogamp/newt/opengl/util/NEWTDemoListener.java | 38 ++++++++++++++++++---- .../classes/com/jogamp/newt/swt/NewtCanvasSWT.java | 16 +++++++-- 4 files changed, 83 insertions(+), 29 deletions(-) (limited to 'src/newt') diff --git a/src/newt/classes/com/jogamp/newt/awt/NewtCanvasAWT.java b/src/newt/classes/com/jogamp/newt/awt/NewtCanvasAWT.java index dfe2f5950..a0083b4ea 100644 --- a/src/newt/classes/com/jogamp/newt/awt/NewtCanvasAWT.java +++ b/src/newt/classes/com/jogamp/newt/awt/NewtCanvasAWT.java @@ -49,10 +49,11 @@ import java.security.PrivilegedAction; import java.util.Set; import com.jogamp.nativewindow.CapabilitiesImmutable; +import com.jogamp.nativewindow.NativeSurface; import com.jogamp.nativewindow.NativeWindow; +import com.jogamp.nativewindow.NativeWindowHolder; import com.jogamp.nativewindow.OffscreenLayerOption; import com.jogamp.nativewindow.WindowClosingProtocol; -import com.jogamp.nativewindow.WindowClosingProtocol.WindowClosingMode; import com.jogamp.opengl.GLAnimatorControl; import com.jogamp.opengl.GLAutoDrawable; import com.jogamp.opengl.GLCapabilities; @@ -101,7 +102,7 @@ import com.jogamp.opengl.util.TileRenderer; * the underlying JAWT mechanism to composite the image, if supported. */ @SuppressWarnings("serial") -public class NewtCanvasAWT extends java.awt.Canvas implements WindowClosingProtocol, OffscreenLayerOption, AWTPrintLifecycle { +public class NewtCanvasAWT extends java.awt.Canvas implements NativeWindowHolder, WindowClosingProtocol, OffscreenLayerOption, AWTPrintLifecycle { public static final boolean DEBUG = Debug.debug("Window"); private final Object sync = new Object(); @@ -421,10 +422,22 @@ public class NewtCanvasAWT extends java.awt.Canvas implements WindowClosingProto return newtChild; } - /** @return this AWT Canvas NativeWindow representation, may be null in case {@link #removeNotify()} has been called, - * or {@link #addNotify()} hasn't been called yet.*/ + /** + * {@inheritDoc} + * @return this AWT Canvas {@link NativeWindow} representation, may be null in case {@link #removeNotify()} has been called, + * or {@link #addNotify()} hasn't been called yet. + */ + @Override public NativeWindow getNativeWindow() { return jawtWindow; } + /** + * {@inheritDoc} + * @return this AWT Canvas {@link NativeSurface} representation, may be null in case {@link #removeNotify()} has been called, + * or {@link #addNotify()} hasn't been called yet. + */ + @Override + public NativeSurface getNativeSurface() { return jawtWindow; } + @Override public WindowClosingMode getDefaultCloseOperation() { return awtWindowClosingProtocol.getDefaultCloseOperation(); diff --git a/src/newt/classes/com/jogamp/newt/javafx/NewtCanvasJFX.java b/src/newt/classes/com/jogamp/newt/javafx/NewtCanvasJFX.java index 9618a28d6..721922ba9 100644 --- a/src/newt/classes/com/jogamp/newt/javafx/NewtCanvasJFX.java +++ b/src/newt/classes/com/jogamp/newt/javafx/NewtCanvasJFX.java @@ -37,6 +37,7 @@ import com.jogamp.nativewindow.NativeSurface; import com.jogamp.nativewindow.NativeWindow; import com.jogamp.nativewindow.NativeWindowException; import com.jogamp.nativewindow.NativeWindowFactory; +import com.jogamp.nativewindow.NativeWindowHolder; import com.jogamp.nativewindow.SurfaceUpdatedListener; import com.jogamp.nativewindow.WindowClosingProtocol; import com.jogamp.nativewindow.WindowClosingProtocol.WindowClosingMode; @@ -77,9 +78,8 @@ import com.jogamp.newt.util.EDTUtil; * mandatory JavaFX lifecycle operation on the JavaFX thread. *

*/ -public class NewtCanvasJFX extends Canvas implements WindowClosingProtocol { +public class NewtCanvasJFX extends Canvas implements NativeWindowHolder, WindowClosingProtocol { private static final boolean DEBUG = Debug.debug("Window"); - private volatile javafx.stage.Window parentWindow = null; private volatile AbstractGraphicsScreen screen = null; @@ -127,24 +127,16 @@ public class NewtCanvasJFX extends Canvas implements WindowClosingProtocol { updateParentWindowAndScreen(); - this.widthProperty().addListener(new ChangeListener() { + final ChangeListener sizeListener = new ChangeListener() { @Override public void changed(final ObservableValue observable, final Number oldValue, final Number newValue) { if( DEBUG ) { - System.err.println("NewtCanvasJFX.Event.Width, "+oldValue.doubleValue()+" -> "+newValue.doubleValue()+", has "+getWidth()); + System.err.println("NewtCanvasJFX.Event.Size, "+oldValue.doubleValue()+" -> "+newValue.doubleValue()+", has "+getWidth()+"x"+getHeight()); } - updateSizeCheck(newValue.intValue(), (int)getHeight()); + updateSizeCheck((int)getWidth(), (int)getHeight()); repaintAction(isVisible()); - } - }); - this.heightProperty().addListener(new ChangeListener() { - @Override public void changed(final ObservableValue observable, final Number oldValue, final Number newValue) { - if( DEBUG ) { - System.err.println("NewtCanvasJFX.Event.Height, "+oldValue.doubleValue()+" -> "+newValue.doubleValue()+", has "+getHeight()); - } - updateSizeCheck((int)getWidth(), newValue.intValue()); - repaintAction(isVisible()); - } - }); + } }; + this.widthProperty().addListener(sizeListener); + this.heightProperty().addListener(sizeListener); this.visibleProperty().addListener(new ChangeListener() { @Override public void changed(final ObservableValue observable, final Boolean oldValue, final Boolean newValue) { if( DEBUG ) { @@ -468,9 +460,20 @@ public class NewtCanvasJFX extends Canvas implements WindowClosingProtocol { return newtChild; } - /** @return this JFX Canvas NativeWindow representation, may be null in case it has not been realized. */ + /** + * {@inheritDoc} + * @return this JFX Canvas {@link NativeWindow} representation, may be null in case it has not been realized + */ + @Override public NativeWindow getNativeWindow() { return nativeWindow; } + /** + * {@inheritDoc} + * @return this JFX Canvas {@link NativeSurface} representation, may be null in case it has not been realized + */ + @Override + public NativeSurface getNativeSurface() { return nativeWindow; } + @Override public WindowClosingMode getDefaultCloseOperation() { return closingMode; diff --git a/src/newt/classes/com/jogamp/newt/opengl/util/NEWTDemoListener.java b/src/newt/classes/com/jogamp/newt/opengl/util/NEWTDemoListener.java index 84c4683db..568b5d0bb 100644 --- a/src/newt/classes/com/jogamp/newt/opengl/util/NEWTDemoListener.java +++ b/src/newt/classes/com/jogamp/newt/opengl/util/NEWTDemoListener.java @@ -34,6 +34,7 @@ import java.util.List; import com.jogamp.common.util.IOUtil; import com.jogamp.nativewindow.CapabilitiesImmutable; import com.jogamp.nativewindow.ScalableSurface; +import com.jogamp.newt.Window; import com.jogamp.newt.Display; import com.jogamp.newt.Display.PointerIcon; import com.jogamp.newt.event.KeyEvent; @@ -47,12 +48,37 @@ import com.jogamp.opengl.FPSCounter; import com.jogamp.opengl.GL; import com.jogamp.opengl.GLAnimatorControl; import com.jogamp.opengl.GLAutoDrawable; +import com.jogamp.opengl.GLDrawable; import com.jogamp.opengl.GLRunnable; import com.jogamp.opengl.util.Gamma; import com.jogamp.opengl.util.PNGPixelRect; import jogamp.newt.driver.PNGIcon; +/** + * NEWT {@link GLWindow} Demo functionality + *
    + *
  • SPACE: Toggle animator {@link GLAnimatorControl#pause() pause}/{@link GLAnimatorControl#resume() resume}
  • + *
  • A: Toggle window {@link Window#setAlwaysOnTop(boolean) always on top}
  • + *
  • B: Toggle window {@link Window#setAlwaysOnBottom(boolean) always on bottom}
  • + *
  • C: Toggle different {@link Window#setPointerIcon(PointerIcon) pointer icons}
  • + *
  • D: Toggle window {@link Window#setUndecorated(boolean) decoration on/off}
  • + *
  • F: Toggle window {@link Window#setFullscreen(boolean) fullscreen on/off}
  • + *
  • Three-Finger Double-Tap: Toggle window {@link Window#setFullscreen(boolean) fullscreen on/off}
  • + *
  • G: Increase {@link Gamma#setDisplayGamma(GLDrawable, float, float, float) gamma} by 0.1, +SHIFT decrease gamma by 0.1
  • + *
  • I: Toggle {@link Window#setPointerVisible(boolean) pointer visbility}
  • + *
  • J: Toggle {@link Window#confinePointer(boolean) pointer jail (confine to window)}
  • + *
  • M: Toggle {@link Window#setMaximized(boolean, boolean) window maximized}: Y, +CTRL off, +SHIFT toggle X+Y, +ALT X
  • + *
  • P: Set window {@link Window#setPosition(int, int) position to 100/100}
  • + *
  • Q: Quit
  • + *
  • R: Toggle window {@link Window#setResizable(boolean) resizable}
  • + *
  • S: Toggle window {@link Window#setSticky(boolean) sticky}
  • + *
  • V: Toggle window {@link Window#setVisible(boolean) visibility} for 5s
  • + *
  • V: +CTRL: Rotate {@link GL#setSwapInterval(int) swap interval} -1, 0, 1
  • + *
  • W: {@link Window#warpPointer(int, int) Warp pointer} to center of window
  • + *
  • X: Toggle {@link ScalableSurface#setSurfaceScale(float[]) [{@link ScalableSurface#IDENTITY_PIXELSCALE}, {@link ScalableSurface#AUTOMAX_PIXELSCALE}]
  • + *
+ */ public class NEWTDemoListener extends WindowAdapter implements KeyListener, MouseListener { protected final GLWindow glWindow; final PointerIcon[] pointerIcons; @@ -230,12 +256,6 @@ public class NEWTDemoListener extends WindowAdapter implements KeyListener, Mous printlnState("[set maximize post]", "max[vert "+vert+", horz "+horz+"]"); } } ); break; - case KeyEvent.VK_Q: - if( quitAdapterEnabled && 0 == e.getModifiers() ) { - System.err.println("QUIT Key "+Thread.currentThread()); - quitAdapterShouldQuit = true; - } - break; case KeyEvent.VK_P: e.setConsumed(true); glWindow.invokeOnNewThread(null, false, new Runnable() { @@ -245,6 +265,12 @@ public class NEWTDemoListener extends WindowAdapter implements KeyListener, Mous printlnState("[set position post]"); } } ); break; + case KeyEvent.VK_Q: + if( quitAdapterEnabled && 0 == e.getModifiers() ) { + System.err.println("QUIT Key "+Thread.currentThread()); + quitAdapterShouldQuit = true; + } + break; case KeyEvent.VK_R: e.setConsumed(true); glWindow.invokeOnNewThread(null, false, new Runnable() { diff --git a/src/newt/classes/com/jogamp/newt/swt/NewtCanvasSWT.java b/src/newt/classes/com/jogamp/newt/swt/NewtCanvasSWT.java index af4e854c9..d1bd638d8 100644 --- a/src/newt/classes/com/jogamp/newt/swt/NewtCanvasSWT.java +++ b/src/newt/classes/com/jogamp/newt/swt/NewtCanvasSWT.java @@ -38,6 +38,7 @@ import com.jogamp.nativewindow.NativeSurface; import com.jogamp.nativewindow.NativeWindow; import com.jogamp.nativewindow.NativeWindowException; import com.jogamp.nativewindow.NativeWindowFactory; +import com.jogamp.nativewindow.NativeWindowHolder; import com.jogamp.nativewindow.SurfaceUpdatedListener; import com.jogamp.nativewindow.WindowClosingProtocol; import com.jogamp.nativewindow.WindowClosingProtocol.WindowClosingMode; @@ -71,7 +72,7 @@ import com.jogamp.newt.util.EDTUtil; * Implementation allows use of custom {@link GLCapabilities}. *

*/ -public class NewtCanvasSWT extends Canvas implements WindowClosingProtocol { +public class NewtCanvasSWT extends Canvas implements NativeWindowHolder, WindowClosingProtocol { private static final boolean DEBUG = Debug.debug("Window"); private final AbstractGraphicsScreen screen; @@ -332,9 +333,20 @@ public class NewtCanvasSWT extends Canvas implements WindowClosingProtocol { return new Point(parentLoc[0].x, parentLoc[0].y); } - /** @return this SWT Canvas NativeWindow representation, may be null in case it has not been realized. */ + /** + * {@inheritDoc} + * @return this SWT Canvas {@link NativeWindow} representation, may be null in case it has not been realized + */ + @Override public NativeWindow getNativeWindow() { return nativeWindow; } + /** + * {@inheritDoc} + * @return this SWT Canvas {@link NativeSurface} representation, may be null in case it has not been realized + */ + @Override + public NativeSurface getNativeSurface() { return nativeWindow; } + @Override public WindowClosingMode getDefaultCloseOperation() { return closingMode; -- cgit v1.2.3