package org.geogebra.desktop.export.epsgraphics; import java.awt.BasicStroke; import java.awt.image.BufferedImage; import java.util.LinkedList; import org.geogebra.common.awt.GAffineTransform; import org.geogebra.common.factories.AwtFactory; import org.geogebra.common.util.debug.Log; import org.geogebra.desktop.awt.GAffineTransformD; import org.geogebra.desktop.awt.GBasicStrokeD; import org.geogebra.desktop.awt.GBufferedImageD; import org.geogebra.desktop.awt.GColorD; import org.geogebra.desktop.awt.GFontD; import org.geogebra.desktop.awt.GGenericRectangle2DD; import org.geogebra.desktop.awt.GLine2DD; import org.geogebra.desktop.factories.AwtFactoryD; import com.himamis.retex.renderer.desktop.font.FontD; import com.himamis.retex.renderer.desktop.graphics.ColorD; import com.himamis.retex.renderer.desktop.graphics.StrokeD; import com.himamis.retex.renderer.desktop.graphics.TransformD; import com.himamis.retex.renderer.share.platform.font.Font; import com.himamis.retex.renderer.share.platform.font.FontRenderContext; import com.himamis.retex.renderer.share.platform.geom.Line2D; import com.himamis.retex.renderer.share.platform.geom.Rectangle2D; import com.himamis.retex.renderer.share.platform.geom.RoundRectangle2D; import com.himamis.retex.renderer.share.platform.graphics.Color; import com.himamis.retex.renderer.share.platform.graphics.Graphics2DInterface; import com.himamis.retex.renderer.share.platform.graphics.Image; import com.himamis.retex.renderer.share.platform.graphics.Stroke; import com.himamis.retex.renderer.share.platform.graphics.Transform; /** * * wrapper so that LaTeX can be drawn to EPS * * @author michael * */ public class EpsGraphicsWrapper implements Graphics2DInterface { private EpsGraphicsD impl; private LinkedList<GAffineTransform> transformationStack = new LinkedList<GAffineTransform>(); public EpsGraphicsWrapper(EpsGraphicsD impl) { this.impl = impl; } public EpsGraphicsD getImpl() { return impl; } @Override public void setStroke(Stroke stroke) { if (stroke instanceof BasicStroke) { impl.setStroke(new GBasicStrokeD((BasicStroke) stroke)); } } @Override public Stroke getStroke() { return new StrokeD(((AwtFactoryD) AwtFactory.getPrototype()) .getAwtStroke(impl.getStroke())); } @Override public void setColor(Color color) { if (color instanceof java.awt.Color) { impl.setColor(GColorD.newColor((java.awt.Color) color)); } } @Override public Color getColor() { return new ColorD(GColorD.getAwtColor(impl.getColor())); } @Override public Transform getTransform() { return new TransformD( GAffineTransformD.getAwtAffineTransform(impl.getTransform())); } @Override public Font getFont() { return new FontD(GFontD.getAwtFont(impl.getFont())); } @Override public void setFont(Font font) { impl.setFont(new GFontD(((FontD) font).impl)); } @Override public void fillRect(int x, int y, int width, int height) { impl.fillRect(x, y, width, height); } @Override public void fill(Rectangle2D rectangle) { if (rectangle instanceof java.awt.geom.Rectangle2D) { impl.fill(new GGenericRectangle2DD( (java.awt.geom.Rectangle2D) rectangle)); } } @Override public void draw(Rectangle2D rectangle) { if (rectangle instanceof java.awt.geom.Rectangle2D) { impl.draw(new GGenericRectangle2DD( (java.awt.geom.Rectangle2D) rectangle)); } } @Override public void draw(RoundRectangle2D rectangle) { Log.debug("unimplemented - not needed?"); // impl.draw((Shape) rectangle); } @Override public void draw(Line2D line) { if (line instanceof java.awt.geom.Line2D) { impl.draw(new GLine2DD((java.awt.geom.Line2D) line)); } } @Override public void drawChars(char[] data, int offset, int length, int x, int y) { impl.drawChars(data, offset, length, x, y); } @Override public void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle) { Log.debug("unimplemented - not needed?"); // impl.drawArc(x, y, width, height, startAngle, arcAngle); } @Override public void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle) { Log.debug("unimplemnted - not needed?"); // impl.fillArc(x, y, width, height, startAngle, arcAngle); } @Override public void translate(double x, double y) { impl.translate(x, y); } @Override public void scale(double x, double y) { impl.scale(x, y); } @Override public void rotate(double theta, double x, double y) { impl.rotate(theta, x, y); } @Override public void rotate(double theta) { impl.rotate(theta); } @Override public void drawImage(Image image, int x, int y) { if (image instanceof BufferedImage) { impl.drawImage(new GBufferedImageD(((BufferedImage) image)), x, y); } } @Override public void drawImage(Image image, Transform transform) { Log.debug("unimplemented - not needed?"); // impl.drawImage(new GBufferedImageD(((BufferedImage) image)), // new GAffineTransformD(((AffineTransform) transform))); } @Override public FontRenderContext getFontRenderContext() { Log.debug("unimplemented - not needed?"); // return new // FontRenderContextD(FontRenderContextDimpl.getFontRenderContext()); return null; } @Override public void dispose() { // } @Override public void setRenderingHint(int key, int value) { // } @Override public int getRenderingHint(int key) { return -1; } @Override public void saveTransformation() { transformationStack.add(new GAffineTransformD( GAffineTransformD.getAwtAffineTransform(impl.getTransform()))); } @Override public void restoreTransformation() { GAffineTransform last = transformationStack.removeLast(); impl.setTransform(last); } }