X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Fsixth%2Fe3d%2Fgui%2FtextEditorComponent%2FTextEditComponent.java;h=9ee9109804c0b98288de5307b8b35fe771159e76;hb=4d8ec2cf940099ca17f075effd1c310a99f3c3a6;hp=ec54b338597250b664771453baf8bdcc76cf1da8;hpb=b1e8d7bd8c9d0905e9fe3c46fc84a11779b95982;p=sixth-3d.git diff --git a/src/main/java/eu/svjatoslav/sixth/e3d/gui/textEditorComponent/TextEditComponent.java b/src/main/java/eu/svjatoslav/sixth/e3d/gui/textEditorComponent/TextEditComponent.java index ec54b33..9ee9109 100755 --- a/src/main/java/eu/svjatoslav/sixth/e3d/gui/textEditorComponent/TextEditComponent.java +++ b/src/main/java/eu/svjatoslav/sixth/e3d/gui/textEditorComponent/TextEditComponent.java @@ -1,19 +1,15 @@ /* - * Sixth 3D engine. Copyright ©2012-2017, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 3 of the GNU Lesser General Public License - * or later as published by the Free Software Foundation. - * + * Sixth 3D engine. Author: Svjatoslav Agejenko. + * This project is released under Creative Commons Zero (CC0) license. */ - package eu.svjatoslav.sixth.e3d.gui.textEditorComponent; import eu.svjatoslav.sixth.e3d.geometry.Point2D; -import eu.svjatoslav.sixth.e3d.geometry.Transform; import eu.svjatoslav.sixth.e3d.gui.GuiComponent; import eu.svjatoslav.sixth.e3d.gui.TextPointer; -import eu.svjatoslav.sixth.e3d.gui.ViewContext; +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; @@ -27,28 +23,30 @@ import java.util.Set; 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 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 ViewContext viewContext, final Point2D size) { - super(transform, viewContext, 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); @@ -249,8 +247,8 @@ public class TextEditComponent extends GuiComponent implements ClipboardOwner { * Parse key presses. */ @Override - public void keyPressed(final KeyEvent event, final ViewContext viewContext) { - super.keyPressed(event, viewContext); + public boolean keyPressed(final KeyEvent event, final ViewPanel viewPanel) { + super.keyPressed(event, viewPanel); processKeyEvent(event); @@ -259,6 +257,7 @@ public class TextEditComponent extends GuiComponent implements ClipboardOwner { checkCursorBoundaries(); repaintWhatNeeded(); + return true; } /** @@ -360,7 +359,6 @@ public class TextEditComponent extends GuiComponent implements ClipboardOwner { } cursorLocation.column = 0; - return; } } @@ -398,17 +396,16 @@ public class TextEditComponent extends GuiComponent implements ClipboardOwner { } 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; } @@ -425,10 +422,7 @@ public class TextEditComponent extends GuiComponent implements ClipboardOwner { return; } - // System.out.println("Co:" + String.valueOf(code) + " Ch:" + - // String.valueOf(keyChar)); - - if (KeyboardHelper.isShift(modifiers)) { + if (KeyboardHelper.isShiftPressed(modifiers)) { if (!selecting) attemptSelectionStart:{ @@ -439,9 +433,6 @@ public class TextEditComponent extends GuiComponent implements ClipboardOwner { | (keyChar == 8) | (keyChar == 9)) break attemptSelectionStart; - // System.out.println("Selection started:" + keyChar + " " - // + keyCode); - selectionStart = new TextPointer(cursorLocation); selectionEnd = selectionStart; selecting = true; @@ -497,7 +488,7 @@ public class TextEditComponent extends GuiComponent implements ClipboardOwner { } private void processTab(final int modifiers) { - if (KeyboardHelper.isShift(modifiers)) { + if (KeyboardHelper.isShiftPressed(modifiers)) { if (selectionStart.compareTo(selectionEnd) != 0) { // dedent multiple lines ensureSelectionOrder();