29package com.jogamp.opengl.test.junit.newt.parenting;
31import java.lang.reflect.*;
33import org.junit.Assert;
34import org.junit.BeforeClass;
36import org.junit.FixMethodOrder;
37import org.junit.runners.MethodSorters;
39import java.awt.Button;
40import java.awt.BorderLayout;
41import java.awt.Container;
43import javax.swing.JFrame;
44import javax.swing.JPanel;
45import javax.swing.SwingUtilities;
46import javax.swing.WindowConstants;
47import com.jogamp.opengl.*;
49import com.jogamp.opengl.util.Animator;
50import com.jogamp.common.util.InterruptSource;
51import com.jogamp.newt.*;
52import com.jogamp.newt.opengl.*;
53import com.jogamp.newt.awt.NewtCanvasAWT;
55import java.io.IOException;
57import com.jogamp.opengl.test.junit.util.*;
58import com.jogamp.opengl.test.junit.jogl.demos.es2.RedSquareES2;
60@FixMethodOrder(MethodSorters.NAME_ASCENDING)
62 static int width, height;
63 static long durationPerTest = 800;
64 static long waitReparent = 0;
74 static class GLDisturbanceAction
implements Runnable {
75 public boolean isRunning =
false;
76 private volatile boolean shallStop =
false;
85 public void waitUntilRunning() {
90 }
catch (
final InterruptedException e) { e.printStackTrace(); }
95 public void stopAndWaitUntilDone() {
101 }
catch (
final InterruptedException e) { e.printStackTrace(); }
110 System.err.println(
"$");
114 glad.
invoke(
true, glRunnable);
116 }
catch (
final Throwable t) {}
131 Assert.assertNotNull(glWindow1);
132 Assert.assertEquals(
false, glWindow1.
isVisible());
134 Assert.assertNull(glWindow1.
getParent());
135 glWindow1.
setTitle(
"testWindowParenting01CreateVisibleDestroy");
137 setDemoFields(demo1, glWindow1,
false);
143 final GLDisturbanceAction disturbanceAction =
new GLDisturbanceAction(glWindow1);
144 new InterruptSource.Thread(
null, disturbanceAction).start();
145 disturbanceAction.waitUntilRunning();
148 Assert.assertNotNull(newtCanvasAWT);
149 Assert.assertEquals(
false, glWindow1.
isVisible());
151 Assert.assertNull(glWindow1.
getParent());
153 final Container container1 =
new Container();
154 container1.setLayout(
new BorderLayout());
155 container1.add(
new Button(
"north"), BorderLayout.NORTH);
156 container1.add(
new Button(
"south"), BorderLayout.SOUTH);
157 container1.add(
new Button(
"east"), BorderLayout.EAST);
158 container1.add(
new Button(
"west"), BorderLayout.WEST);
159 container1.add(newtCanvasAWT, BorderLayout.CENTER);
161 final JPanel jPanel1 =
new JPanel();
162 jPanel1.setLayout(
new BorderLayout());
163 jPanel1.add(
new Button(
"north"), BorderLayout.NORTH);
164 jPanel1.add(
new Button(
"south"), BorderLayout.SOUTH);
165 jPanel1.add(
new Button(
"east"), BorderLayout.EAST);
166 jPanel1.add(
new Button(
"west"), BorderLayout.WEST);
167 jPanel1.add(container1, BorderLayout.CENTER);
169 final JFrame jFrame1 =
new JFrame(
"Swing Parent JFrame");
171 jFrame1.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
172 jFrame1.setContentPane(jPanel1);
173 System.err.println(
"Demos: 1 - Visible");
174 SwingUtilities.invokeAndWait(
new Runnable() {
176 jFrame1.setSize(width, height);
178 jFrame1.setVisible(
true);
190 System.err.println(
"Demos: 2 - StopAnimator");
192 Assert.assertEquals(
false, animator1.isAnimating());
194 SwingUtilities.invokeAndWait(
new Runnable() {
196 System.err.println(
"Demos: 3 - !Visible");
197 jFrame1.setVisible(
false);
201 SwingUtilities.invokeAndWait(
new Runnable() {
203 System.err.println(
"Demos: 4 - Visible");
204 jFrame1.setVisible(
true);
213 SwingUtilities.invokeAndWait(
new Runnable() {
215 System.err.println(
"Demos: 5 - X Container");
216 jPanel1.remove(container1);
223 SwingUtilities.invokeAndWait(
new Runnable() {
225 System.err.println(
"Demos: 6 - X Frame");
232 System.err.println(
"Demos: 7 - X GLWindow");
236 System.err.println(
"Demos: 8 - X DisturbanceThread");
237 disturbanceAction.stopAndWaitUntilDone();
246 Assert.assertNotNull(glWindow1);
247 Assert.assertEquals(
false, glWindow1.
isVisible());
249 Assert.assertNull(glWindow1.
getParent());
250 glWindow1.
setTitle(
"testWindowParenting01CreateVisibleDestroy");
252 setDemoFields(demo1, glWindow1,
false);
277 final GLDisturbanceAction disturbanceAction =
new GLDisturbanceAction(glWindow1);
278 new InterruptSource.Thread(
null, disturbanceAction).start();
279 disturbanceAction.waitUntilRunning();
282 Assert.assertNotNull(newtCanvasAWT);
283 Assert.assertEquals(
false, glWindow1.
isVisible());
285 Assert.assertNull(glWindow1.
getParent());
287 final Container container1 =
new Container();
288 container1.setLayout(
new BorderLayout());
289 container1.add(
new Button(
"north"), BorderLayout.NORTH);
290 container1.add(
new Button(
"south"), BorderLayout.SOUTH);
291 container1.add(
new Button(
"east"), BorderLayout.EAST);
292 container1.add(
new Button(
"west"), BorderLayout.WEST);
293 container1.add(newtCanvasAWT, BorderLayout.CENTER);
295 final JPanel jPanel1 =
new JPanel();
296 jPanel1.setLayout(
new BorderLayout());
297 jPanel1.add(
new Button(
"north"), BorderLayout.NORTH);
298 jPanel1.add(
new Button(
"south"), BorderLayout.SOUTH);
299 jPanel1.add(
new Button(
"east"), BorderLayout.EAST);
300 jPanel1.add(
new Button(
"west"), BorderLayout.WEST);
301 jPanel1.add(container1, BorderLayout.CENTER);
303 final JFrame jFrame1 =
new JFrame(
"Swing Parent JFrame");
305 jFrame1.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
306 jFrame1.setContentPane(jPanel1);
307 SwingUtilities.invokeAndWait(
new Runnable() {
309 jFrame1.setLocation(0, 0);
310 jFrame1.setSize(width, height);
311 jFrame1.setVisible(
true);
315 final JPanel jPanel2 =
new JPanel();
316 jPanel2.setLayout(
new BorderLayout());
317 jPanel2.add(
new Button(
"north"), BorderLayout.NORTH);
318 jPanel2.add(
new Button(
"south"), BorderLayout.SOUTH);
319 jPanel2.add(
new Button(
"east"), BorderLayout.EAST);
320 jPanel2.add(
new Button(
"west"), BorderLayout.WEST);
322 final JFrame jFrame2 =
new JFrame(
"Swing Parent JFrame");
324 jFrame2.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
325 jFrame2.setContentPane(jPanel2);
326 SwingUtilities.invokeAndWait(
new Runnable() {
328 jFrame2.setLocation(640, 480);
329 jFrame2.setSize(width, height);
330 jFrame2.setVisible(
true);
341 Thread.sleep(durationPerTest);
344 SwingUtilities.invokeAndWait(
new Runnable() {
346 container1.remove(newtCanvasAWT);
347 jPanel2.add(newtCanvasAWT, BorderLayout.CENTER);
353 SwingUtilities.invokeAndWait(
new Runnable() {
355 jPanel2.remove(newtCanvasAWT);
356 container1.add(newtCanvasAWT, BorderLayout.CENTER);
366 Assert.assertEquals(
false, animator1.isAnimating());
386 SwingUtilities.invokeAndWait(
new Runnable() {
388 System.err.println(
"Demos: 2 - !visible");
389 jFrame1.setVisible(
false);
390 System.err.println(
"Demos: 3 - !visible");
391 jFrame2.setVisible(
false);
395 SwingUtilities.invokeAndWait(
new Runnable() {
397 System.err.println(
"Demos: 4 - X frame");
399 System.err.println(
"Demos: 5 - X frame");
406 System.err.println(
"Demos: 6 - X GLWindow");
410 System.err.println(
"Demos: 7 - X DisturbanceThread");
411 disturbanceAction.stopAndWaitUntilDone();
415 Assert.assertNotNull(demo);
416 Assert.assertNotNull(glWindow);
427 static int atoi(
final String a) {
430 i = Integer.parseInt(a);
431 }
catch (
final Exception ex) { ex.printStackTrace(); }
435 public static void main(
final String args[])
throws IOException {
436 for(
int i=0; i<args.length; i++) {
437 if(args[i].equals(
"-time")) {
438 durationPerTest = atoi(args[++i]);
439 }
else if(args[i].equals(
"-wait")) {
440 waitReparent = atoi(args[++i]);
443 System.err.println(
"durationPerTest "+durationPerTest);
444 System.err.println(
"waitReparent "+waitReparent);
AWT Canvas containing a NEWT Window using native parenting.
NativeWindow getNativeWindow()
Returns the associated NativeWindow of this NativeWindowHolder, which is identical to getNativeSurfac...
An implementation of GLAutoDrawable and Window interface, using a delegated Window instance,...
final NativeWindow getParent()
final boolean isNativeValid()
final void setTitle(final String title)
final boolean isVisible()
final CapabilitiesImmutable getChosenCapabilities()
Gets an immutable set of chosen capabilities.
final void destroy()
Destroys all resources associated with this GLAutoDrawable, inclusive the GLContext.
final Window getDelegatedWindow()
If the implementation uses delegation, return the delegated Window instance, otherwise return this in...
static GLWindow create(final GLCapabilitiesImmutable caps)
Creates a new GLWindow attaching a new Window referencing a new default Screen and default Display wi...
Specifies a set of OpenGL capabilities.
static void main(final String args[])
void test01CreateVisibleDestroy1()
static void setDemoFields(final GLEventListener demo, final GLWindow glWindow, final boolean debug)
void test02AWTWinHopFrame2Frame()
static boolean setFieldIfExists(final Object instance, final String fieldName, final Object value)
static boolean waitForRealized(final Screen screen, final boolean realized, final Runnable waitAction)
static boolean waitForVisible(final Window win, final boolean visible, final Runnable waitAction)
final long getTotalFPSDuration()
final void setUpdateFPSFrames(final int frames, final PrintStream out)
final synchronized boolean start()
Starts this animator, if not running.
final synchronized boolean stop()
Stops this animator.
boolean isOnscreen()
Returns whether an on- or offscreen surface is requested, available or chosen.
Specifying NEWT's Window functionality:
A higher-level abstraction than GLDrawable which supplies an event based mechanism (GLEventListener) ...
boolean invoke(boolean wait, GLRunnable glRunnable)
Enqueues a one-shot GLRunnable, which will be executed within the next display() call after all regis...
void addGLEventListener(GLEventListener listener)
Adds the given listener to the end of this drawable queue.
Declares events which client code can use to manage OpenGL rendering into a GLAutoDrawable.