package jp.ac.aiit.jointry.services.picture.paint.ctrl;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.geometry.Point2D;
import javafx.scene.Node;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.control.ScrollPane;
import javafx.scene.image.Image;
import javafx.scene.input.MouseEvent;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import jp.ac.aiit.jointry.services.picture.paint.PaintApplication;
import jp.ac.aiit.jointry.services.picture.paint.model.FileManager;
import jp.ac.aiit.jointry.services.picture.paint.util.ImageUtil;
import jp.ac.aiit.jointry.services.picture.paint.views.PaintTool;
public class PaintController implements Initializable, ChangeListener<Image> {
@FXML
protected ScrollPane optionCardDeck;
@FXML
private PaintTool ptool;
@FXML
private Canvas canvas;
private Point2D startPoint;
private Point2D endPoint;
private Image result;
@FXML
protected void selectTool(MouseEvent event) {
ptool = (PaintTool) event.getTarget();
setPaintTool(ptool);
}
@FXML
protected void draw(MouseEvent event) {
startPoint = new Point2D(event.getX(), event.getY());
endPoint = startPoint;
ptool.paint(canvas, startPoint, endPoint);
}
@FXML
protected void drawing(MouseEvent event) {
startPoint = endPoint;
endPoint = new Point2D(event.getX(), event.getY());
ptool.paint(canvas, startPoint, endPoint);
}
@FXML
protected void load(ActionEvent event) {
Image loadImage = FileManager.load("読込");
if (loadImage != null) {
canvas.getGraphicsContext2D().drawImage(loadImage, 0, 0);
}
}
@FXML
protected void save(ActionEvent event) {
FileManager.save("保存", ImageUtil.justResize(canvas));
}
@FXML
protected void clear(ActionEvent event) {
GraphicsContext gc = canvas.getGraphicsContext2D();
gc.setFill(Color.TRANSPARENT);
gc.clearRect(0, 0, canvas.getWidth(), canvas.getHeight());
}
@FXML
protected void complete(ActionEvent event) {
result = ImageUtil.justResize(canvas);
windowClose();
}
@FXML
protected void cancel(ActionEvent event) {
windowClose();
}
@Override
public void changed(ObservableValue<? extends Image> ov, Image oldValue, Image newValue) {
//clear(null); //クリアはしない
//描画内容が本コントローラー以外から更新された場合
canvas.getGraphicsContext2D().drawImage(newValue, 0, 0);
}
private void setPaintTool(PaintTool ptool) {
optionCardDeck.setContent((Node) ptool.getOptionCard());
PaintApplication.getModel().setPtool(ptool);
PaintApplication.getModel().addImageListener(this);
}
@Override
public void initialize(URL url, ResourceBundle rb) {
setPaintTool(ptool);
}
public void setInitImage(Image image) {
if (image != null) {
canvas.getGraphicsContext2D().drawImage(image, 0, 0);
}
}
public Image getCompleteImage() {
return result;
}
private void windowClose() {
Stage stage = (Stage) canvas.getScene().getWindow();
stage.close();
}
}