diff options
Diffstat (limited to 'src/test/com/jogamp')
3 files changed, 98 insertions, 143 deletions
diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/tile/TestTiledPrintingGearsAWT.java b/src/test/com/jogamp/opengl/test/junit/jogl/tile/TestTiledPrintingGearsAWT.java index 86c06247f..60ba35836 100644 --- a/src/test/com/jogamp/opengl/test/junit/jogl/tile/TestTiledPrintingGearsAWT.java +++ b/src/test/com/jogamp/opengl/test/junit/jogl/tile/TestTiledPrintingGearsAWT.java @@ -66,6 +66,8 @@ import com.jogamp.opengl.util.Animator; public class TestTiledPrintingGearsAWT extends TiledPrintingAWTBase { static boolean waitForKey = false; + /** only when run manually .. */ + static boolean allow600dpi = false; static GLProfile glp; static int width, height; @@ -87,7 +89,7 @@ public class TestTiledPrintingGearsAWT extends TiledPrintingAWTBase { public static void releaseClass() { } - protected void runTestGL(GLCapabilities caps, final boolean offscreenPrinting) throws InterruptedException, InvocationTargetException { + protected void runTestGL(GLCapabilities caps) throws InterruptedException, InvocationTargetException { final GLCanvas glCanvas = new GLCanvas(caps); Assert.assertNotNull(glCanvas); Dimension glc_sz = new Dimension(width, height); @@ -98,33 +100,33 @@ public class TestTiledPrintingGearsAWT extends TiledPrintingAWTBase { final Gears gears = new Gears(); glCanvas.addGLEventListener(gears); - final Frame frame = new Frame("AWT Print (offscr "+offscreenPrinting+")"); + final Frame frame = new Frame("AWT Print"); Assert.assertNotNull(frame); final ActionListener print72DPIAction = new ActionListener() { public void actionPerformed(ActionEvent e) { - doPrintManual(frame, glCanvas, TestTiledPrintingGearsAWT.this, offscreenPrinting, 72, false); + doPrintManual(frame, 72, false); } }; - final ActionListener print150DPIAction = new ActionListener() { + final ActionListener print300DPIAction = new ActionListener() { public void actionPerformed(ActionEvent e) { - doPrintManual(frame, glCanvas, TestTiledPrintingGearsAWT.this, offscreenPrinting, 150, false); + doPrintManual(frame, 300, false); } }; - final ActionListener print300DPIAction = new ActionListener() { + final ActionListener print600DPIAction = new ActionListener() { public void actionPerformed(ActionEvent e) { - doPrintManual(frame, glCanvas, TestTiledPrintingGearsAWT.this, offscreenPrinting, 300, false); + doPrintManual(frame, 600, false); } }; final Button print72DPIButton = new Button("72dpi"); print72DPIButton.addActionListener(print72DPIAction); - final Button print150DPIButton = new Button("150dpi"); - print150DPIButton.addActionListener(print150DPIAction); final Button print300DPIButton = new Button("300dpi"); print300DPIButton.addActionListener(print300DPIAction); + final Button print600DPIButton = new Button("600dpi"); + print600DPIButton.addActionListener(print600DPIAction); frame.setLayout(new BorderLayout()); Panel printPanel = new Panel(); printPanel.add(print72DPIButton); - printPanel.add(print150DPIButton); printPanel.add(print300DPIButton); + printPanel.add(print600DPIButton); Panel southPanel = new Panel(); southPanel.add(new Label("South")); Panel eastPanel = new Panel(); @@ -155,22 +157,22 @@ public class TestTiledPrintingGearsAWT extends TiledPrintingAWTBase { animator.setUpdateFPSFrames(60, System.err); animator.start(); - boolean dpi72Done = false; - boolean dpi150Done = false; + boolean printDone = false; while(!quitAdapter.shouldQuit() && animator.isAnimating() && ( 0 == duration || animator.getTotalFPSDuration()<duration )) { - Thread.sleep(100); - if( !dpi72Done ) { - dpi72Done = true; - doPrintAuto(frame, glCanvas, TestTiledPrintingGearsAWT.this, PageFormat.LANDSCAPE, null, offscreenPrinting, 72, false); + Thread.sleep(200); + if( !printDone ) { + printDone = true; + doPrintAuto(frame, PageFormat.LANDSCAPE, null, 72, false); waitUntilPrintJobsIdle(); - doPrintAuto(frame, glCanvas, TestTiledPrintingGearsAWT.this, PageFormat.LANDSCAPE, null, offscreenPrinting, 72, true); + doPrintAuto(frame, PageFormat.LANDSCAPE, null, 72, true); waitUntilPrintJobsIdle(); - } else if( !dpi150Done ) { - dpi150Done = true; - doPrintAuto(frame, glCanvas, TestTiledPrintingGearsAWT.this, PageFormat.LANDSCAPE, null, offscreenPrinting, 150, false); - waitUntilPrintJobsIdle(); - doPrintAuto(frame, glCanvas, TestTiledPrintingGearsAWT.this, PageFormat.LANDSCAPE, null, offscreenPrinting, 150, true); + // No AA needed for 300 dpi and greater :) + doPrintAuto(frame, PageFormat.LANDSCAPE, null, 300, false); waitUntilPrintJobsIdle(); + if( allow600dpi ) { + doPrintAuto(frame, PageFormat.LANDSCAPE, null, 600, false); + waitUntilPrintJobsIdle(); + } } } // try { Thread.sleep(4000); } catch (InterruptedException e) { } // time to finish print jobs .. FIXME ?? @@ -197,26 +199,21 @@ public class TestTiledPrintingGearsAWT extends TiledPrintingAWTBase { @Test public void test01_Onscreen_aa0() throws InterruptedException, InvocationTargetException { GLCapabilities caps = new GLCapabilities(glp); - runTestGL(caps, false); + runTestGL(caps); } - // @Test + @Test public void test02_Onscreen_aa8() throws InterruptedException, InvocationTargetException { GLCapabilities caps = new GLCapabilities(glp); caps.setSampleBuffers(true); caps.setNumSamples(8); // FIXME - runTestGL(caps, false); - } - - @Test - public void test03_Offscreen_aa0() throws InterruptedException, InvocationTargetException { - GLCapabilities caps = new GLCapabilities(glp); - runTestGL(caps, true); + runTestGL(caps); } static long duration = 500; // ms public static void main(String args[]) { + allow600dpi = true; for(int i=0; i<args.length; i++) { if(args[i].equals("-time")) { i++; diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/tile/TestTiledPrintingGearsSwingAWT.java b/src/test/com/jogamp/opengl/test/junit/jogl/tile/TestTiledPrintingGearsSwingAWT.java index 0f3267dc6..d63f73924 100644 --- a/src/test/com/jogamp/opengl/test/junit/jogl/tile/TestTiledPrintingGearsSwingAWT.java +++ b/src/test/com/jogamp/opengl/test/junit/jogl/tile/TestTiledPrintingGearsSwingAWT.java @@ -69,6 +69,8 @@ import com.jogamp.opengl.util.Animator; public class TestTiledPrintingGearsSwingAWT extends TiledPrintingAWTBase { static boolean waitForKey = false; + /** only when run manually .. */ + static boolean allow600dpi = false; static GLProfile glp; static int width, height; @@ -90,7 +92,7 @@ public class TestTiledPrintingGearsSwingAWT extends TiledPrintingAWTBase { public static void releaseClass() { } - protected void runTestGL(GLCapabilities caps, final boolean offscreenPrinting) throws InterruptedException, InvocationTargetException { + protected void runTestGL(GLCapabilities caps) throws InterruptedException, InvocationTargetException { final GLJPanel glJPanel = new GLJPanel(caps); Assert.assertNotNull(glJPanel); Dimension glc_sz = new Dimension(width, height); @@ -101,32 +103,32 @@ public class TestTiledPrintingGearsSwingAWT extends TiledPrintingAWTBase { final Gears gears = new Gears(); glJPanel.addGLEventListener(gears); - final JFrame frame = new JFrame("Swing Print (offscr "+offscreenPrinting+")"); + final JFrame frame = new JFrame("Swing Print"); Assert.assertNotNull(frame); final ActionListener print72DPIAction = new ActionListener() { public void actionPerformed(ActionEvent e) { - doPrintManual(frame, glJPanel, TestTiledPrintingGearsSwingAWT.this, offscreenPrinting, 72, false); + doPrintManual(frame, 72, false); } }; - final ActionListener print150DPIAction = new ActionListener() { + final ActionListener print300DPIAction = new ActionListener() { public void actionPerformed(ActionEvent e) { - doPrintManual(frame, glJPanel, TestTiledPrintingGearsSwingAWT.this, offscreenPrinting, 150, false); + doPrintManual(frame, 300, false); } }; - final ActionListener print300DPIAction = new ActionListener() { + final ActionListener print600DPIAction = new ActionListener() { public void actionPerformed(ActionEvent e) { - doPrintManual(frame, glJPanel, TestTiledPrintingGearsSwingAWT.this, offscreenPrinting, 300, false); + doPrintManual(frame, 600, false); } }; final Button print72DPIButton = new Button("72dpi"); print72DPIButton.addActionListener(print72DPIAction); - final Button print150DPIButton = new Button("150dpi"); - print150DPIButton.addActionListener(print150DPIAction); final Button print300DPIButton = new Button("300dpi"); print300DPIButton.addActionListener(print300DPIAction); + final Button print600DPIButton = new Button("600dpi"); + print600DPIButton.addActionListener(print600DPIAction); final JPanel printPanel = new JPanel(); printPanel.add(print72DPIButton); - printPanel.add(print150DPIButton); printPanel.add(print300DPIButton); + printPanel.add(print600DPIButton); final JPanel southPanel = new JPanel(); southPanel.add(new Label("South")); final JPanel eastPanel = new JPanel(); @@ -161,22 +163,22 @@ public class TestTiledPrintingGearsSwingAWT extends TiledPrintingAWTBase { animator.start(); Assert.assertEquals(true, animator.isAnimating()); - boolean dpi72Done = false; - boolean dpi150Done = false; + boolean printDone = false; while(!quitAdapter.shouldQuit() && animator.isAnimating() && ( 0 == duration || animator.getTotalFPSDuration()<duration )) { Thread.sleep(200); - if( !dpi72Done ) { - dpi72Done = true; - doPrintAuto(frame, glJPanel, TestTiledPrintingGearsSwingAWT.this, PageFormat.LANDSCAPE, null, offscreenPrinting, 72, false); - waitUntilPrintJobsIdle(); - doPrintAuto(frame, glJPanel, TestTiledPrintingGearsSwingAWT.this, PageFormat.LANDSCAPE, null, offscreenPrinting, 72, true); + if( !printDone ) { + printDone = true; + doPrintAuto(frame, PageFormat.LANDSCAPE, null, 72, false); waitUntilPrintJobsIdle(); - } else if( !dpi150Done ) { - dpi150Done = true; - doPrintAuto(frame, glJPanel, TestTiledPrintingGearsSwingAWT.this, PageFormat.LANDSCAPE, null, offscreenPrinting, 150, false); + doPrintAuto(frame, PageFormat.LANDSCAPE, null, 72, true); waitUntilPrintJobsIdle(); - doPrintAuto(frame, glJPanel, TestTiledPrintingGearsSwingAWT.this, PageFormat.LANDSCAPE, null, offscreenPrinting, 150, true); + // No AA needed for 300 dpi and greater :) + doPrintAuto(frame, PageFormat.LANDSCAPE, null, 300, false); waitUntilPrintJobsIdle(); + if( allow600dpi ) { + doPrintAuto(frame, PageFormat.LANDSCAPE, null, 600, false); + waitUntilPrintJobsIdle(); + } } } // try { Thread.sleep(4000); } catch (InterruptedException e) { } // time to finish print jobs .. FIXME ?? @@ -201,19 +203,23 @@ public class TestTiledPrintingGearsSwingAWT extends TiledPrintingAWTBase { } @Test - public void test01_Onscreen() throws InterruptedException, InvocationTargetException { + public void test01_Onscreen_aa0() throws InterruptedException, InvocationTargetException { GLCapabilities caps = new GLCapabilities(glp); - runTestGL(caps, false); + runTestGL(caps); } + @Test - public void test02_Offscreen() throws InterruptedException, InvocationTargetException { + public void test02_Onscreen_aa8() throws InterruptedException, InvocationTargetException { GLCapabilities caps = new GLCapabilities(glp); - runTestGL(caps, true); + caps.setSampleBuffers(true); + caps.setNumSamples(8); // FIXME + runTestGL(caps); } - + static long duration = 500; // ms public static void main(String args[]) { + allow600dpi = true; for(int i=0; i<args.length; i++) { if(args[i].equals("-time")) { i++; diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/tile/TiledPrintingAWTBase.java b/src/test/com/jogamp/opengl/test/junit/jogl/tile/TiledPrintingAWTBase.java index 6b4742b6e..50625d48c 100644 --- a/src/test/com/jogamp/opengl/test/junit/jogl/tile/TiledPrintingAWTBase.java +++ b/src/test/com/jogamp/opengl/test/junit/jogl/tile/TiledPrintingAWTBase.java @@ -33,7 +33,6 @@ import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Insets; import java.awt.RenderingHints; -import java.awt.image.BufferedImage; import java.awt.print.PageFormat; import java.awt.print.Paper; import java.awt.print.Printable; @@ -65,14 +64,10 @@ public abstract class TiledPrintingAWTBase extends UITestCase implements Printab public static final double A0_WIDTH_INCH = A0_WIDTH_MM / MM_PER_INCH; public static final double A0_HEIGHT_INCH = A0_WIDTH_MM / MM_PER_INCH; */ - /** Helper to pass desired AWTPrintLifecycle ! **/ - private AWTPrintLifecycle awtPrintObject = null; /** Helper to pass desired Frame to print! **/ private Frame frame; - /** Helper to pass desired on- and offscreen mode ! **/ - private boolean printOffscreen = false; /** Helper to pass desired DPI value ! **/ - private int printDPI = 72; + private int glDPI = 72; /** Helper to pass desired AA hint ! **/ private boolean printAA = false; @@ -126,94 +121,56 @@ public abstract class TiledPrintingAWTBase extends UITestCase implements Printab System.err.println("PF: Page orientation "+pf.getOrientation()); /** - * We fit the frame into the imageable area with the desired DPI. - * <p> - * We assume AWT painting happens w/ 72 dpi! - * </p> + * We fit the frame into the imageable area with for 72 dpi, + * assuming that is the default AWT painting density. * <p> * The frame borders are considered. * </p> + * <p> + * The frame's scale factor is used for the graphics print matrix + * of the overall print-job, hence no frame resize is required. + * </p> + * <p> + * The GL scale factor 'scaleGLMatXY', 72dpi/glDPI, is passed to the GL object + * which locally scales the print matrix and renders the scene with 1/scaleGLMatXY pixels. + * </p> */ final Insets frameInsets = frame.getInsets(); final int frameWidth = frame.getWidth(); final int frameHeight= frame.getHeight(); - final int frameWidthS; - final int frameHeightS; - final double scaleComp; + final double scaleComp72; { final int frameBorderW = frameInsets.left + frameInsets.right; final int frameBorderH = frameInsets.top + frameInsets.bottom; final double sx = pf.getImageableWidth() / ( frameWidth + frameBorderW ); final double sy = pf.getImageableHeight() / ( frameHeight + frameBorderH ); - scaleComp = Math.min(sx, sy) * ( printDPI/72.0 ); - if( 0f < scaleComp ) { - frameWidthS = (int) ( frameWidth*scaleComp ); // cut off FIXME - frameHeightS = (int) ( frameHeight*scaleComp ); // cut off FIXME - } else { - frameWidthS = frameWidth; - frameHeightS = frameHeight; - } + scaleComp72 = Math.min(sx, sy); } - // Since we fit the frame size into the imageable size respecting the DPI, - // we simply can scale the print graphics matrix to the DPI - // w/o the need to fiddle w/ the margins (matrix translation). - final double scaleGraphics = 72.0 / printDPI; - - System.err.println("PRINT offscreen: "+printOffscreen+", thread "+Thread.currentThread().getName()); - System.err.println("PRINT DPI: "+printDPI+", AA "+printAA+", scaleGraphics "+scaleGraphics+", scaleComp "+scaleComp+ - ", frame: border "+frameInsets+", size "+frameWidth+"x"+frameHeight+" -> "+frameWidthS+"x"+frameHeightS); + final double scaleGLMatXY = 72.0 / glDPI; + System.err.println("PRINT thread "+Thread.currentThread().getName()); + System.err.println("PRINT DPI: "+glDPI+", AA "+printAA+", scaleGL "+scaleGLMatXY+", scaleComp72 "+scaleComp72+ + ", frame: border "+frameInsets+", size "+frameWidth+"x"+frameHeight); final Graphics2D printG2D = (Graphics2D)g; - final Graphics2D offscreenG2D; - final BufferedImage offscreenImage; - final Graphics2D g2d; - if( printOffscreen ) { - offscreenImage = new BufferedImage(frameWidthS, frameHeightS, BufferedImage.TYPE_4BYTE_ABGR); - offscreenG2D = (Graphics2D) offscreenImage.getGraphics(); - offscreenG2D.setClip(0, 0, frameWidthS, frameHeightS); - g2d = offscreenG2D; - } else { - offscreenG2D = null; - offscreenImage = null; - g2d = printG2D; + final Graphics2D g2d = printG2D; - g2d.translate(pf.getImageableX(), pf.getImageableY()); - g2d.scale(scaleGraphics, scaleGraphics); - } + g2d.translate(pf.getImageableX(), pf.getImageableY()); + g2d.scale(scaleComp72, scaleComp72); + if( printAA ) { g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); } - awtPrintObject.setupPrint(g2d); + final AWTPrintLifecycle.Context ctx = AWTPrintLifecycle.Context.setupPrint(frame, g2d, scaleGLMatXY, scaleGLMatXY); try { + System.err.println("PRINT AWTPrintLifecycle.setup.count "+ctx.getCount()); AWTEDTExecutor.singleton.invoke(true, new Runnable() { - public void run() { - frame.setSize(frameWidthS, frameHeightS); - frame.invalidate(); - frame.validate(); - } - }); - - AWTEDTExecutor.singleton.invoke(true, new Runnable() { - public void run() { - frame.printAll(g2d); - } } ); - - System.err.println("PRINT DPI: reset frame size "+frameWidth+"x"+frameHeight); - AWTEDTExecutor.singleton.invoke(true, new Runnable() { - public void run() { - frame.setSize(frameWidth, frameHeight); - frame.invalidate(); - frame.validate(); + public void run() { + frame.printAll(g2d); } }); } finally { - awtPrintObject.releasePrint(); - } - - if( printOffscreen ) { - printG2D.translate(pf.getImageableX(), pf.getImageableY()); - printG2D.scale(scaleGraphics, scaleGraphics); - printG2D.drawImage(offscreenImage, 0, 0, offscreenImage.getWidth(), offscreenImage.getHeight(), null); // Null ImageObserver since image data is ready. + ctx.releasePrint(); + System.err.println("PRINT AWTPrintLifecycle.release.count "+ctx.getCount()); } /* tell the caller that this page is part of the printed document */ @@ -230,8 +187,7 @@ public abstract class TiledPrintingAWTBase extends UITestCase implements Printab super(); } - public void doPrintAuto(Frame frame, AWTPrintLifecycle awtPrintObject, - Printable printable, int pOrientation, Paper paper, boolean offscreen, int dpi, boolean antialiasing) { + public void doPrintAuto(Frame frame, int pOrientation, Paper paper, int dpi, boolean antialiasing) { lock.lock(); try { final PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); @@ -253,7 +209,7 @@ public abstract class TiledPrintingAWTBase extends UITestCase implements Printab FileOutputStream outstream; try { outstream = new FileOutputStream(fname); - Assert.assertTrue(doPrintAutoImpl(frame, awtPrintObject, printable, pj, factories[0].getPrintService(outstream), pOrientation, paper, offscreen, dpi, antialiasing)); + Assert.assertTrue(doPrintAutoImpl(frame, pj, factories[0].getPrintService(outstream), pOrientation, paper, dpi, antialiasing)); } catch (FileNotFoundException e) { Assert.assertNull("Unexpected exception", e); } @@ -268,7 +224,7 @@ public abstract class TiledPrintingAWTBase extends UITestCase implements Printab FileOutputStream outstream; try { outstream = new FileOutputStream(fname); - Assert.assertTrue(doPrintAutoImpl(frame, awtPrintObject, printable, pj, factories[0].getPrintService(outstream), pOrientation, paper, offscreen, dpi, antialiasing)); + Assert.assertTrue(doPrintAutoImpl(frame, pj, factories[0].getPrintService(outstream), pOrientation, paper, dpi, antialiasing)); } catch (FileNotFoundException e) { Assert.assertNull("Unexpected exception", e); } @@ -285,13 +241,11 @@ public abstract class TiledPrintingAWTBase extends UITestCase implements Printab final String sAA = antialiasing ? "aa_" : "raw"; return String.format("%-"+maxSimpleTestNameLen+"s-n%04d-dpi%03d-%s.%s", simpleTestName, printCount, dpi, sAA, suffix).replace(' ', '_'); } - private boolean doPrintAutoImpl(Frame frame, AWTPrintLifecycle awtPrintObject, - Printable printable, PrinterJob job, StreamPrintService ps, int pOrientation, - Paper paper, boolean offscreen, int dpi, boolean antialiasing) { - this.awtPrintObject = awtPrintObject; + private boolean doPrintAutoImpl(Frame frame, PrinterJob job, + StreamPrintService ps, int pOrientation, Paper paper, int dpi, + boolean antialiasing) { this.frame = frame; - printOffscreen = offscreen; - printDPI = dpi; + glDPI = dpi; printAA = antialiasing; boolean ok = true; try { @@ -305,7 +259,7 @@ public abstract class TiledPrintingAWTBase extends UITestCase implements Printab } pageFormat.setOrientation(pOrientation); // PageFormat.LANDSCAPE or PageFormat.PORTRAIT job.setPrintService(ps); - job.setPrintable(printable, pageFormat); + job.setPrintable(this, pageFormat); job.print(); } catch (PrinterException pe) { pe.printStackTrace(); @@ -314,16 +268,14 @@ public abstract class TiledPrintingAWTBase extends UITestCase implements Printab return ok; } - public void doPrintManual(Frame frame, AWTPrintLifecycle awtPrintObject, Printable printable, boolean offscreen, int dpi, boolean antialiasing) { + public void doPrintManual(Frame frame, int dpi, boolean antialiasing) { lock.lock(); try { - this.awtPrintObject = awtPrintObject; this.frame = frame; - printOffscreen = offscreen; - printDPI = dpi; + glDPI = dpi; printAA = antialiasing; PrinterJob job = PrinterJob.getPrinterJob(); - job.setPrintable(printable); + job.setPrintable(this); boolean ok = job.printDialog(); if (ok) { try { |