From 988da6f30322176b8301d17709f5461c35a01e19 Mon Sep 17 00:00:00 2001
From: Sven Gothel <sgothel@jausoft.com>
Date: Tue, 17 Sep 2013 16:09:10 +0200
Subject: AWT Printing: Move init-test of setupPrint(..) to AWT-EDT Runnable ;
 GLJPanel: Attempt to initialize if not done yet (similar to GLCanvas)

---
 .../classes/javax/media/opengl/awt/GLCanvas.java   | 37 ++++++++--------
 .../classes/javax/media/opengl/awt/GLJPanel.java   | 41 ++++++++++--------
 .../classes/com/jogamp/newt/awt/NewtCanvasAWT.java | 50 ++++++++++++----------
 3 files changed, 70 insertions(+), 58 deletions(-)

(limited to 'src')

diff --git a/src/jogl/classes/javax/media/opengl/awt/GLCanvas.java b/src/jogl/classes/javax/media/opengl/awt/GLCanvas.java
index a519e33bb..c43f218df 100644
--- a/src/jogl/classes/javax/media/opengl/awt/GLCanvas.java
+++ b/src/jogl/classes/javax/media/opengl/awt/GLCanvas.java
@@ -732,24 +732,8 @@ public class GLCanvas extends Canvas implements AWTGLAutoDrawable, WindowClosing
   
   @Override
   public void setupPrint(double scaleMatX, double scaleMatY, int numSamples) {
-      if( !validateGLDrawable() ) {
-          if(DEBUG) {
-              System.err.println(getThreadName()+": Info: GLCanvas setupPrint - skipped GL render, drawable not valid yet");
-          }
-          return; // not yet available ..
-      }
-      if( !isVisible() ) {
-          if(DEBUG) {
-              System.err.println(getThreadName()+": Info: GLCanvas setupPrint - skipped GL render, drawable visible");
-          }
-          return; // not yet available ..
-      }
       printActive = true; 
-      sendReshape = false; // clear reshape flag
-      printNumSamples = AWTTilePainter.getNumSamples(numSamples, getChosenGLCapabilities());
-      if( DEBUG ) {
-          System.err.println("AWT print.setup: canvasSize "+getWidth()+"x"+getWidth()+", scaleMat "+scaleMatX+" x "+scaleMatY+", numSamples "+numSamples+" -> "+printNumSamples+", printAnimator "+printAnimator);
-      }
+      printNumSamples = numSamples;
       final int componentCount = isOpaque() ? 3 : 4;
       final TileRenderer printRenderer = new TileRenderer();
       printAWTTiles = new AWTTilePainter(printRenderer, componentCount, scaleMatX, scaleMatY, DEBUG);
@@ -758,12 +742,31 @@ public class GLCanvas extends Canvas implements AWTGLAutoDrawable, WindowClosing
   private final Runnable setupPrintOnEDT = new Runnable() {
       @Override
       public void run() {
+          if( !validateGLDrawable() ) {
+              if(DEBUG) {
+                  System.err.println(getThreadName()+": Info: GLCanvas setupPrint - skipped GL render, drawable not valid yet");
+              }
+              printActive = false; 
+              return; // not yet available ..
+          }
+          if( !isVisible() ) {
+              if(DEBUG) {
+                  System.err.println(getThreadName()+": Info: GLCanvas setupPrint - skipped GL render, drawable visible");
+              }
+              printActive = false; 
+              return; // not yet available ..
+          }
           sendReshape = false; // clear reshape flag
           printAnimator =  helper.getAnimator();
           if( null != printAnimator ) {
               printAnimator.remove(GLCanvas.this);
           }
           final GLCapabilities caps = (GLCapabilities)getChosenGLCapabilities().cloneMutable();
+          final int reqNumSamples = printNumSamples; 
+          printNumSamples = AWTTilePainter.getNumSamples(reqNumSamples, caps);
+          if( DEBUG ) {
+              System.err.println("AWT print.setup: canvasSize "+getWidth()+"x"+getWidth()+", scaleMat "+printAWTTiles.scaleMatX+" x "+printAWTTiles.scaleMatY+", numSamples "+reqNumSamples+" -> "+printNumSamples+", printAnimator "+printAnimator);
+          }
           if( caps.getSampleBuffers() ) {
               // Bug 830: swapGLContextAndAllGLEventListener and onscreen MSAA w/ NV/GLX
               printGLAD = GLCanvas.this;
diff --git a/src/jogl/classes/javax/media/opengl/awt/GLJPanel.java b/src/jogl/classes/javax/media/opengl/awt/GLJPanel.java
index f0c6b7beb..c66fba70b 100644
--- a/src/jogl/classes/javax/media/opengl/awt/GLJPanel.java
+++ b/src/jogl/classes/javax/media/opengl/awt/GLJPanel.java
@@ -505,25 +505,8 @@ public class GLJPanel extends JPanel implements AWTGLAutoDrawable, WindowClosing
   
   @Override
   public void setupPrint(double scaleMatX, double scaleMatY, int numSamples) {
-      if (!isInitialized) {
-          if(DEBUG) {
-              System.err.println(getThreadName()+": Info: GLJPanel setupPrint - skipped GL render, drawable not valid yet");
-          }
-          return; // not yet available ..
-      }
-      if( !isVisible() ) {
-          if(DEBUG) {
-              System.err.println(getThreadName()+": Info: GLJPanel setupPrint - skipped GL render, drawable visible");
-          }
-          return; // not yet available ..
-      }
       printActive = true; 
-      sendReshape = false; // clear reshape flag
-      handleReshape = false; // ditto
-      printNumSamples = AWTTilePainter.getNumSamples(numSamples, getChosenGLCapabilities());
-      if( DEBUG ) {
-          System.err.println("AWT print.setup: canvasSize "+getWidth()+"x"+getWidth()+", scaleMat "+scaleMatX+" x "+scaleMatY+", numSamples "+numSamples+" -> "+printNumSamples+", printAnimator "+printAnimator);
-      }
+      printNumSamples = numSamples;
       final int componentCount = isOpaque() ? 3 : 4;
       final TileRenderer printRenderer = new TileRenderer();
       printAWTTiles = new AWTTilePainter(printRenderer, componentCount, scaleMatX, scaleMatY, DEBUG);
@@ -532,6 +515,23 @@ public class GLJPanel extends JPanel implements AWTGLAutoDrawable, WindowClosing
   private final Runnable setupPrintOnEDT = new Runnable() {
       @Override
       public void run() {
+          if (backend == null || !isInitialized) {
+              createAndInitializeBackend();
+          }
+          if (!isInitialized) {
+              if(DEBUG) {
+                  System.err.println(getThreadName()+": Info: GLJPanel setupPrint - skipped GL render, drawable not valid yet");
+              }
+              printActive = false; 
+              return; // not yet available ..
+          }
+          if( !isVisible() ) {
+              if(DEBUG) {
+                  System.err.println(getThreadName()+": Info: GLJPanel setupPrint - skipped GL render, drawable visible");
+              }
+              printActive = false; 
+              return; // not yet available ..
+          }
           sendReshape = false; // clear reshape flag
           handleReshape = false; // ditto
           printAnimator =  helper.getAnimator();
@@ -541,6 +541,11 @@ public class GLJPanel extends JPanel implements AWTGLAutoDrawable, WindowClosing
           
           printGLAD = GLJPanel.this; // default: re-use 
           final GLCapabilities caps = (GLCapabilities)getChosenGLCapabilities().cloneMutable();
+          final int reqNumSamples = printNumSamples; 
+          printNumSamples = AWTTilePainter.getNumSamples(reqNumSamples, caps);
+          if( DEBUG ) {
+              System.err.println("AWT print.setup: canvasSize "+getWidth()+"x"+getWidth()+", scaleMat "+printAWTTiles.scaleMatX+" x "+printAWTTiles.scaleMatY+", numSamples "+reqNumSamples+" -> "+printNumSamples+", printAnimator "+printAnimator);
+          }
           if( printNumSamples != caps.getNumSamples() ) {
               caps.setDoubleBuffered(false);
               caps.setOnscreen(false);
diff --git a/src/newt/classes/com/jogamp/newt/awt/NewtCanvasAWT.java b/src/newt/classes/com/jogamp/newt/awt/NewtCanvasAWT.java
index a2d4eb7f0..64e9bb0f6 100644
--- a/src/newt/classes/com/jogamp/newt/awt/NewtCanvasAWT.java
+++ b/src/newt/classes/com/jogamp/newt/awt/NewtCanvasAWT.java
@@ -467,30 +467,8 @@ public class NewtCanvasAWT extends java.awt.Canvas implements WindowClosingProto
     
     @Override
     public void setupPrint(double scaleMatX, double scaleMatY, int numSamples) {
-        if( !validateComponent(true) ) {
-            if(DEBUG) {
-                System.err.println(getThreadName()+": Info: NewtCanvasAWT setupPrint - skipped GL render, drawable not valid yet");
-            }
-            return; // not yet available ..
-        }
-        if( !isVisible() ) {
-            if(DEBUG) {
-                System.err.println(getThreadName()+": Info: NewtCanvasAWT setupPrint - skipped GL render, drawable visible");
-            }
-            return; // not yet available ..
-        }
-        final GLAutoDrawable glad = getGLAD();
-        if( null == glad ) {
-            if( DEBUG ) {
-                System.err.println("AWT print.setup exit, newtChild not a GLAutoDrawable: "+newtChild);
-            }
-            return;
-        }
         printActive = true; 
-        printNumSamples = AWTTilePainter.getNumSamples(numSamples, glad.getChosenGLCapabilities());
-        if( DEBUG ) {
-            System.err.println("AWT print.setup: canvasSize "+getWidth()+"x"+getWidth()+", scaleMat "+scaleMatX+" x "+scaleMatY+", numSamples "+numSamples+" -> "+printNumSamples+", printAnimator "+printAnimator);
-        }
+        printNumSamples = numSamples;
         final int componentCount = isOpaque() ? 3 : 4;
         final TileRenderer printRenderer = new TileRenderer();
         printAWTTiles = new AWTTilePainter(printRenderer, componentCount, scaleMatX, scaleMatY, DEBUG);
@@ -499,12 +477,38 @@ public class NewtCanvasAWT extends java.awt.Canvas implements WindowClosingProto
     private final Runnable setupPrintOnEDT = new Runnable() {
         @Override
         public void run() {
+            if( !validateComponent(true) ) {
+                if(DEBUG) {
+                    System.err.println(getThreadName()+": Info: NewtCanvasAWT setupPrint - skipped GL render, drawable not valid yet");
+                }
+                printActive = false; 
+                return; // not yet available ..
+            }
+            if( !isVisible() ) {
+                if(DEBUG) {
+                    System.err.println(getThreadName()+": Info: NewtCanvasAWT setupPrint - skipped GL render, drawable visible");
+                }
+                printActive = false; 
+                return; // not yet available ..
+            }
             final GLAutoDrawable glad = getGLAD();
+            if( null == glad ) {
+                if( DEBUG ) {
+                    System.err.println("AWT print.setup exit, newtChild not a GLAutoDrawable: "+newtChild);
+                }
+                printActive = false; 
+                return;
+            }
             printAnimator =  glad.getAnimator();
             if( null != printAnimator ) {
                 printAnimator.remove(glad);
             }
             final GLCapabilities caps = (GLCapabilities)glad.getChosenGLCapabilities().cloneMutable();
+            final int reqNumSamples = printNumSamples; 
+            printNumSamples = AWTTilePainter.getNumSamples(reqNumSamples, caps);
+            if( DEBUG ) {
+                System.err.println("AWT print.setup: canvasSize "+getWidth()+"x"+getWidth()+", scaleMat "+printAWTTiles.scaleMatX+" x "+printAWTTiles.scaleMatY+", numSamples "+reqNumSamples+" -> "+printNumSamples+", printAnimator "+printAnimator);
+            }
             if( caps.getSampleBuffers() ) {
                 // Bug 830: swapGLContextAndAllGLEventListener and onscreen MSAA w/ NV/GLX
                 printGLAD = glad;
-- 
cgit v1.2.3