Skip to content
Snippets Groups Projects
Drawer.java 3.38 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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;
    
    MANSOUR Chadi's avatar
    MANSOUR Chadi committed
    //    private double width;
    //    private double height;
    
        private Canvas canvas;
        private GraphicsContext gc;
    
    
        private  String currentShapeType = "rectangle";
        private Shape tempShape = null;
    
    MANSOUR Chadi's avatar
    MANSOUR Chadi committed
        private boolean isFinished = false;
    
    
    
        public Drawer(double width, double height) {
    
    MANSOUR Chadi's avatar
    MANSOUR Chadi committed
    //        this.width = width;
    //        this.height = height;
    
            shapes = new ArrayList<>();
            canvas = new Canvas(width,height);
            gc = canvas.getGraphicsContext2D();
            setupMouseHandlers();
    
        }
    
        public void add(Shape shape) {
            shapes.add(shape);
        }
        public void repaint(){
    
    MANSOUR Chadi's avatar
    MANSOUR Chadi committed
            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);
                    }
    
    MANSOUR Chadi's avatar
    MANSOUR Chadi committed
    
            canvas.setOnMouseDragged(event ->{
    
    MANSOUR Chadi's avatar
    MANSOUR Chadi committed
                    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);
                    }
    
    MANSOUR Chadi's avatar
    MANSOUR Chadi committed
                    repaint();
                }
            });
    
    
            canvas.setOnMouseReleased(event -> {
    
                if(event.getButton() == MouseButton.PRIMARY && tempShape != null){
                    shapes.add(tempShape);
    
    MANSOUR Chadi's avatar
    MANSOUR Chadi committed
                    if (tempShape instanceof Rectangle){
    
    Chadi's avatar
    Chadi committed
                        ((Rectangle) tempShape).setFinished(true);
    
    MANSOUR Chadi's avatar
    MANSOUR Chadi committed
                    }else if (tempShape instanceof Circle){
    
    Chadi's avatar
    Chadi committed
    
                        ((Circle) tempShape).setFinished(true);
    
    MANSOUR Chadi's avatar
    MANSOUR Chadi committed
                    }
    
                    repaint();
    
    MANSOUR Chadi's avatar
    MANSOUR Chadi committed
                    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;
    
    MANSOUR Chadi's avatar
    MANSOUR Chadi committed
    
    
        public Canvas getCanvas() {
            return canvas;
        }
    }