MouseUpHandler getMouseUpHandler(final Callback callback) { return mouseUpEvent -> { if (isAttached()) { timer.cancel(); final int x = relativeX(getXDiff() + mouseUpEvent.getX()); final int y = relativeY(getYDiff() + mouseUpEvent.getY()); clear(); callback.onComplete(x, y); } }; }
MouseMoveHandler getMouseMoveHandler(final int initialX, final int initialY, final int timeout, final Callback callback) { return mouseMoveEvent -> { if (isAttached()) { if (xDiff() == null) { xDiff = initialX - mouseMoveEvent.getX(); } if (yDiff() == null) { yDiff = initialY - mouseMoveEvent.getY(); } final int x = relativeX(getXDiff() + mouseMoveEvent.getX()); final int y = relativeY(getYDiff() + mouseMoveEvent.getY()); setLocation(shapeProxy, x, y); scheduleMove(callback, x, y, timeout); } }; }
void create(final int initialX, final int initialY, final int timeout, final Callback callback) { if (!attached) { addToLayer(layer, shapeProxy); setLocation(shapeProxy, relativeX(initialX), relativeY(initialY)); attached = true; callback.onStart(initialX, initialY); } handlerRegs[0] = RootPanel.get().addDomHandler(getMouseMoveHandler(initialX, initialY, timeout, callback), MouseMoveEvent.getType()); handlerRegs[1] = RootPanel.get().addDomHandler(mouseDownEvent -> { mouseDownEvent.stopPropagation(); mouseDownEvent.preventDefault(); }, MouseDownEvent.getType()); handlerRegs[2] = RootPanel.get().addDomHandler(getMouseUpHandler(callback), MouseUpEvent.getType()); }