19 package org.sleuthkit.autopsy.contentviewers.imagetagging;
21 import java.beans.PropertyChangeEvent;
22 import java.beans.PropertyChangeListener;
23 import java.beans.PropertyChangeSupport;
24 import javafx.event.EventHandler;
25 import javafx.scene.image.ImageView;
26 import javafx.scene.input.MouseEvent;
27 import javafx.scene.paint.Color;
28 import javafx.scene.shape.Rectangle;
48 private final PropertyChangeSupport
pcs =
new PropertyChangeSupport(
this);
66 setFill(Color.RED.deriveColor(0, 0, 0, 0));
70 double min = Math.min(image.getImage().getWidth(), image.getImage().getHeight());
71 double lineThicknessPixels = min * LINE_THICKNESS_PERCENT / 100.0;
72 setStrokeWidth(lineThicknessPixels);
73 minArea = lineThicknessPixels * lineThicknessPixels;
76 this.mousePressed = (MouseEvent event) -> {
77 if (event.isSecondaryButtonDown()) {
83 rectangleOriginX =
event.getX();
84 rectangleOriginY =
event.getY();
86 setX(rectangleOriginX);
87 setY(rectangleOriginY);
90 image.addEventHandler(MouseEvent.MOUSE_PRESSED,
this.mousePressed);
92 this.mouseDragged = (MouseEvent event) -> {
93 if (event.isSecondaryButtonDown()) {
97 double currentX =
event.getX(), currentY =
event.getY();
103 double newX = Math.min(Math.max(currentX, image.getX())
104 + lineThicknessPixels / 2, image.getImage().getWidth() - lineThicknessPixels / 2);
105 double newY = Math.min(Math.max(currentY, image.getY())
106 + lineThicknessPixels / 2, image.getImage().getHeight() - lineThicknessPixels / 2);
113 setWidth(Math.abs(offsetX));
115 double offsetY = newY - rectangleOriginY;
119 setHeight(Math.abs(offsetY));
122 image.addEventHandler(MouseEvent.MOUSE_DRAGGED,
this.mouseDragged);
124 this.mouseReleased =
event -> {
128 if ((this.getWidth() - this.getStrokeWidth())
129 * (this.getHeight() - this.getStrokeWidth()) <= minArea) {
134 this.pcs.firePropertyChange(
new PropertyChangeEvent(
this,
"New Tag",
138 .setWidth(this.getWidth())
139 .setHeight(this.getHeight())
140 .setStrokeThickness(lineThicknessPixels)));
143 image.addEventHandler(MouseEvent.MOUSE_RELEASED,
this.mouseReleased);
146 disconnectRunnable = () -> {
148 image.removeEventHandler(MouseEvent.MOUSE_RELEASED, mouseReleased);
149 image.removeEventHandler(MouseEvent.MOUSE_DRAGGED, mouseDragged);
150 image.removeEventHandler(MouseEvent.MOUSE_PRESSED, mousePressed);
162 this.pcs.addPropertyChangeListener(listener);
169 this.disconnectRunnable.run();
final EventHandler< MouseEvent > mouseReleased
ImageTagCreator(ImageView image)
void addNewTagListener(PropertyChangeListener listener)
final EventHandler< MouseEvent > mousePressed
final EventHandler< MouseEvent > mouseDragged
final Runnable disconnectRunnable
static final double LINE_THICKNESS_PERCENT
final PropertyChangeSupport pcs