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=17f22cfcfae23d131531913ed526d9b1e5b84061;hb=477ce5a22d86916107b2c319f4d6cf84d639305a;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..17f22cfcf 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 @@ -60,31 +60,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 +114,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