X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.diagram%2Fsrc%2Forg%2Fsimantics%2Fdiagram%2Fadapter%2FDefinedElementHandler.java;h=e3e1269f37e0b9e29feb577a1d82160da88e1dd4;hb=617b9475710b80a125597f222f9777224972ce72;hp=b5cc293aca500079edda9823ec80b1c247686445;hpb=5d2af6df53f3895287cecd5e09fa1e38f271b53e;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.diagram/src/org/simantics/diagram/adapter/DefinedElementHandler.java b/bundles/org.simantics.diagram/src/org/simantics/diagram/adapter/DefinedElementHandler.java index b5cc293ac..e3e1269f3 100644 --- a/bundles/org.simantics.diagram/src/org/simantics/diagram/adapter/DefinedElementHandler.java +++ b/bundles/org.simantics.diagram/src/org/simantics/diagram/adapter/DefinedElementHandler.java @@ -18,6 +18,7 @@ import org.simantics.g2d.image.Image; import org.simantics.scenegraph.Node; import org.simantics.scenegraph.g2d.G2DParentNode; import org.simantics.scenegraph.g2d.IG2DNode; +import org.simantics.scenegraph.g2d.nodes.SingleElementNode; import org.simantics.utils.datastructures.hints.IHintContext.Key; public class DefinedElementHandler implements SceneGraph, InternalSize, Resize, Outline { @@ -52,6 +53,9 @@ public class DefinedElementHandler implements SceneGraph, InternalSize, Resize, n.setTransform(at); // FIXME: not tested.. } } + if(parent instanceof SingleElementNode) { + ((SingleElementNode)parent).setParameters(ElementUtils.getParameters(e)); + } } public void cleanup(final IElement e) { @@ -60,31 +64,33 @@ public class DefinedElementHandler implements SceneGraph, InternalSize, Resize, node.remove(); } - public Rectangle2D imageBounds(IElement e) { - Image i = getImage(e); - return i.getBounds(); + protected Rectangle2D imageBounds(IElement e, Rectangle2D size) { + Image i = getImage(e); + Rectangle2D r = i.getBounds(); + if (r != null) + size.setFrame(r); + return r; } @Override public Rectangle2D getBounds(IElement e, Rectangle2D size) { + if (size == null) + size = new Rectangle2D.Double(); + + ElementClass ec = e.getElementClass(); + if (ec.containsClass(ConnectionHandler.class)) { + imageBounds(e, size); + } else { + IG2DNode node = e.getHint(getNodeKey()); + Rectangle2D r = node != null ? node.getBoundsInLocal() : null; + if (r != null) { + size.setFrame(r); + } else { + imageBounds(e, size); + } + } - if (size == null) - size = new Rectangle2D.Double(); - - ElementClass ec = e.getElementClass(); - if(ec.containsClass(ConnectionHandler.class)) { - size.setFrame(imageBounds(e)); - } else { - IG2DNode node = e.getHint(getNodeKey()); - if(node != null) { - size.setFrame(node.getBoundsInLocal()); - } else { - size.setFrame(imageBounds(e)); - } - } - - return size; - + return size; } @Override @@ -112,12 +118,15 @@ public class DefinedElementHandler implements SceneGraph, InternalSize, Resize, @Override public Shape getElementShape(IElement e) { - IG2DNode node = e.getHint(getNodeKey()); - if (node == null) - throw new IllegalStateException(); - return node.getBoundsInLocal(); - + if (node != null) { + Rectangle2D bounds = node.getBoundsInLocal(); + if (bounds != null) + return bounds; + } + // Fallback to old logic. + Image i = getImage(e); + return i.getOutline(); } } \ No newline at end of file