]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.diagram.svg/src/org/simantics/diagram/svg/export/SVGGraphics2DWithPassthruSupport.java
Generate tidier SVG from diagrams
[simantics/platform.git] / bundles / org.simantics.diagram.svg / src / org / simantics / diagram / svg / export / SVGGraphics2DWithPassthruSupport.java
diff --git a/bundles/org.simantics.diagram.svg/src/org/simantics/diagram/svg/export/SVGGraphics2DWithPassthruSupport.java b/bundles/org.simantics.diagram.svg/src/org/simantics/diagram/svg/export/SVGGraphics2DWithPassthruSupport.java
new file mode 100644 (file)
index 0000000..a9f3f2a
--- /dev/null
@@ -0,0 +1,48 @@
+package org.simantics.diagram.svg.export;
+
+import java.awt.Font;
+import java.awt.RenderingHints;
+import java.awt.RenderingHints.Key;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.batik.svggen.SVGGeneratorContext;
+import org.apache.batik.svggen.SVGGeneratorContext.GraphicContextDefaults;
+import org.apache.batik.svggen.SVGGraphics2D;
+import org.simantics.scenegraph.g2d.G2DPDFRenderingHints;
+import org.simantics.scenegraph.g2d.G2DRenderingHints;
+import org.w3c.dom.Document;
+
+public class SVGGraphics2DWithPassthruSupport extends SVGGraphics2D {
+
+       public SVGGraphics2DWithPassthruSupport(Document document) {
+               this(SVGGeneratorContext.createDefault(document));
+       }
+       
+       public SVGGraphics2DWithPassthruSupport(SVGGeneratorContext context) {
+               super(updateDefaults(context), false);
+               
+               setRenderingHint(G2DRenderingHints.KEY_TEXT_RENDERING_MODE, G2DRenderingHints.TextRenderingMode.AS_TEXT);
+               setRenderingHint(G2DRenderingHints.KEY_SVG_PASSTHRU, true);
+               
+               this.shapeConverter = new SVGShapeWithPassthruSupport(generatorCtx);
+       }
+       
+       private static SVGGeneratorContext updateDefaults(SVGGeneratorContext context) {
+               GraphicContextDefaults gcDefaults = new GraphicContextDefaults();
+               
+        Map<Key, Object> hintMap = new HashMap<Key, Object>();
+               
+               hintMap.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
+        hintMap.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+               hintMap.put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
+               hintMap.put(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
+               hintMap.put(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
+               
+               gcDefaults.setRenderingHints(new RenderingHints(hintMap));
+               gcDefaults.setFont(Font.decode(null));
+               
+               context.setGraphicContextDefaults(gcDefaults);
+               return context;
+       }
+}
\ No newline at end of file