diff options
author | Sven Gothel <[email protected]> | 2013-09-28 04:03:04 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2013-09-28 04:03:04 +0200 |
commit | fe284b515d984198fdbe702837809f181625a457 (patch) | |
tree | ec20c43590c43ad185cbaca8119a66c8ba664615 /src/jogl/classes | |
parent | c8abb9d2c9a8c92f0c5c42aba13e3e80c69739dc (diff) |
AWT Printing: releasePrint() issue reshape from AWT-EDT; GLJPanel: Issue 'handleReshape' if panelSize/awtSize mismatch, otherwise 'sendReshape' and exception if offscreen size doesn't match panelSize.
Diffstat (limited to 'src/jogl/classes')
-rw-r--r-- | src/jogl/classes/javax/media/opengl/awt/GLCanvas.java | 4 | ||||
-rw-r--r-- | src/jogl/classes/javax/media/opengl/awt/GLJPanel.java | 40 |
2 files changed, 31 insertions, 13 deletions
diff --git a/src/jogl/classes/javax/media/opengl/awt/GLCanvas.java b/src/jogl/classes/javax/media/opengl/awt/GLCanvas.java index 379d9cdfe..f86a6a347 100644 --- a/src/jogl/classes/javax/media/opengl/awt/GLCanvas.java +++ b/src/jogl/classes/javax/media/opengl/awt/GLCanvas.java @@ -799,8 +799,6 @@ public class GLCanvas extends Canvas implements AWTGLAutoDrawable, WindowClosing } sendReshape = false; // clear reshape flag AWTEDTExecutor.singleton.invoke(getTreeLock(), true /* allowOnNonEDT */, true /* wait */, releasePrintOnEDT); - sendReshape = true; // trigger reshape, i.e. gl-viewport and -listener - this component might got resized! - display(); } private final Runnable releasePrintOnEDT = new Runnable() { @Override @@ -819,7 +817,9 @@ public class GLCanvas extends Canvas implements AWTGLAutoDrawable, WindowClosing printAnimator.add(GLCanvas.this); printAnimator = null; } + sendReshape = true; // trigger reshape, i.e. gl-viewport and -listener - this component might got resized! printActive = false; + display(); } }; diff --git a/src/jogl/classes/javax/media/opengl/awt/GLJPanel.java b/src/jogl/classes/javax/media/opengl/awt/GLJPanel.java index c639da367..01270dd4f 100644 --- a/src/jogl/classes/javax/media/opengl/awt/GLJPanel.java +++ b/src/jogl/classes/javax/media/opengl/awt/GLJPanel.java @@ -434,14 +434,16 @@ public class GLJPanel extends JPanel implements AWTGLAutoDrawable, WindowClosing // involve destroying the pbuffer (current context) and // re-creating it -- tricky to do properly while the context is // current - if (handleReshape) { - handleReshape = false; - sendReshape = handleReshape(); - } - - if( isVisible() && !printActive ) { - updater.setGraphics(g); - backend.doPaintComponent(g); + if( !printActive ) { + if (handleReshape) { + handleReshape = false; + sendReshape = handleReshape(); + } + + if( isVisible() ) { + updater.setGraphics(g); + backend.doPaintComponent(g); + } } } @@ -578,10 +580,8 @@ public class GLJPanel extends JPanel implements AWTGLAutoDrawable, WindowClosing sendReshape = false; // clear reshape flag handleReshape = false; // ditto AWTEDTExecutor.singleton.invoke(getTreeLock(), true /* allowOnNonEDT */, true /* wait */, releasePrintOnEDT); - sendReshape = true; // trigger reshape, i.e. gl-viewport and -listener - this component might got resized! - handleReshape = true; // ditto - display(); } + private final Runnable releasePrintOnEDT = new Runnable() { @Override public void run() { @@ -599,7 +599,22 @@ public class GLJPanel extends JPanel implements AWTGLAutoDrawable, WindowClosing printAnimator.add(GLJPanel.this); printAnimator = null; } + + // trigger reshape, i.e. gl-viewport and -listener - this component might got resized! + final int awtWidth = GLJPanel.this.getWidth(); + final int awtHeight= GLJPanel.this.getHeight(); + if( panelWidth != awtWidth || panelHeight != awtHeight ) { + if ( true || DEBUG ) { + System.err.println(getThreadName()+": GLJPanel.releasePrintOnEDT.0: reshape " +panelWidth+"x"+panelHeight + " -> " + awtWidth+"x"+awtHeight); + } + reshapeWidth = awtWidth; + reshapeHeight = awtHeight; + handleReshape = true; // complete resize, sendReshape will be set later + } else { + sendReshape = true; // only GL reshape + } printActive = false; + display(); } }; @@ -1415,6 +1430,9 @@ public class GLJPanel extends JPanel implements AWTGLAutoDrawable, WindowClosing System.err.println(getThreadName()+": GLJPanel.OffscreenBackend.postGL.0: panelSize "+panelWidth+"x"+panelHeight); } } + if( offscreenDrawable.getWidth() != panelWidth || offscreenDrawable.getHeight() != panelHeight ) { + throw new InternalError("OffscreenDrawable panelSize mismatch (reshape missed): panelSize "+panelWidth+"x"+panelHeight+" != drawable "+offscreenDrawable.getWidth()+"x"+offscreenDrawable.getHeight()+", on thread "+getThreadName()); + } final IntBuffer readBackInts; if( !flipVertical || null != glslTextureRaster ) { |