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; 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); 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(); } } 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() { GraphicsContext gc = getGraphicsContext2D(); gc.clearRect(0, 0, getWidth(), getHeight()); for (Shape shape : shapes) { shape.paint(gc); } 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)); } } }