diff --git a/src/main/java/de/ph87/kindermalen/MotionListener.java b/src/main/java/de/ph87/kindermalen/MotionListener.java index edf0604..dc03533 100644 --- a/src/main/java/de/ph87/kindermalen/MotionListener.java +++ b/src/main/java/de/ph87/kindermalen/MotionListener.java @@ -6,9 +6,12 @@ import java.util.function.Consumer; public class MotionListener implements MouseMotionListener { + private final Consumer onMove; + private final Consumer onDrag; - public MotionListener(final Consumer onDrag) { + public MotionListener(final Consumer onMove, final Consumer onDrag) { + this.onMove = onMove; this.onDrag = onDrag; } @@ -21,7 +24,9 @@ public class MotionListener implements MouseMotionListener { @Override public void mouseMoved(final MouseEvent e) { - + if (onMove != null) { + onMove.accept(e); + } } } diff --git a/src/main/java/de/ph87/kindermalen/drawing/DrawingPanel.java b/src/main/java/de/ph87/kindermalen/drawing/DrawingPanel.java index c7ffdc0..f87cd03 100644 --- a/src/main/java/de/ph87/kindermalen/drawing/DrawingPanel.java +++ b/src/main/java/de/ph87/kindermalen/drawing/DrawingPanel.java @@ -8,6 +8,7 @@ import lombok.extern.slf4j.Slf4j; import javax.swing.*; import java.awt.*; import java.awt.event.MouseEvent; +import java.awt.image.BufferedImage; @Slf4j public class DrawingPanel extends JPanel { @@ -18,11 +19,18 @@ public class DrawingPanel extends JPanel { private Vector lastPoint = null; + private Point cursor = null; + public DrawingPanel(final ToolBox toolBox, final Drawing drawing) { this.toolBox = toolBox; this.drawing = drawing; this.addMouseListener(new ClickListener(this::onPress, null)); - this.addMouseMotionListener(new MotionListener(this::onDrag)); + this.addMouseMotionListener(new MotionListener(this::onMove, this::onDrag)); + } + + private void onMove(final MouseEvent e) { + cursor = e.getPoint(); + repaint(); } private void onPress(final MouseEvent e) { @@ -32,6 +40,7 @@ public class DrawingPanel extends JPanel { } private void onDrag(final MouseEvent e) { + cursor = e.getPoint(); lastPoint = toolBox.getTool().apply(lastPoint, drawing.getCurrent().getCurrent(), new Vector(e.getPoint())); repaint(); } @@ -48,6 +57,11 @@ public class DrawingPanel extends JPanel { g.setColor(Color.white); g.fillRect(0, 0, drawing.getWidth(), drawing.getHeight()); g.drawImage(drawing.getCurrent().getCurrent(), 0, 0, null); + + final BufferedImage preview = toolBox.getTool().getPreview(); + if (cursor != null && preview != null) { + g.drawImage(preview, cursor.x - preview.getWidth() / 2, cursor.y - preview.getHeight() / 2, null); + } } } diff --git a/src/main/java/de/ph87/kindermalen/tool/Tool.java b/src/main/java/de/ph87/kindermalen/tool/Tool.java index 7a864aa..a2127ae 100644 --- a/src/main/java/de/ph87/kindermalen/tool/Tool.java +++ b/src/main/java/de/ph87/kindermalen/tool/Tool.java @@ -16,4 +16,6 @@ public abstract class Tool { public abstract Vector apply(final Vector last, final BufferedImage image, final Vector point); + public abstract BufferedImage getPreview(); + } diff --git a/src/main/java/de/ph87/kindermalen/tool/stamp/StampTool.java b/src/main/java/de/ph87/kindermalen/tool/stamp/StampTool.java index 07e0aa9..5b24e1b 100644 --- a/src/main/java/de/ph87/kindermalen/tool/stamp/StampTool.java +++ b/src/main/java/de/ph87/kindermalen/tool/stamp/StampTool.java @@ -110,4 +110,9 @@ public class StampTool extends Tool { destination.getGraphics().drawImage(prepared, point.intX() - prepared.getWidth() / 2, point.intY() - prepared.getHeight() / 2, null); } + @Override + public BufferedImage getPreview() { + return prepared; + } + }