Skip to content
Snippets Groups Projects
Select Git revision
  • 3175d3502a5bb0c1fe4a66191cb7079b1a5cb6e5
  • master default protected
  • revert-d81c9d6d
3 results

Drawer.java

Blame
  • Forked from COUETOUX Basile / graphic-2020
    Source project has a limited visibility.
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    Drawer.java 3.38 KiB
    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();