]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.g2d/src/org/simantics/g2d/dnd/DragPainter.java
Take the transform hint of DragItem into account during drag
[simantics/platform.git] / bundles / org.simantics.g2d / src / org / simantics / g2d / dnd / DragPainter.java
index 3ebccf136a158e8fd9295f4cb9fe6a89f37b0059..3a7609b947ece077c2fcee878b20cec5675a3d6f 100644 (file)
@@ -21,6 +21,7 @@ import org.simantics.g2d.canvas.impl.AbstractCanvasParticipant;
 import org.simantics.g2d.canvas.impl.SGNodeReflection.SGCleanup;
 import org.simantics.g2d.canvas.impl.SGNodeReflection.SGInit;
 import org.simantics.g2d.diagram.DiagramHints;
+import org.simantics.g2d.element.ElementHints;
 import org.simantics.g2d.participant.TransformUtil;
 import org.simantics.scenegraph.g2d.G2DParentNode;
 import org.simantics.scenegraph.g2d.IG2DNode;
@@ -31,6 +32,8 @@ import org.simantics.scenegraph.g2d.nodes.SingleElementNode;
 import org.simantics.scenegraph.g2d.snap.ISnapAdvisor;
 import org.simantics.utils.datastructures.context.IContext;
 import org.simantics.utils.datastructures.context.IContextListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * This participant paints an array of icons of a drag operation.
@@ -38,6 +41,7 @@ import org.simantics.utils.datastructures.context.IContextListener;
  * @author Toni Kalajainen
  */
 public class DragPainter extends AbstractCanvasParticipant {
+    private static final Logger LOGGER = LoggerFactory.getLogger(DragPainter.class);
     // Priority of drag event, eats ecs key
     public final static int DRAG_EVENT_PRIORITY = Integer.MAX_VALUE - 1500;
     public final static int DRAG_PAINT_PRIORITY = Integer.MAX_VALUE - 1100;
@@ -185,10 +189,14 @@ public class DragPainter extends AbstractCanvasParticipant {
             Point2D pos = dropCtx.getItemPosition(item);
             if(pos != null) { // Position can (or at least seems to be) be null on the first frame
                 AffineTransform subt = AffineTransform.getTranslateInstance(pos.getX(), pos.getY());
+                AffineTransform at = item.getHintContext().getHint(ElementHints.KEY_TRANSFORM);
+                if (at != null) {
+                    subt.concatenate(at);
+                }
 
                 IG2DNode itemHolder = node.getNode(""+item.hashCode());
                 if (itemHolder != null && !(itemHolder instanceof SingleElementNode)) {
-                    System.err.println("BUG: item hash codes collide within the dragged item context - found unrecognized item " + itemHolder + " with node id '" + item.hashCode() + "'");
+                    LOGGER.error("BUG: item hash codes collide within the dragged item context - found unrecognized item " + itemHolder + " with node id '" + item.hashCode() + "'");
                     continue;
                 }