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;
import java.awt.*;
public TextPointer selectionEnd = new TextPointer(0, 0);
public TextPointer cursorLocation = new TextPointer(0, 0);
Page page = new Page();
- ColorConfig colorConfig = new ColorConfig();
+ LookAndFeel lookAndFeel;
boolean repaintPage = false;
public TextEditComponent(final Transform transform,
- final ViewPanel viewPanel, final Point2D sizeInWorldCoordinates) {
+ final ViewPanel viewPanel,
+ final Point2D sizeInWorldCoordinates,
+ LookAndFeel lookAndFeel) {
super(transform, viewPanel, sizeInWorldCoordinates.to3D());
- // initialize visual panel
-
+ this.lookAndFeel = lookAndFeel;
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);
+ textCanvas = new TextCanvas(
+ new Transform(),
+ new TextPointer(rows, columns),
+ lookAndFeel.foreground, lookAndFeel.background);
textCanvas.setMouseInteractionController(this);
identSelection:
{
- // check that identation is possible
+ // check that indentation is possible
for (int y = selectionStart.row; y < selectionEnd.row; y++) {
final TextLine textLine = page.getLine(y);
public void repaintPage() {
- final int chXe = textCanvas.getSize().column + 2;
- final int chYe = textCanvas.getSize().row + 2;
+ final int columnCount = textCanvas.getSize().column + 2;
+ final int rowCount = textCanvas.getSize().row + 2;
- for (int cy = 0; cy < chYe; cy++)
- for (int cx = 0; cx < chXe; cx++) {
- final boolean isTabMargin = ((cx + scrolledCharacters) % 4) == 0;
+ for (int row = 0; row < rowCount; row++)
+ for (int column = 0; column < columnCount; column++) {
+ final boolean isTabMargin = ((column + scrolledCharacters) % 4) == 0;
- if ((cx == (cursorLocation.column - scrolledCharacters))
- & (cy == (cursorLocation.row - scrolledLines))) {
+ if ((column == (cursorLocation.column - scrolledCharacters))
+ & (row == (cursorLocation.row - scrolledLines))) {
// cursor
- textCanvas.setBackgroundColor(colorConfig.cursorBack);
- textCanvas.setForegroundColor(colorConfig.cursorText);
- } else if (new TextPointer(cy + scrolledLines, cx).isBetween(
+ textCanvas.setBackgroundColor(lookAndFeel.cursorBackground);
+ textCanvas.setForegroundColor(lookAndFeel.cursorForeground);
+ } else if (new TextPointer(row + scrolledLines, column).isBetween(
selectionStart, selectionEnd)) {
// selected text
- textCanvas.setBackgroundColor(colorConfig.selectedBack);
- textCanvas.setForegroundColor(colorConfig.selectedText);
+ textCanvas.setBackgroundColor(lookAndFeel.selectionBackground);
+ textCanvas.setForegroundColor(lookAndFeel.selectionForeground);
} else {
// normal text
- textCanvas.setBackgroundColor(colorConfig.normalBack);
- textCanvas.setForegroundColor(colorConfig.normalText);
+ textCanvas.setBackgroundColor(lookAndFeel.background);
+ textCanvas.setForegroundColor(lookAndFeel.foreground);
if (isTabMargin)
textCanvas
- .setBackgroundColor(colorConfig.tabulatorBack);
+ .setBackgroundColor(lookAndFeel.tabStopBackground);
}
- final char charUnderCursor = page.getChar(cy + scrolledLines,
- cx + scrolledCharacters);
+ final char charUnderCursor = page.getChar(row + scrolledLines,
+ column + scrolledCharacters);
- textCanvas.putChar(cy, cx, charUnderCursor);
+ textCanvas.putChar(row, column, charUnderCursor);
}
}
public void repaintRow(final int rowNumber) {
- // TODO: fix this
+ // TODO: Optimize this. No need to repaint entire page.
repaintPage();
}