From ce7a41c535e3692496b9936caf3abc9cdf33013d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20Ha=C3=9Fel?= Date: Fri, 17 May 2024 11:02:47 +0200 Subject: [PATCH] hover fix --- src/main/java/de/ph87/electro/CONFIG.java | 10 ++++++--- .../circuit/CircuitPanelMouseAdapter.java | 21 +++++++++++++------ .../java/de/ph87/electro/circuit/Wire.java | 6 +++--- .../ph87/electro/circuit/part/Junction.java | 2 +- 4 files changed, 26 insertions(+), 13 deletions(-) diff --git a/src/main/java/de/ph87/electro/CONFIG.java b/src/main/java/de/ph87/electro/CONFIG.java index e605d01..cf2239b 100644 --- a/src/main/java/de/ph87/electro/CONFIG.java +++ b/src/main/java/de/ph87/electro/CONFIG.java @@ -34,6 +34,8 @@ public class CONFIG { public static final Color PART_HOVER_COLOR = new Color(192, 192, 192, 128); + public static final Color HOVER_BORDER_COLOR = Color.BLACK; + public static final Color RASTER_COLOR = Color.gray; public static final Color VOLTAGE_UNKNOWN_COLOR = Color.darkGray; @@ -46,15 +48,17 @@ public class CONFIG { public static final BasicStroke RASTER_STROKE = new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1, new float[]{5}, 0); - public static final BasicStroke NORMAL_STROKE = new BasicStroke(1); + public static final BasicStroke JUNCTION_STROKE = new BasicStroke(1); + + public static final BasicStroke HOVER_STROKE = new BasicStroke(2); public static final BasicStroke SYMBOL_STROKE = new BasicStroke(3); public static final BasicStroke WIRE_STROKE = new BasicStroke(5); - public static final BasicStroke WIRE_STROKE_BACK = new BasicStroke(WIRE_STROKE.getLineWidth() + 2); + public static final BasicStroke WIRE_HOVER_STROKE = new BasicStroke(WIRE_STROKE.getLineWidth() + 2); - public static final BasicStroke WIRE_STROKE_BACK2 = new BasicStroke(WIRE_STROKE_BACK.getLineWidth() + 2); + public static final BasicStroke WIRE_HOVER_STROKE_BACK = new BasicStroke(WIRE_HOVER_STROKE.getLineWidth() + 4); public static final BasicStroke SWITCH_STROKE = new BasicStroke(15); diff --git a/src/main/java/de/ph87/electro/circuit/CircuitPanelMouseAdapter.java b/src/main/java/de/ph87/electro/circuit/CircuitPanelMouseAdapter.java index 4992556..d7a8589 100644 --- a/src/main/java/de/ph87/electro/circuit/CircuitPanelMouseAdapter.java +++ b/src/main/java/de/ph87/electro/circuit/CircuitPanelMouseAdapter.java @@ -99,10 +99,14 @@ class CircuitPanelMouseAdapter extends MouseAdapter { private void findHover(final Point point) { partHover = circuit.findPart(point).orElse(null); junctionHover = partHover != null ? partHover.findJunction(point).orElse(null) : null; - if (junctionHover == null) { - wireHover = circuit.findWireByPoint(point).orElse(null); - } else { + if (junctionHover != null) { + partHover = null; wireHover = null; + return; + } + wireHover = circuit.findWireByPoint(point).orElse(null); + if (wireHover != null) { + partHover = null; } } @@ -130,13 +134,18 @@ class CircuitPanelMouseAdapter extends MouseAdapter { } public void drawDrag(final Graphics2D g) { + if (partHover != null) { + final Point zero = partHover.translate(new Point()); + partHover.rect(g, zero.x, zero.y, RASTER, RASTER, HOVER_BORDER_COLOR, HOVER_STROKE, null); + } if (junctionHover != null) { - junctionHover.getOwner().circle(g, junctionHover.getAbsolute().x, junctionHover.getAbsolute().y, JUNCTION_RADIUS_HOVER, Color.BLACK, NORMAL_STROKE, junctionHover.getColor()); + junctionHover.getOwner().circle(g, junctionHover.getAbsolute().x, junctionHover.getAbsolute().y, JUNCTION_RADIUS_HOVER, HOVER_BORDER_COLOR, HOVER_STROKE, junctionHover.getColor()); } if (wireHover != null) { - wireHover.getA().getOwner().line(g, wireHover.getA().getAbsolute(), wireHover.getB().getAbsolute(), Color.black, WIRE_STROKE_BACK2); - wireHover.getA().getOwner().line(g, wireHover.getA().getAbsolute(), wireHover.getB().getAbsolute(), wireHover.getA().getColor(), WIRE_STROKE_BACK); + wireHover.getA().getOwner().line(g, wireHover.getA().getAbsolute(), wireHover.getB().getAbsolute(), HOVER_BORDER_COLOR, WIRE_HOVER_STROKE_BACK); + wireHover.getA().getOwner().line(g, wireHover.getA().getAbsolute(), wireHover.getB().getAbsolute(), wireHover.getA().getColor(), WIRE_HOVER_STROKE); } + if (dragPosition != null) { if (partDrag != null) { g.setColor(PART_HOVER_COLOR); diff --git a/src/main/java/de/ph87/electro/circuit/Wire.java b/src/main/java/de/ph87/electro/circuit/Wire.java index 43ca26a..831f86c 100644 --- a/src/main/java/de/ph87/electro/circuit/Wire.java +++ b/src/main/java/de/ph87/electro/circuit/Wire.java @@ -6,7 +6,7 @@ import lombok.NonNull; import java.awt.*; -import static de.ph87.electro.CONFIG.WIRE_STROKE_BACK2; +import static de.ph87.electro.CONFIG.WIRE_HOVER_STROKE_BACK; @Data public class Wire { @@ -31,14 +31,14 @@ public class Wire { double dy = end.y - start.y; double length = dx * dx + dy * dy; if (length == 0) { - return p.distance(start) <= WIRE_STROKE_BACK2.getLineWidth(); + return p.distance(start) <= WIRE_HOVER_STROKE_BACK.getLineWidth(); } double t = ((p.x - start.x) * dx + (p.y - start.y) * dy) / length; t = Math.max(0, Math.min(1, t)); double closestX = start.x + t * dx; double closestY = start.y + t * dy; - return p.distance(closestX, closestY) <= WIRE_STROKE_BACK2.getLineWidth(); + return p.distance(closestX, closestY) <= WIRE_HOVER_STROKE_BACK.getLineWidth(); } public Junction getOpposite(final Junction junction) { diff --git a/src/main/java/de/ph87/electro/circuit/part/Junction.java b/src/main/java/de/ph87/electro/circuit/part/Junction.java index 77560c1..ef1ddad 100644 --- a/src/main/java/de/ph87/electro/circuit/part/Junction.java +++ b/src/main/java/de/ph87/electro/circuit/part/Junction.java @@ -84,7 +84,7 @@ public class Junction { } public void render(final Graphics2D g) { - owner.circle(g, position.x, position.y, JUNCTION_RADIUS, Color.BLACK, NORMAL_STROKE, color); + owner.circle(g, position.x, position.y, JUNCTION_RADIUS, Color.BLACK, JUNCTION_STROKE, color); } public Point getAbsolute() {