package io.github.jgkamat.ViPaint.Canvas;
import io.github.jgkamat.ViPaint.Handlers.MouseToolHandler;
import io.github.jgkamat.ViPaint.Tools.MouseTool.PencilTool;
import javafx.event.EventHandler;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.input.MouseEvent;
/**
* This is a modified JavaFX Canvas, designed to display the user's permanent
* changes to the drawing.
*
* @author Jay Kamat
* @version 1.0
*/
public class PaintCanvas extends Canvas {
private GraphicsContext g;
/**
* Creates a PaintCanvas.
* @param width The width of the PaintCanvas
* @param height The height of the PaintCanvas
* @param handler A toolhandler to send events to
*/
public PaintCanvas(int width, int height, MouseToolHandler handler) {
super(width, height);
g = this.getGraphicsContext2D();
this.setFocusTraversable(false);
this.addEventHandler(MouseEvent.MOUSE_PRESSED,
new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
handler.getCurrentTool().onPress(event, g);
}
});
// This should only be called on a pencilTool
this.addEventHandler(MouseEvent.MOUSE_DRAGGED,
new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
if (handler.getCurrentTool() instanceof PencilTool) {
handler.getCurrentTool().onDrag(event, g);
}
}
});
this.addEventHandler(MouseEvent.MOUSE_RELEASED,
new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
handler.getCurrentTool().onRelease(event, g);
}
});
}
public void clear() {
this.getGraphicsContext2D().clearRect(0, 0, Short.MAX_VALUE, Short.MAX_VALUE);
}
}