From 08fd7c8b0456bfcc5a4155f9ca4e42db9c295414 Mon Sep 17 00:00:00 2001
From: a23022716 <celia.arezki.1@etu.univ-amu.fr>
Date: Fri, 11 Oct 2024 11:16:37 +0200
Subject: [PATCH] Add mouse event handling to allow the user to draw a
 rectanglein Drawer class

---
 src/main/java/shape/tp5/Drawer.java | 54 +++++++++++++++++++++--------
 1 file changed, 40 insertions(+), 14 deletions(-)

diff --git a/src/main/java/shape/tp5/Drawer.java b/src/main/java/shape/tp5/Drawer.java
index d46422e..de1d6ae 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;
     }
 }
-- 
GitLab