diff --git a/graphical-app/pom.xml b/graphical-app/pom.xml
index a1db254..fef568a 100644
--- a/graphical-app/pom.xml
+++ b/graphical-app/pom.xml
@@ -36,7 +36,13 @@
junit-jupiter-engine
${junit.version}
test
-
+
+
+ org.controlsfx
+ controlsfx
+ 11.2.1
+
+
diff --git a/graphical-app/src/main/java/fr/emiko/graphicalapp/HelloApplication.java b/graphical-app/src/main/java/fr/emiko/graphicalapp/HelloApplication.java
index 3ed2999..649b3e6 100644
--- a/graphical-app/src/main/java/fr/emiko/graphicalapp/HelloApplication.java
+++ b/graphical-app/src/main/java/fr/emiko/graphicalapp/HelloApplication.java
@@ -12,7 +12,7 @@ public class HelloApplication extends Application {
public void start(Stage stage) throws IOException {
FXMLLoader fxmlLoader = new FXMLLoader(HelloApplication.class.getResource("hello-view.fxml"));
Scene scene = new Scene(fxmlLoader.load(), 320, 240);
- stage.setTitle("Hello!");
+ stage.setTitle("PixelWriter");
stage.setScene(scene);
stage.show();
}
diff --git a/graphical-app/src/main/java/fr/emiko/graphicalapp/HelloController.java b/graphical-app/src/main/java/fr/emiko/graphicalapp/HelloController.java
index 63b4e52..5cfca8a 100644
--- a/graphical-app/src/main/java/fr/emiko/graphicalapp/HelloController.java
+++ b/graphical-app/src/main/java/fr/emiko/graphicalapp/HelloController.java
@@ -1,14 +1,100 @@
package fr.emiko.graphicalapp;
+import javafx.application.Platform;
+import javafx.event.ActionEvent;
import javafx.fxml.FXML;
+import javafx.fxml.Initializable;
+import javafx.scene.SnapshotParameters;
+import javafx.scene.canvas.Canvas;
import javafx.scene.control.Label;
+import javafx.scene.canvas.GraphicsContext;
+import javafx.scene.control.MenuItem;
+import javafx.scene.image.PixelReader;
+import javafx.scene.image.PixelWriter;
+import javafx.scene.image.WritableImage;
+import javafx.scene.input.MouseEvent;
+import javafx.scene.paint.Color;
+import javafx.scene.paint.Paint;
+import fr.emiko.graphicsElement.Stroke;
-public class HelloController {
- @FXML
- private Label welcomeText;
+import java.awt.*;
+import java.net.URL;
+import java.util.ResourceBundle;
+import java.util.Vector;
- @FXML
- protected void onHelloButtonClick() {
- welcomeText.setText("Welcome to JavaFX Application!");
+public class HelloController implements Initializable {
+ public Canvas drawingCanvas;
+ public MenuItem saveButton;
+ public MenuItem loadButton;
+ public MenuItem newCanvasButton;
+ private double posX = 0;
+ private double posY = 0;
+ private Vector strokes = new Vector<>();
+ private Vector lastSaved = new Vector<>();
+
+ @Override
+ public void initialize(URL url, ResourceBundle resourceBundle) {
+ drawingCanvas.setOnMouseDragged(this::printLine);
+ drawingCanvas.setOnMouseClicked(this::resetPos);
+ saveButton.setOnAction(this::onActionSave);
+ loadButton.setOnAction(this::onActionLoad);
+ newCanvasButton.setOnAction(this::onActionCreateCanvas);
}
+
+ private void onActionCreateCanvas(ActionEvent actionEvent) {
+ }
+
+ private void onActionLoad(ActionEvent actionEvent) {
+// drawingCanvas.getGraphicsContext2D().drawImage(lastSaved, 0, 0);
+ GraphicsContext gc = drawingCanvas.getGraphicsContext2D();
+ gc.clearRect(0, 0, drawingCanvas.getWidth(), drawingCanvas.getHeight());
+ for (Stroke stroke : lastSaved) {
+ stroke.draw(gc);
+ }
+ strokes = (Vector) lastSaved.clone();
+ }
+
+ private void onActionSave(ActionEvent actionEvent) {
+ GraphicsContext gc = drawingCanvas.getGraphicsContext2D();
+ lastSaved = (Vector) strokes.clone();
+
+ }
+
+ private void resetPos(MouseEvent mouseEvent) {
+ posX = 0;
+ posY = 0;
+ }
+
+ private void printLine(MouseEvent mouseEvent) {
+ GraphicsContext gc = drawingCanvas.getGraphicsContext2D();
+// gc.setFill(Color.BLACK);
+// gc.setStroke(Color.BLACK);
+// gc.beginPath();
+// if (posX == 0 || posY == 0) {
+// posX = mouseEvent.getX();
+// posY = mouseEvent.getY();
+// }
+// gc.moveTo(posX, posY);
+// gc.lineTo(mouseEvent.getX(), mouseEvent.getY());
+// gc.closePath();
+// gc.stroke();
+// posX = mouseEvent.getX();
+// posY = mouseEvent.getY();
+
+ if (posX == 0 || posY == 0) {
+ posX = mouseEvent.getX();
+ posY = mouseEvent.getY();
+ }
+
+ Stroke stroke = new Stroke(posX, posY, mouseEvent.getX(), mouseEvent.getY());
+ strokes.add(stroke);
+ stroke.draw(gc);
+
+ posX = mouseEvent.getX();
+ posY = mouseEvent.getY();
+
+ System.out.println(stroke);
+
+ }
+
}
\ No newline at end of file
diff --git a/graphical-app/src/main/java/fr/emiko/graphicsElement/Stroke.java b/graphical-app/src/main/java/fr/emiko/graphicsElement/Stroke.java
new file mode 100644
index 0000000..eb509b4
--- /dev/null
+++ b/graphical-app/src/main/java/fr/emiko/graphicsElement/Stroke.java
@@ -0,0 +1,39 @@
+package fr.emiko.graphicsElement;
+
+import javafx.scene.canvas.GraphicsContext;
+import javafx.scene.shape.Path;
+
+import java.awt.*;
+
+public class Stroke {
+ private final double fromX;
+ private final double fromY;
+ private final double toX;
+ private final double toY;
+
+ public Stroke (double fromX, double fromY, double toX, double toY) {
+ this.fromX = fromX;
+ this.fromY = fromY;
+ this.toX = toX;
+ this.toY = toY;
+ }
+
+ public void draw (GraphicsContext g) {
+// g.setStroke(javafx.scene.paint.Color.BLACK);
+// g.setLineWidth(1);
+// g.beginPath();
+// g.moveTo(fromX, fromY);
+// g.lineTo(toX, toY);
+// g.closePath();
+// g.stroke();
+// g.fill();
+
+ g.setFill(javafx.scene.paint.Color.BLACK);
+ g.fillOval(toX-5, toY-5, 10, 10);
+ }
+
+ @Override
+ public String toString () {
+ return "Stroke{fromX=%f, fromY=%f, toX=%f, toY=%f}".formatted(fromX, fromY, toX, toY);
+ }
+}
diff --git a/graphical-app/src/main/java/module-info.java b/graphical-app/src/main/java/module-info.java
index 2311359..0e41edb 100644
--- a/graphical-app/src/main/java/module-info.java
+++ b/graphical-app/src/main/java/module-info.java
@@ -1,6 +1,8 @@
module fr.emiko.graphicalapp {
requires javafx.controls;
requires javafx.fxml;
+ requires java.desktop;
+ requires org.controlsfx.controls;
opens fr.emiko.graphicalapp to javafx.fxml;
diff --git a/graphical-app/src/main/resources/fr/emiko/graphicalapp/hello-view.fxml b/graphical-app/src/main/resources/fr/emiko/graphicalapp/hello-view.fxml
index d15ac55..8ce89a8 100644
--- a/graphical-app/src/main/resources/fr/emiko/graphicalapp/hello-view.fxml
+++ b/graphical-app/src/main/resources/fr/emiko/graphicalapp/hello-view.fxml
@@ -1,16 +1,59 @@
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+