feat: implement SText shape

This commit is contained in:
2026-03-19 21:45:05 +01:00
parent bd9c6c4b7d
commit f8a6d786ee
10 changed files with 256 additions and 26 deletions

View File

@@ -6,9 +6,11 @@ import ovh.gasser.newshapes.HTMLExporter;
import ovh.gasser.newshapes.Selection;
import ovh.gasser.newshapes.attributes.ColorAttributes;
import ovh.gasser.newshapes.shapes.SCollection;
import ovh.gasser.newshapes.shapes.SText;
import ovh.gasser.newshapes.shapes.Shape;
import ovh.gasser.newshapes.ui.listeners.SelectionListener;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
@@ -24,6 +26,7 @@ public class Controller {
private final Selection selection;
private Point lastMousePos;
private boolean addingText;
Controller(ShapesView view, SCollection model) {
this.view = view;
@@ -62,6 +65,11 @@ public class Controller {
}
private void handleMousePressed(MouseEvent evt) {
if (addingText) {
placeTextAt(evt.getPoint());
return;
}
getTarget(evt, this.model)
.ifPresentOrElse(
s -> {
@@ -77,6 +85,22 @@ public class Controller {
view.repaint();
}
public void enterTextMode() {
addingText = true;
}
private void placeTextAt(Point point) {
String input = JOptionPane.showInputDialog(view, "Enter text:", "Add text", JOptionPane.PLAIN_MESSAGE);
addingText = false;
if (input == null) {
return;
}
model.add(SText.create(point.x, point.y, input));
resetSelection();
view.repaint();
}
private void handleKeyPressed(KeyEvent evt) {
switch (evt.getKeyCode()) {
case KeyEvent.VK_DELETE -> deleteSelected();