X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.modeling%2Fsrc%2Forg%2Fsimantics%2Fmodeling%2FSCLScenegraph.java;h=4e4811c5a15fe066d6ecf645accbe8fc26a4ca93;hp=1e80b832d70aa15fbc2752772792e8202175a08d;hb=34ee11ce2339ebdae4783e5765583a6ae13c2920;hpb=181b3b454b2b6f02491ab082e9f3b0cea1587857 diff --git a/bundles/org.simantics.modeling/src/org/simantics/modeling/SCLScenegraph.java b/bundles/org.simantics.modeling/src/org/simantics/modeling/SCLScenegraph.java index 1e80b832d..4e4811c5a 100644 --- a/bundles/org.simantics.modeling/src/org/simantics/modeling/SCLScenegraph.java +++ b/bundles/org.simantics.modeling/src/org/simantics/modeling/SCLScenegraph.java @@ -1,6 +1,7 @@ package org.simantics.modeling; import java.awt.BasicStroke; +import java.awt.Color; import java.awt.Dimension; import java.awt.RenderingHints; import java.awt.RenderingHints.Key; @@ -45,6 +46,7 @@ import org.simantics.diagram.elements.DiagramNodeUtil; import org.simantics.diagram.elements.TextGridNode; import org.simantics.diagram.elements.TextNode; import org.simantics.diagram.stubs.DiagramResource; +import org.simantics.g2d.canvas.Hints; import org.simantics.g2d.canvas.ICanvasContext; import org.simantics.g2d.diagram.DiagramHints; import org.simantics.g2d.diagram.IDiagram; @@ -276,6 +278,23 @@ public class SCLScenegraph { } return "No nodes in scenegraph!"; } + + /** + * Returns background color of a canvasContext or null. + * @param ctx + * @return color in RGBA List format, or null. + */ + public static List getBackgroundColor(ICanvasContext ctx) { + Color color = ctx.getDefaultHintContext().getHint(Hints.KEY_BACKGROUND_COLOR); + if (color == null) + return null; + ArrayList rgba = new ArrayList<>(4); + rgba.add(color.getRed()); + rgba.add(color.getGreen()); + rgba.add(color.getBlue()); + rgba.add(color.getAlpha()); + return rgba; + } public static String sceneGraphTest (ICanvasContext ctx, String module, String value) { @@ -378,12 +397,14 @@ public class SCLScenegraph { public static final String svgNS = "http://www.w3.org/2000/svg"; - public Generator(SVGGeneratorContext ctx, boolean joku) { - super(ctx, joku); + public Generator(SVGGeneratorContext ctx, boolean textAsShapes) { + super(ctx, textAsShapes); } public Generator(Document document) { super(document); + // prevent batik comment in each g-element + getGeneratorContext().setComment(null); } @Override @@ -623,6 +644,7 @@ public class SCLScenegraph { RenderSVGContext result = new RenderSVGContext(); + double[] matrix = new double[6]; try { Selection selection = ctx.getAtMostOneItemOfClass(Selection.class); @@ -649,10 +671,15 @@ public class SCLScenegraph { double scale = width < 0 || height < 0 ? 1.0 : Math.min((width - 2*offset) / content.getWidth(), (height - 2*offset) / content.getHeight()); - svgGenerator.translate(offset, offset); - svgGenerator.scale(scale, scale); + AffineTransform tr = new AffineTransform(); + tr.translate(offset, offset); + tr.scale(scale, scale); + tr.translate(-content.getX(), -content.getY()); + tr.getMatrix(matrix); + //svgGenerator.translate(offset, offset); + //svgGenerator.scale(scale, scale); // translate svgGenerator to the x and y coordinates of current content - svgGenerator.translate(-content.getX(), -content.getY()); + //svgGenerator.translate(-content.getX(), -content.getY()); svgGenerator.setSVGCanvasSize(new Dimension((int)Math.ceil(scale * content.getWidth()) + 2*offset, (int)Math.ceil(scale * content.getHeight()) + 2*offset)); //svgGenerator.setClip(content); @@ -681,9 +708,11 @@ public class SCLScenegraph { StringBuilder res = new StringBuilder(); res.append(""); + res.append(""); res.append(result.get(MAIN_SECTION)); res.append(result.get(SELECTION_SECTION)); res.append(result.get(SELECTION_MASK_SECTION)); + res.append(""); res.append(""); // System.err.println(" == FINAL RESULT == "); @@ -808,11 +837,7 @@ public class SCLScenegraph { parentBuilder2.append(SELECTION_SECTION, "\n"); parentBuilder2.append(SELECTION_SECTION, svg); parentBuilder2.append(SELECTION_SECTION, "\n"); - AffineTransform transform = svgGenerator.getTransform(); - double[] matrix = new double[6]; - transform.getMatrix(matrix); - String matrixString = String.format("matrix(%f,%f,%f,%f,%f,%f)", matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]); - parentBuilder2.append(SELECTION_MASK_SECTION, "\n"); + parentBuilder2.append(SELECTION_MASK_SECTION, "\n"); Rectangle2D rect = n.getRect(); // NaN if(rect.getHeight() == rect.getHeight() && rect.getWidth() == rect.getWidth()) { @@ -826,7 +851,22 @@ public class SCLScenegraph { } } else if (node instanceof SVGNode) { SVGNode svg = (SVGNode)node; + AffineTransform at = svg.getTransform(); + if (!at.isIdentity()) { + if(at.getScaleX() == 1.0 && at.getScaleY() == 1.0 && at.getShearX() == 0.0 && at.getShearY() == 0.0) { + String m = "translate(" + at.getTranslateX() + " " + at.getTranslateY() + ")"; + parentBuilder.append(MAIN_SECTION, "\n"); + } else { + double[] ds = new double[6]; + at.getMatrix(ds); + String m = "matrix(" + ds[0] + " " + ds[1] + " " + ds[2] + " " + ds[3] + " " + ds[4] + " " + ds[5] + ")"; + parentBuilder.append(MAIN_SECTION, "\n"); + } + } parentBuilder.append(MAIN_SECTION, svg.getSVGText()); + if (!at.isIdentity()) { + parentBuilder.append(MAIN_SECTION, "\n"); + } } else if (node instanceof G2DParentNode) { AffineTransform at = node.getTransform(); if(node instanceof SingleElementNode) {