diff --git a/src/main/java/shape/tp5/Drawer.java b/src/main/java/shape/tp5/Drawer.java index d46422e13ea38b6ec66da10177eea3861527a1ff..de1d6ae85840540e01b3947d9c01dfa470c39d22 100644 --- a/src/main/java/shape/tp5/Drawer.java +++ b/src/main/java/shape/tp5/Drawer.java @@ -2,20 +2,50 @@ package shape.tp5; import javafx.scene.canvas.Canvas; import javafx.scene.canvas.GraphicsContext; +import javafx.scene.input.MouseButton; +import javafx.scene.input.MouseEvent; + import java.util.ArrayList; import java.util.List; -public class Drawer extends Canvas { - private List<Shape> shapes; + +class Drawer extends Canvas { + private List<Shape> shapes = new ArrayList<>(); + private double startX, startY, endX, endY; + private boolean drawing = false; public Drawer(double width, double height) { super(width, height); - shapes = new ArrayList<>(); + setOnMousePressed(this::handleMousePressed); + setOnMouseDragged(this::handleMouseDragged); + setOnMouseReleased(this::handleMouseReleased); + } + + private void handleMousePressed(MouseEvent event) { + if (event.getButton() == MouseButton.PRIMARY) { + startX = event.getX(); + startY = event.getY(); + drawing = true; + } + } + + private void handleMouseDragged(MouseEvent event) { + if (drawing) { + endX = event.getX(); + endY = event.getY(); + repaint(); + } } - public void add(Shape shape) { - shapes.add(shape); - repaint(); + private void handleMouseReleased(MouseEvent event) { + if (drawing) { + endX = event.getX(); + endY = event.getY(); + shapes.add(new Rectangle(Math.min(startX, endX), Math.min(startY, endY), + Math.abs(endX - startX), Math.abs(endY - startY))); + drawing = false; + repaint(); + } } public void repaint() { @@ -24,14 +54,10 @@ public class Drawer extends Canvas { for (Shape shape : shapes) { shape.paint(gc); } - } - - public Shape shapeContaining(double x, double y) { - for (Shape shape : shapes) { - if (shape.contains(x, y)) { - return shape; - } + if (drawing) { + gc.setStroke(javafx.scene.paint.Color.BLACK); + gc.strokeRect(Math.min(startX, endX), Math.min(startY, endY), + Math.abs(endX - startX), Math.abs(endY - startY)); } - return null; } }