28package com.jogamp.opengl.test.junit.jogl.awt;
30import java.awt.BorderLayout;
31import java.awt.event.ActionEvent;
32import java.awt.event.ActionListener;
33import java.lang.reflect.InvocationTargetException;
35import com.jogamp.opengl.GLCapabilities;
36import com.jogamp.opengl.GLProfile;
37import com.jogamp.opengl.awt.GLCanvas;
38import javax.swing.JButton;
39import javax.swing.JFrame;
40import javax.swing.JPanel;
41import javax.swing.SwingUtilities;
43import org.junit.Assert;
44import org.junit.FixMethodOrder;
46import org.junit.runners.MethodSorters;
48import com.jogamp.opengl.test.junit.jogl.demos.es2.GearsES2;
49import com.jogamp.opengl.test.junit.util.AWTRobotUtil;
50import com.jogamp.opengl.test.junit.util.MiscUtils;
51import com.jogamp.opengl.test.junit.util.UITestCase;
66@FixMethodOrder(MethodSorters.NAME_ASCENDING)
68 static long durationPerTest = 500*4;
69 static boolean manual =
false;
72 public void test01AllVisible() throws InterruptedException, InvocationTargetException {
81 private void test(
final boolean onlyVisibleWithCanvas)
throws InterruptedException, InvocationTargetException {
82 final JFrame frame1 =
new JFrame(
"Bug889 #1");
83 final JPanel panel1 =
new javax.swing.JPanel();
84 panel1.setLayout(
new BorderLayout());
85 panel1.setSize(
new java.awt.Dimension(640, 480));
86 frame1.setContentPane(panel1);
87 frame1.setSize(640, 480);
88 frame1.setLocation(64, 64);
90 final JFrame frame2 =
new JFrame(
"Bug889 #2");
91 final JPanel panel2 =
new javax.swing.JPanel();
92 panel2.setLayout(
new BorderLayout());
93 panel2.setSize(
new java.awt.Dimension(640, 480));
94 frame2.setContentPane(panel2);
95 frame2.setSize(640, 480);
96 frame2.setLocation(800, 64);
101 glCanvas.
setSize(
new java.awt.Dimension(640, 480));
103 panel1.add(glCanvas, BorderLayout.CENTER);
105 final JButton bMoveP1toP2 =
new JButton(
"Move to Panel2");
106 bMoveP1toP2.addActionListener(
new ActionListener() {
108 public void actionPerformed(
final java.awt.event.ActionEvent evt) {
109 System.err.println(
"XXXX Move P1 -> P2 - START");
110 dumpGLCanvasStats(glCanvas);
111 panel2.add(glCanvas, BorderLayout.CENTER);
112 if( onlyVisibleWithCanvas ) {
113 frame1.setVisible(
false);
114 frame2.setVisible(
true);
120 dumpGLCanvasStats(glCanvas);
121 System.err.println(
"XXXX Move P1 -> P2 - END");
124 panel1.add(bMoveP1toP2, BorderLayout.NORTH);
126 final JButton bMoveP2toP1 =
new JButton(
"Move to Panel1");
127 bMoveP2toP1.addActionListener(
new ActionListener() {
129 public void actionPerformed(
final ActionEvent e) {
130 System.err.println(
"XXXX Move P2 -> P1 - START");
131 dumpGLCanvasStats(glCanvas);
132 panel1.add(glCanvas, BorderLayout.CENTER);
133 if( onlyVisibleWithCanvas ) {
134 frame2.setVisible(
false);
135 frame1.setVisible(
true);
141 dumpGLCanvasStats(glCanvas);
142 System.err.println(
"XXXX Move P2 -> P1 - END");
145 panel2.add(bMoveP2toP1, BorderLayout.NORTH);
147 javax.swing.SwingUtilities.invokeAndWait(
new Runnable() {
150 System.err.println(
"XXX SetVisible ON XXX GLCanvas on Panel1("+
id(panel1)+
")");
151 if( onlyVisibleWithCanvas ) {
152 frame1.setVisible(
true);
154 frame1.setVisible(
true);
155 frame2.setVisible(
true);
158 Assert.assertEquals(
true, AWTRobotUtil.waitForVisible(frame1,
true,
null));
159 Assert.assertEquals(
true, AWTRobotUtil.waitForRealized(glCanvas,
true,
null));
160 dumpGLCanvasStats(glCanvas);
163 for(
long w=durationPerTest; w>0; w-=100) {
167 javax.swing.SwingUtilities.invokeAndWait(
new Runnable() {
169 System.err.println(
"XXXX Add GLCanvas Panel1("+
id(panel1)+
" -> Panel2("+
id(panel2)+
") START");
170 dumpGLCanvasStats(glCanvas);
171 panel2.add(glCanvas, BorderLayout.CENTER);
172 if( onlyVisibleWithCanvas ) {
173 frame1.setVisible(
false);
174 frame2.setVisible(
true);
180 dumpGLCanvasStats(glCanvas);
182 Thread.sleep(durationPerTest/4);
184 javax.swing.SwingUtilities.invokeAndWait(
new Runnable() {
186 System.err.println(
"XXXX Add GLCanvas Panel2("+
id(panel2)+
") -> Panel1("+
id(panel1)+
" START");
187 dumpGLCanvasStats(glCanvas);
188 panel1.add(glCanvas, BorderLayout.CENTER);
189 if( onlyVisibleWithCanvas ) {
190 frame2.setVisible(
false);
191 frame1.setVisible(
true);
197 dumpGLCanvasStats(glCanvas);
199 Thread.sleep(durationPerTest/4);
201 javax.swing.SwingUtilities.invokeAndWait(
new Runnable() {
203 System.err.println(
"XXXX Add GLCanvas Panel1("+
id(panel1)+
" -> Panel2("+
id(panel2)+
") START");
204 dumpGLCanvasStats(glCanvas);
205 panel2.add(glCanvas, BorderLayout.CENTER);
206 if( onlyVisibleWithCanvas ) {
207 frame1.setVisible(
false);
208 frame2.setVisible(
true);
214 dumpGLCanvasStats(glCanvas);
216 Thread.sleep(durationPerTest/4);
218 javax.swing.SwingUtilities.invokeAndWait(
new Runnable() {
220 System.err.println(
"XXXX Add GLCanvas Panel2("+
id(panel2)+
") -> Panel1("+
id(panel1)+
" START");
221 dumpGLCanvasStats(glCanvas);
222 panel1.add(glCanvas, BorderLayout.CENTER);
223 if( onlyVisibleWithCanvas ) {
224 frame2.setVisible(
false);
225 frame1.setVisible(
true);
231 dumpGLCanvasStats(glCanvas);
233 Thread.sleep(durationPerTest/4);
236 SwingUtilities.invokeLater(
new Runnable() {
238 System.err.println(
"XXX SetVisible OFF XXX");
244 private static String id(
final Object obj) {
return "0x"+Integer.toHexString(obj.hashCode()); }
246 static void dumpGLCanvasStats(
final GLCanvas glCanvas) {
247 System.err.println(
"XXXX GLCanvas: comp "+glCanvas+
", visible "+glCanvas.isVisible()+
", showing "+glCanvas.isShowing()+
248 ", displayable "+glCanvas.isDisplayable()+
", "+glCanvas.getSurfaceWidth()+
"x"+glCanvas.getSurfaceHeight());
251 public static void main(
final String args[]) {
252 for(
int i=0; i<args.length; i++) {
253 if(args[i].equals(
"-time")) {
254 durationPerTest =
MiscUtils.
atoi(args[++i], (
int)durationPerTest);
255 }
else if(args[i].equals(
"-manual")) {
Specifies a set of OpenGL capabilities.
Specifies the the OpenGL profile.
static final String GL2ES2
The intersection of the desktop GL3, GL2 and embedded ES2 profile.
static GLProfile get(final AbstractGraphicsDevice device, String profile)
Returns a GLProfile object.
A heavyweight AWT component which provides OpenGL rendering support.
void addGLEventListener(final GLEventListener listener)
Adds the given listener to the end of this drawable queue.
Moving GLCanvas between 2 AWT JFrame.
static void main(final String args[])
void test02VisibleWithCanvas()
static int atoi(final String str, final int def)
void setSize(int width, int height)
Requests a new width and height for this AWTGLAutoDrawable.