/** * Method to get a {@code SelectAreaTracker} which handles user interaction * for selecting an area on the drawing. */ protected SelectAreaTracker getSelectAreaTracker() { if (selectAreaTracker == null) { selectAreaTracker = new DefaultSelectAreaTracker(); } return selectAreaTracker; }
@Override public void deactivate(DrawingEditor editor) { super.deactivate(editor); clearHoverHandles(); } }
@Override public void mouseReleased(MouseEvent evt) { selectGroup(evt.isShiftDown()); clearRubberBand(); }
@Override public void mouseMoved(MouseEvent evt) { clearRubberBand(); Point point = evt.getPoint(); DrawingView view = editor.findView((Container) evt.getSource()); updateCursor(view, point); if (view == null || editor.getActiveView() != view) { clearHoverHandles(); } else { // Search first, if one of the selected figures contains // the current mouse location, and is selectable. // Only then search for other // figures. This search sequence is consistent with the // search sequence of the SelectionTool. Figure figure = null; Point2D.Double p = view.viewToDrawing(point); for (Figure f : view.getSelectedFigures()) { if (f.contains(p)) { figure = f; } } if (figure == null) { figure = view.findFigure(point); while (figure != null && !figure.isSelectable()) { figure = view.getDrawing().findFigureBehind(p, figure); } } updateHoverHandles(view, figure); } }
private void clearRubberBand() { if (!rubberband.isEmpty()) { fireAreaInvalidated(rubberband); rubberband.width = -1; } }
@Override public void draw(Graphics2D g) { g.setStroke(rubberbandStroke); g.setColor(rubberbandColor); g.drawRect(rubberband.x, rubberband.y, rubberband.width - 1, rubberband.height - 1); if (hoverHandles.size() > 0 && !getView().isFigureSelected(hoverFigure)) { for (Handle h : hoverHandles) { h.draw(g); } } }
protected void clearHoverHandles() { updateHoverHandles(null, null); }
@Override public void mousePressed(MouseEvent evt) { super.mousePressed(evt); clearRubberBand(); }
@Override public void mouseDragged(MouseEvent evt) { Rectangle invalidatedArea = (Rectangle) rubberband.clone(); rubberband.setBounds( Math.min(anchor.x, evt.getX()), Math.min(anchor.y, evt.getY()), Math.abs(anchor.x - evt.getX()), Math.abs(anchor.y - evt.getY())); if (invalidatedArea.isEmpty()) { invalidatedArea = (Rectangle) rubberband.clone(); } else { invalidatedArea = invalidatedArea.union(rubberband); } fireAreaInvalidated(invalidatedArea); }
@Override public void mouseExited(MouseEvent evt) { DrawingView view = editor.findView((Container) evt.getSource()); updateHoverHandles(view, null); }
@Override public void activate(DrawingEditor editor) { super.activate(editor); clearHoverHandles(); }