]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling/src/org/simantics/modeling/SCLScenegraph.java
Fire selection change events on every selection change
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / SCLScenegraph.java
index 7545106580b7ea0fa3eebeef97605f7e87605687..ef2fb5d66cbeff9faa4f5458dc91955be12fea98 100644 (file)
@@ -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<Integer> format, or null.
+     */
+    public static List<Integer> getBackgroundColor(ICanvasContext ctx) {
+       Color color = ctx.getDefaultHintContext().getHint(Hints.KEY_BACKGROUND_COLOR);
+       if (color == null)
+               return null;
+       ArrayList<Integer> 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) {
        
@@ -802,7 +821,7 @@ public class SCLScenegraph {
                 parentBuilder.append(SELECTION_SECTION, "\n</g>");
                 parentBuilder.append(MAIN_SECTION, "\n</g>");
                 
-            } else if (node instanceof SelectionNode) {
+            } else if (isSelection0(node)) {
                 
                 SelectionNode n = (SelectionNode)node;
                 SingleElementNode parentSEN = (SingleElementNode)NodeUtil.getNearestParentOfType(node, SingleElementNode.class);
@@ -830,9 +849,32 @@ public class SCLScenegraph {
                     parentBuilder2.append(SELECTION_MASK_SECTION,"\n</g>");
                    
                 }
+            } else if (node instanceof SelectionNode) {
+
+                Element doc = renderSVGNode(svgGenerator, (IG2DNode)node);
+                String svg = printSVGDocument(doc);
+                parentBuilder.append(MAIN_SECTION, "<g>");
+                parentBuilder.append(MAIN_SECTION, svg);
+                parentBuilder.append(MAIN_SECTION, "\n</g>");
+
             } 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<g transform=\"" + m + "\">");
+                     } 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<g transform=\"" + m + "\">");
+                     }
+                }
                 parentBuilder.append(MAIN_SECTION, svg.getSVGText());
+                if (!at.isIdentity()) {
+                       parentBuilder.append(MAIN_SECTION, "\n</g>");
+                }
             } else if (node instanceof G2DParentNode) {
                 AffineTransform at = node.getTransform();
                 if(node instanceof SingleElementNode) {
@@ -863,6 +905,17 @@ public class SCLScenegraph {
 
         }
         
+        private boolean isSelection0(IG2DNode node) {
+            
+            if(node instanceof SelectionNode) {
+                SelectionNode sn = (SelectionNode)node;
+                return sn.getSelectionId() == 0;
+            } else {
+                return false;
+            }
+            
+        }
+        
         private RenderSVGContext getParentBuilder(IG2DNode node) {
             
             INode parentSEN = NodeUtil.getNearestParentOfType(node, SingleElementNode.class);