Change cursor for resize rect controller only on drag

This commit is contained in:
maltaisn 2021-02-06 18:57:20 -05:00
parent d73cd785be
commit 83bd4deb45
No known key found for this signature in database
GPG Key ID: 82A9C1DCBB9C2513

View File

@ -111,7 +111,6 @@ public class CircuitComponent extends JComponent implements ChangedListener, Lib
private final MouseController mouseRun;
private final MouseControllerInsertCopied mouseInsertList;
private final MouseControllerResizeRect mouseResizeRect;
private final Cursor normalCursor;
private final Cursor moveCursor;
private final ToolTipAction copyAction;
private final ToolTipAction cutAction;
@ -239,7 +238,7 @@ public class CircuitComponent extends JComponent implements ChangedListener, Lib
}
});
normalCursor = new Cursor(Cursor.DEFAULT_CURSOR);
Cursor normalCursor = new Cursor(Cursor.DEFAULT_CURSOR);
moveCursor = new Cursor(Cursor.MOVE_CURSOR);
mouseNormal = new MouseControllerNormal(normalCursor);
mouseInsertElement = new MouseControllerInsertElement(normalCursor);
@ -1662,7 +1661,7 @@ public class CircuitComponent extends JComponent implements ChangedListener, Lib
private final class MouseControllerNormal extends MouseController {
private Vector pos;
private MouseEvent downButton;
private VisualElement hoveredElement;
private VisualElement pressedElement;
private MouseControllerNormal(Cursor cursor) {
super(cursor);
@ -1672,7 +1671,6 @@ public class CircuitComponent extends JComponent implements ChangedListener, Lib
void activate() {
super.activate();
pos = null;
hoveredElement = null;
}
@Override
@ -1710,18 +1708,12 @@ public class CircuitComponent extends JComponent implements ChangedListener, Lib
void pressed(MouseEvent e) {
downButton = e;
pos = getPosVector(e);
pressedElement = getCircuit().getElementAt(pos, false);
}
@Override
void moved(MouseEvent e) {
Vector p = getPosVector(e);
hoveredElement = getCircuit().getElementAt(p, false);
if (!isLocked() && hoveredElement != null &&
hoveredElement.equalsDescription(DummyElement.RECTDESCRIPTION)) {
setCursorForResizingRect(hoveredElement, p);
} else {
setCursor(normalCursor);
}
void released(MouseEvent e) {
pressedElement = null;
}
@Override
@ -1730,12 +1722,10 @@ public class CircuitComponent extends JComponent implements ChangedListener, Lib
Vector p = getPosVector(e);
if (pos == null)
pos = p;
if (!isLocked() && hoveredElement != null &&
hoveredElement.equalsDescription(DummyElement.RECTDESCRIPTION)) {
mouseResizeRect.activate(hoveredElement, pos);
} else {
if (pressedElement != null && pressedElement.equalsDescription(DummyElement.RECTDESCRIPTION))
mouseResizeRect.activate(pressedElement, pos);
else
mouseSelect.activate(pos, p);
}
return true;
}
return !mouse.isSecondaryClick(downButton);
@ -2609,6 +2599,8 @@ public class CircuitComponent extends JComponent implements ChangedListener, Lib
this.element = element;
this.startPos = raster(pos);
setCursorForResizingRect(element, pos);
// Get current rectangle attributes.
rectX = element.getPos().x;
rectY = element.getPos().y;
@ -2623,6 +2615,41 @@ public class CircuitComponent extends JComponent implements ChangedListener, Lib
changeWest = posInRect.x == rectWidth;
}
/**
* Updates the cursor for when the mouse hovers nears the border of a rectangle.
*
* @param rect The rectangle element.
* @param pos Current mouse position in circuit coordinates.
*/
public void setCursorForResizingRect(VisualElement rect, Vector pos) {
Vector posInRect = raster(pos.sub(rect.getPos()));
int width = rect.getElementAttributes().get(Keys.RECT_WIDTH) * SIZE;
int height = rect.getElementAttributes().get(Keys.RECT_HEIGHT) * SIZE;
int cursor;
if (posInRect.x == width) {
if (posInRect.y <= 0) {
cursor = Cursor.NE_RESIZE_CURSOR;
} else if (posInRect.y == height) {
cursor = Cursor.SE_RESIZE_CURSOR;
} else {
cursor = Cursor.E_RESIZE_CURSOR;
}
} else if (posInRect.x == 0) {
if (posInRect.y <= 0) {
cursor = Cursor.NW_RESIZE_CURSOR;
} else if (posInRect.y == height) {
cursor = Cursor.SW_RESIZE_CURSOR;
} else {
cursor = Cursor.W_RESIZE_CURSOR;
}
} else if (posInRect.y <= 0) {
cursor = Cursor.N_RESIZE_CURSOR;
} else {
cursor = Cursor.S_RESIZE_CURSOR;
}
setCursor(new Cursor(cursor));
}
@Override
boolean dragged(MouseEvent e) {
ElementAttributes attributes = element.getElementAttributes();
@ -2682,41 +2709,6 @@ public class CircuitComponent extends JComponent implements ChangedListener, Lib
}
}
/**
* Updates the cursor for when the mouse hovers nears the border of a rectangle.
*
* @param rect The rectangle element.
* @param pos Current mouse position in circuit coordinates.
*/
public void setCursorForResizingRect(VisualElement rect, Vector pos) {
Vector posInRect = raster(pos.sub(rect.getPos()));
int width = rect.getElementAttributes().get(Keys.RECT_WIDTH) * SIZE;
int height = rect.getElementAttributes().get(Keys.RECT_HEIGHT) * SIZE;
int cursor;
if (posInRect.x == width) {
if (posInRect.y <= 0) {
cursor = Cursor.NE_RESIZE_CURSOR;
} else if (posInRect.y == height) {
cursor = Cursor.SE_RESIZE_CURSOR;
} else {
cursor = Cursor.E_RESIZE_CURSOR;
}
} else if (posInRect.x == 0) {
if (posInRect.y <= 0) {
cursor = Cursor.NW_RESIZE_CURSOR;
} else if (posInRect.y == height) {
cursor = Cursor.SW_RESIZE_CURSOR;
} else {
cursor = Cursor.W_RESIZE_CURSOR;
}
} else if (posInRect.y <= 0) {
cursor = Cursor.N_RESIZE_CURSOR;
} else {
cursor = Cursor.S_RESIZE_CURSOR;
}
setCursor(new Cursor(cursor));
}
/**
* Activate a wizard
*