/** @param e */ @Override public void mouseDragged(MouseEvent e) { inDrag = true; Point coords = toRealCoords(e.getPoint()); if ((dragDiff == null) && (getSelectedObject() != null)) { dragDiff = new Dimension( (int) Math.abs( coords.getX() - getSelectedObject() .getPojo() .getCurrentRepresentation() .getOffset() .getX()), (int) Math.abs( coords.getY() - getSelectedObject() .getPojo() .getCurrentRepresentation() .getOffset() .getY())); } int xSnapped = (int) coords.getX() - ((int) coords.getX() % SNAP_TO_GRID); int ySnapped = (int) coords.getY() - ((int) coords.getY() % SNAP_TO_GRID); // in object edit mode if (objectEditMode && (getSelectedObject() != null)) { for (Representation representation : getSelectedObject().getPojo().getRepresentations()) { // move an object representation.setOffset( xSnapped - (int) dragDiff.getWidth(), ySnapped - (int) dragDiff.getHeight()); setNeedRepaint(true); } } else { if (roomEditMode) { removeIndicators(); Callout callout = new Callout( this.getClass().getCanonicalName(), "mouse", selectedZone.getPojo().getName() + ": " + xSnapped + "cm," + ySnapped + "cm", (int) coords.getX() + 50, (int) coords.getY() + 50, 0, -1); createCallout(callout); for (Handle handle : handles) { // move the zone point if (handle.isSelected()) { if (null == originalHandleLocation) { originalHandleLocation = new FreedomPoint(handle.getPoint().getX(), handle.getPoint().getY()); } handle.move(xSnapped, ySnapped); addIndicator(TopologyUtils.convertToAWT(selectedZone.getPojo().getShape())); // add indicators for overlapping zones selectedZone = handle.getZone(); for (ZoneLogic overlapped : overlappedRooms(selectedZone)) { // mark the zone in red if it is overlapped addIndicator( TopologyUtils.convertToAWT(overlapped.getPojo().getShape()), new Color(255, 0, 0, HIGH_OPACITY)); } } } setNeedRepaint(true); } } }