package com.shootoff.gui.targets;
import java.io.File;
import java.util.Map;
import com.shootoff.config.Configuration;
import com.shootoff.gui.CanvasManager;
import javafx.event.EventHandler;
import javafx.geometry.Dimension2D;
import javafx.geometry.Point2D;
import javafx.scene.Group;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseEvent;
import javafx.scene.shape.Rectangle;
public class MirroredTarget extends TargetView {
private MirroredTarget mirroredTarget;
public MirroredTarget(File targetFile, Group target, Map<String, String> targetTags, Configuration config,
CanvasManager parent, boolean userDeletable) {
super(targetFile, target, targetTags, parent, userDeletable);
}
public void setMirroredTarget(MirroredTarget mirroredTarget) {
this.mirroredTarget = mirroredTarget;
mirrorKeyEvents();
mirrorMouseEvents();
}
private void mirrorKeyEvents() {
final EventHandler<? super KeyEvent> mirroredKeyHandler = mirroredTarget.getTargetGroup().getOnKeyPressed();
final EventHandler<? super KeyEvent> thisKeyHandler = getTargetGroup().getOnKeyPressed();
mirroredTarget.getTargetGroup().setOnKeyPressed((event) -> {
mirroredKeyHandler.handle(event);
thisKeyHandler.handle(event);
});
getTargetGroup().setOnKeyPressed((event) -> {
thisKeyHandler.handle(event);
mirroredKeyHandler.handle(event);
});
}
private void mirrorMouseEvents() {
final EventHandler<? super MouseEvent> thisMouseDraggedHandler = getTargetGroup().getOnMouseDragged();
getTargetGroup().setOnMouseDragged((event) -> {
thisMouseDraggedHandler.handle(event);
final Dimension2D targetDimension = getDimension();
mirroredTarget.mirrorSetDimensions(targetDimension.getWidth(), targetDimension.getHeight());
final Point2D targetPosition = getPosition();
mirroredTarget.mirrorSetPosition(targetPosition.getX(), targetPosition.getY());
});
final EventHandler<? super MouseEvent> thisMouseMovedHandler = getTargetGroup().getOnMouseMoved();
getTargetGroup().setOnMouseMoved((event) -> {
thisMouseMovedHandler.handle(event);
final Dimension2D targetDimension = getDimension();
mirroredTarget.mirrorSetDimensions(targetDimension.getWidth(), targetDimension.getHeight());
final Point2D targetPosition = getPosition();
mirroredTarget.mirrorSetPosition(targetPosition.getX(), targetPosition.getY());
});
}
public MirroredTarget getMirroredTarget() {
return mirroredTarget;
}
@Override
public void setPosition(double x, double y) {
mirroredTarget.mirrorSetPosition(x, y);
super.setPosition(x, y);
}
public void mirrorSetPosition(double x, double y) {
super.setPosition(x, y);
}
@Override
public void setDimensions(double newWidth, double newHeight) {
mirroredTarget.mirrorSetDimensions(newWidth, newHeight);
super.setDimensions(newWidth, newHeight);
}
public void mirrorSetDimensions(double newWidth, double newHeight) {
super.setDimensions(newWidth, newHeight);
}
@Override
public void setClip(Rectangle clip) {
mirroredTarget.mirrorSetClip(new Rectangle(clip.getX(), clip.getY(), clip.getWidth(), clip.getHeight()));
super.setClip(clip);
}
public void mirrorSetClip(Rectangle clip) {
super.setClip(clip);
}
}