From c654bf3605ff4dca6d8231c2fe8b4db8e6b22b4c Mon Sep 17 00:00:00 2001
From: Sven Gothel
+ * Implementing {@link GLAutoDrawable} classes based on AWT
+ * supporting {@link Component#print(Graphics)} shall implement this interface.
+ *
+ * Users attempting to print an AWT {@link Container} containing {@link AWTPrintLifecycle} elements
+ * shall consider decorating the {@link Container#printAll(Graphics)} call withImplementations
+ * Usage
+ *
+ * {@link #setupPrint(Graphics2D, double, double) setupPrint(..)} and {@link #releasePrint()}
+ * on all {@link AWTPrintLifecycle} elements in the {@link Container}.
+ * To minimize this burden, a user can use {@link Context#setupPrint(Container, Graphics2D, double, double) Context.setupPrint(..)}:
+ *
+ * Graphics2D g2d;
+ * Frame frame;
+ * double scaleGLMatXY = 72.0/glDPI;
+ * ...
+ final AWTPrintLifecycle.Context ctx = AWTPrintLifecycle.Context.setupPrint(frame, g2d, scaleGLMatXY, scaleGLMatXY);
+ try {
+ AWTEDTExecutor.singleton.invoke(true, new Runnable() {
+ public void run() {
+ frame.printAll(g2d);
+ } });
+ } finally {
+ ctx.releasePrint();
+ }
+ *
+ *
+ *
+ * See Usage. + *
* @param g2d the {@link Graphics2D} instance, which will be used for printing. * @param scaleMatX {@link Graphics2D} {@link Graphics2D#scale(double, double) scaling factor}, i.e. rendering 1/scaleMatX * width pixels * @param scaleMatY {@link Graphics2D} {@link Graphics2D#scale(double, double) scaling factor}, i.e. rendering 1/scaleMatY * height pixels @@ -51,20 +83,49 @@ public interface AWTPrintLifecycle { /** * Shall be called after very last {@link Component#print(Graphics)}. + *+ * See Usage. + *
*/ void releasePrint(); + /** + * Convenient {@link AWTPrintLifecycle} context simplifying calling {@link AWTPrintLifecycle#setupPrint(Graphics2D, double, double) setupPrint(..)} + * and {@link AWTPrintLifecycle#releasePrint()} on all {@link AWTPrintLifecycle} elements of a {@link Container}. + *+ * See Usage. + *
+ */ public static class Context { + /** + *+ * See Usage. + *
+ * + * @param c container to be traversed through to perform {@link AWTPrintLifecycle#setupPrint(Graphics2D, double, double) setupPrint(..)} on all {@link AWTPrintLifecycle} elements. + * @param g2d the {@link Graphics2D} instance, which will be used for printing. + * @param scaleMatX {@link Graphics2D} {@link Graphics2D#scale(double, double) scaling factor}, i.e. rendering 1/scaleMatX * width pixels + * @param scaleMatY {@link Graphics2D} {@link Graphics2D#scale(double, double) scaling factor}, i.e. rendering 1/scaleMatY * height pixels + * @return the context + */ public static Context setupPrint(Container c, Graphics2D g2d, double scaleMatX, double scaleMatY) { final Context t = new Context(c, g2d, scaleMatX, scaleMatY); t.setupPrint(c); return t; } + /** + *+ * See Usage. + *
+ */ public void releasePrint() { count = AWTMisc.performAction(cont, AWTPrintLifecycle.class, releaseAction); } - + + /** + * @return count of performed actions of last {@link #setupPrint(Container, Graphics2D, double, double) setupPrint(..)} or {@link #releasePrint()}. + */ public int getCount() { return count; } private final Container cont; -- cgit v1.2.3