Skip to content
Snippets Groups Projects
Select Git revision
  • 16e2b1b1c43505b3dc0aef3dca74adf392def2e3
  • main default protected
2 results

Grid.java

Blame
  • Forked from TRAVERS Corentin / flooding-template
    Source project has a limited visibility.
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    Drawer.java 1.84 KiB
    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));
            }
        }
    }