X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.scenegraph%2Fsrc%2Forg%2Fsimantics%2Fscenegraph%2Fg2d%2Fevents%2Fadapter%2FAWTMouseEventAdapter.java;h=e01876c6d0000dfa1049631cf9d766cf8fbc4713;hb=c92d827b26188f3c8cf6ae419576be5bb3f6b287;hp=bad131312a337ce33195346fde1d1a6c4888b145;hpb=a89de05edbb55e4ae23d71eb1d0aaa7556d7148b;p=simantics%2Fplatform.git 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); + } }