]> gerrit.simantics Code Review - simantics/platform.git/blob - 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
1 package org.simantics.diagram.svg.export;
2
3 import java.awt.Font;
4 import java.awt.RenderingHints;
5 import java.awt.RenderingHints.Key;
6 import java.util.HashMap;
7 import java.util.Map;
8
9 import org.apache.batik.svggen.SVGGeneratorContext;
10 import org.apache.batik.svggen.SVGGeneratorContext.GraphicContextDefaults;
11 import org.apache.batik.svggen.SVGGraphics2D;
12 import org.simantics.scenegraph.g2d.G2DPDFRenderingHints;
13 import org.simantics.scenegraph.g2d.G2DRenderingHints;
14 import org.w3c.dom.Document;
15
16 public class SVGGraphics2DWithPassthruSupport extends SVGGraphics2D {
17
18         public SVGGraphics2DWithPassthruSupport(Document document) {
19                 this(SVGGeneratorContext.createDefault(document));
20         }
21         
22         public SVGGraphics2DWithPassthruSupport(SVGGeneratorContext context) {
23                 super(updateDefaults(context), false);
24                 
25                 setRenderingHint(G2DRenderingHints.KEY_TEXT_RENDERING_MODE, G2DRenderingHints.TextRenderingMode.AS_TEXT);
26                 setRenderingHint(G2DRenderingHints.KEY_SVG_PASSTHRU, true);
27                 
28                 this.shapeConverter = new SVGShapeWithPassthruSupport(generatorCtx);
29         }
30         
31         private static SVGGeneratorContext updateDefaults(SVGGeneratorContext context) {
32                 GraphicContextDefaults gcDefaults = new GraphicContextDefaults();
33                 
34         Map<Key, Object> hintMap = new HashMap<Key, Object>();
35                 
36                 hintMap.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
37         hintMap.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
38                 hintMap.put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
39                 hintMap.put(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
40                 hintMap.put(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
41                 
42                 gcDefaults.setRenderingHints(new RenderingHints(hintMap));
43                 gcDefaults.setFont(Font.decode(null));
44                 
45                 context.setGraphicContextDefaults(gcDefaults);
46                 return context;
47         }
48 }