import eu.svjatoslav.sixth.e3d.gui.GuiComponent;
import eu.svjatoslav.sixth.e3d.gui.TextPointer;
import eu.svjatoslav.sixth.e3d.gui.ViewPanel;
+import eu.svjatoslav.sixth.e3d.gui.humaninput.KeyboardHelper;
import eu.svjatoslav.sixth.e3d.math.Transform;
import eu.svjatoslav.sixth.e3d.renderer.raster.Color;
import eu.svjatoslav.sixth.e3d.renderer.raster.shapes.composite.textcanvas.TextCanvas;
public class TextEditComponent extends GuiComponent implements ClipboardOwner {
private static final long serialVersionUID = -7118833957783600630L;
- // lines that need to be repainted
+
+ /**
+ * Text rows that need to be repainted.
+ */
private final Set<Integer> dirtyRows = new HashSet<>();
+
private final TextCanvas textCanvas;
public int scrolledCharacters = 0, scrolledLines = 0;
public boolean selecting = false;
public TextPointer selectionStart = new TextPointer(0, 0);
public TextPointer selectionEnd = new TextPointer(0, 0);
- public TextPointer cursorLocation;
+ public TextPointer cursorLocation = new TextPointer(0, 0);
Page page = new Page();
ColorConfig colorConfig = new ColorConfig();
boolean repaintPage = false;
public TextEditComponent(final Transform transform,
- final ViewPanel viewPanel, final Point2D size) {
- super(transform, viewPanel, size.to3D());
-
- cursorLocation = new TextPointer(0, 0);
+ final ViewPanel viewPanel, final Point2D sizeInWorldCoordinates) {
+ super(transform, viewPanel, sizeInWorldCoordinates.to3D());
// initialize visual panel
- final int columns = (int) (size.x / TextCanvas.FONT_CHAR_WIDTH);
- final int rows = (int) (size.y / TextCanvas.FONT_CHAR_HEIGHT);
+ final int columns = (int) (sizeInWorldCoordinates.x / TextCanvas.FONT_CHAR_WIDTH);
+ final int rows = (int) (sizeInWorldCoordinates.y / TextCanvas.FONT_CHAR_HEIGHT);
textCanvas = new TextCanvas(new Transform(), new TextPointer(rows,
columns), Color.WHITE, colorConfig.normalBack);
}
private void processKeyEvent(final KeyEvent event) {
- final int modifiers = event.getModifiers();
-
+ final int modifiers = event.getModifiersEx();
final int keyCode = event.getKeyCode();
final char keyChar = event.getKeyChar();
// System.out.println("Keycode:" + keyCode s+ ", keychar:" + keyChar);
- if (KeyboardHelper.isAlt(modifiers))
+ if (KeyboardHelper.isAltPressed(modifiers))
return;
- if (KeyboardHelper.isCtrl(modifiers)) {
+ if (KeyboardHelper.isCtrlPressed(modifiers)) {
processCtrlCombinations(keyCode);
return;
}
return;
}
- // System.out.println("Co:" + String.valueOf(code) + " Ch:" +
- // String.valueOf(keyChar));
-
- if (KeyboardHelper.isShift(modifiers)) {
+ if (KeyboardHelper.isShiftPressed(modifiers)) {
if (!selecting)
attemptSelectionStart:{
| (keyChar == 8) | (keyChar == 9))
break attemptSelectionStart;
- // System.out.println("Selection started:" + keyChar + " "
- // + keyCode);
-
selectionStart = new TextPointer(cursorLocation);
selectionEnd = selectionStart;
selecting = true;
}
private void processTab(final int modifiers) {
- if (KeyboardHelper.isShift(modifiers)) {
+ if (KeyboardHelper.isShiftPressed(modifiers)) {
if (selectionStart.compareTo(selectionEnd) != 0) {
// dedent multiple lines
ensureSelectionOrder();