package shape; import javafx.scene.canvas.Canvas; import javafx.scene.canvas.GraphicsContext; import javafx.scene.input.KeyCode; import javafx.scene.input.MouseButton; import java.util.ArrayList; import java.util.List; public class Drawer { private List<Shape> shapes; // private double width; // private double height; private Canvas canvas; private GraphicsContext gc; private String currentShapeType = "rectangle"; private Shape tempShape = null; private boolean isFinished = false; public Drawer(double width, double height) { // this.width = width; // this.height = height; shapes = new ArrayList<>(); canvas = new Canvas(width,height); gc = canvas.getGraphicsContext2D(); setupMouseHandlers(); setupKeyHandlers(); } public void add(Shape shape) { shapes.add(shape); } public void repaint(){ gc.clearRect(0, 0, canvas.getWidth(), canvas.getHeight()); for(Shape shape : shapes){ shape.paint(gc); } if (tempShape != null){ tempShape.paint(gc); } } private void setupMouseHandlers(){ canvas.setOnMousePressed(event -> { if(event.getButton() == MouseButton.PRIMARY){ double x = event.getX(); double y = event.getY(); // tempShape = new Rectangle(x, y, 0, 0); if (currentShapeType.equals("rectangle")) { tempShape = new Rectangle(x, y, 0, 0); }else if (currentShapeType.equals("circle")) { tempShape = new Circle(x, y, 0); } } }); canvas.setOnMouseDragged(event ->{ if (tempShape != null) { double x = event.getX(); double y = event.getY(); if (tempShape instanceof Rectangle){ ((Rectangle) tempShape).updateSize(x,y); }else if (tempShape instanceof Circle){ ((Circle) tempShape).updateRadius(x,y); } repaint(); } }); canvas.setOnMouseReleased(event -> { if(event.getButton() == MouseButton.PRIMARY && tempShape != null){ shapes.add(tempShape); if (tempShape instanceof Rectangle){ ((Rectangle) tempShape).setFinished(true); }else if (tempShape instanceof Circle){ ((Circle) tempShape).setFinished(true); } repaint(); tempShape = null; } }); } private void setupKeyHandlers(){ canvas.setFocusTraversable(true); canvas.setOnKeyPressed(event -> { if (event.getCode() == KeyCode.R){ currentShapeType = "rectangle"; System.out.println("Current shape type is: " + currentShapeType); }else if (event.getCode() == KeyCode.C){ currentShapeType = "circle"; System.out.println("Current shape type is: " + currentShapeType); } }); } /* public Shape shapeContaining(double x, double y){ for(Shape shape : shapes){ if (shape.contains(x, y)){ return shape; } } return null; }*/ public Canvas getCanvas() { return canvas; } }