X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.scenegraph%2Fsrc%2Forg%2Fsimantics%2Fscenegraph%2Fg2d%2Fevents%2Fadapter%2FAWTMouseEventAdapter.java;h=e01876c6d0000dfa1049631cf9d766cf8fbc4713;hp=bad131312a337ce33195346fde1d1a6c4888b145;hb=bdb7180f6425b460b8566a3223b319caf9dbc56f;hpb=9b9f2a9206583894edb1a4a4a93a6c6720c8dddd diff --git a/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/events/adapter/AWTMouseEventAdapter.java b/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/events/adapter/AWTMouseEventAdapter.java index bad131312..e01876c6d 100644 --- a/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/events/adapter/AWTMouseEventAdapter.java +++ b/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/events/adapter/AWTMouseEventAdapter.java @@ -15,6 +15,11 @@ */ package org.simantics.scenegraph.g2d.events.adapter; +import java.awt.Component; +import java.awt.dnd.DnDConstants; +import java.awt.dnd.DragGestureEvent; +import java.awt.dnd.DragGestureListener; +import java.awt.dnd.DragSource; import java.awt.event.InputEvent; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; @@ -22,6 +27,7 @@ import java.awt.event.MouseMotionListener; import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelListener; import java.awt.geom.Point2D; +import java.util.function.UnaryOperator; import org.simantics.scenegraph.g2d.events.EventDebugPolicy; import org.simantics.scenegraph.g2d.events.IEventHandler; @@ -29,6 +35,7 @@ import org.simantics.scenegraph.g2d.events.IEventQueue; import org.simantics.scenegraph.g2d.events.MouseEvent.MouseButtonPressedEvent; import org.simantics.scenegraph.g2d.events.MouseEvent.MouseButtonReleasedEvent; import org.simantics.scenegraph.g2d.events.MouseEvent.MouseDoubleClickedEvent; +import org.simantics.scenegraph.g2d.events.MouseEvent.MouseDragBegin; import org.simantics.scenegraph.g2d.events.MouseEvent.MouseEnterEvent; import org.simantics.scenegraph.g2d.events.MouseEvent.MouseExitEvent; import org.simantics.scenegraph.g2d.events.MouseEvent.MouseMovedEvent; @@ -289,4 +296,38 @@ public class AWTMouseEventAdapter extends AbstractEventAdapter implements MouseL System.out.println("AWT mouse clicked: " + e); } + public void initDragGestureListener(Component rootPane, UnaryOperator controlToCanvas) { + final DragSource ds = new DragSource(); + DragGestureListener dgl = new DragGestureListener() { + @Override + public void dragGestureRecognized(DragGestureEvent dge) { + InputEvent ie = dge.getTriggerEvent(); + if (ie instanceof java.awt.event.MouseEvent) { + java.awt.event.MouseEvent e = (java.awt.event.MouseEvent) ie; + Point2D controlPos = getControlPosition(e); + Point2D canvasPos = controlToCanvas.apply(controlPos); + + MouseDragBegin event = new MouseDragBegin(this, + e.getWhen(), 0, + getButtonStatus(e), + getStateMask(e), + getMouseButton(e), + canvasPos, + controlPos, + controlPos, + getScreenPosition(e)); + + handleEvent(event); + + if (event.transferable != null) { + ds.startDrag(dge, null, event.transferable, null); + } + } + } + }; + ds.createDefaultDragGestureRecognizer( + rootPane, + DnDConstants.ACTION_COPY_OR_MOVE | DnDConstants.ACTION_LINK, + dgl); + } }