Updated readability of the code.
[sixth-3d.git] / src / main / java / eu / svjatoslav / sixth / e3d / renderer / raster / shapes / composite / textcanvas / TextCanvas.java
index 5c594f2..7a0c5e5 100644 (file)
@@ -1,19 +1,14 @@
 /*
- * Sixth - System for data storage, computation, exploration and interaction.
- * Copyright ©2012-2016, 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.renderer.raster.shapes.composite.textcanvas;
 
 import eu.svjatoslav.sixth.e3d.geometry.Point3D;
-import eu.svjatoslav.sixth.e3d.geometry.Transform;
-import eu.svjatoslav.sixth.e3d.geometry.TransformPipe;
 import eu.svjatoslav.sixth.e3d.gui.RenderingContext;
 import eu.svjatoslav.sixth.e3d.gui.TextPointer;
+import eu.svjatoslav.sixth.e3d.math.Transform;
+import eu.svjatoslav.sixth.e3d.math.TransformsStack;
 import eu.svjatoslav.sixth.e3d.renderer.raster.Color;
 import eu.svjatoslav.sixth.e3d.renderer.raster.shapes.composite.TexturedRectangle;
 
@@ -22,24 +17,32 @@ import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.StringReader;
 
+import static eu.svjatoslav.sixth.e3d.renderer.raster.Color.BLACK;
+import static eu.svjatoslav.sixth.e3d.renderer.raster.Color.WHITE;
+
 public class TextCanvas extends TexturedRectangle {
 
+    // character size in world coordinates
     public static final int FONT_CHAR_WIDTH = 8;
     public static final int FONT_CHAR_HEIGHT = 16;
-    public static final Font FONT = CanvasCharacter.getFont(15);
+
+    // character size on texture
+    public static final int FONT_CHAR_WIDTH_TEXTURE_PIXELS = 16;
+    public static final int FONT_CHAR_HEIGHT_TEXTURE_PIXELS = 32;
+
+
+    public static final Font FONT = CanvasCharacter.getFont((int)(FONT_CHAR_HEIGHT_TEXTURE_PIXELS / 1.066));
     private static final String GROUP_TEXTURE = "texture";
     private static final String GROUP_CHARACTERS = "characters";
     private final TextPointer size;
     private final TextPointer cursorLocation = new TextPointer();
-    CanvasCharacter lines[][];
+    CanvasCharacter[][] lines;
     private RenderMode renderMode = null;
-    private Color backgroundColor = Color.BLACK;
-
-    private Color foregroundColor = Color.WHITE;
+    private Color backgroundColor = BLACK;
+    private Color foregroundColor = WHITE;
 
     public TextCanvas(final Transform location, final String text,
-                      final Color foregroundColor, final Color backgroundColor)
-            throws IOException {
+                      final Color foregroundColor, final Color backgroundColor) {
         this(location, getTextDimensions(text), foregroundColor,
                 backgroundColor);
         setText(text);
@@ -58,7 +61,12 @@ public class TextCanvas extends TexturedRectangle {
         this.foregroundColor = foregroundColor;
 
         // initialize underlying textured rectangle
-        initialize(columns * FONT_CHAR_WIDTH, rows * FONT_CHAR_HEIGHT, 0);
+        initialize(
+                columns * FONT_CHAR_WIDTH,
+                rows * FONT_CHAR_HEIGHT,
+                columns * FONT_CHAR_WIDTH_TEXTURE_PIXELS,
+                rows * FONT_CHAR_HEIGHT_TEXTURE_PIXELS,
+                0);
 
         getTexture().primaryBitmap.fillColor(backgroundColor);
         getTexture().resetResampledBitmapCache();
@@ -86,8 +94,7 @@ public class TextCanvas extends TexturedRectangle {
         setRenderMode(RenderMode.TEXTURE);
     }
 
-    public static TextPointer getTextDimensions(final String text)
-            throws IOException {
+    public static TextPointer getTextDimensions(final String text) {
 
         final BufferedReader reader = new BufferedReader(new StringReader(text));
 
@@ -95,7 +102,12 @@ public class TextCanvas extends TexturedRectangle {
         int columns = 0;
 
         while (true) {
-            final String line = reader.readLine();
+            final String line;
+            try {
+                line = reader.readLine();
+            } catch (IOException e) {
+                throw new RuntimeException(e);
+            }
 
             if (line == null)
                 return new TextPointer(rows, columns);
@@ -106,7 +118,7 @@ public class TextCanvas extends TexturedRectangle {
     }
 
     @Override
-    public void beforeTransformHook(final TransformPipe transformPipe,
+    public void beforeTransformHook(final TransformsStack transformPipe,
                                     final RenderingContext context) {
 
         final double textRelativeSize = context.width
@@ -133,7 +145,7 @@ public class TextCanvas extends TexturedRectangle {
             setRenderMode(RenderMode.CHARACTERS);
     }
 
-    public void cls() {
+    public void clear() {
         for (final CanvasCharacter[] line : lines)
             for (final CanvasCharacter character : line) {
                 character.setValue(' ');
@@ -147,18 +159,22 @@ public class TextCanvas extends TexturedRectangle {
     }
 
     private void drawCharToTexture(final int row, final int column,
-                                   final char character, final Color background, final Color foreground) {
+                                   final char character, final Color foreground) {
         final Graphics2D graphics = getTexture().graphics;
 
-        getTexture().primaryBitmap.drawRectangle(column * FONT_CHAR_WIDTH, row
-                        * FONT_CHAR_HEIGHT, (column * FONT_CHAR_WIDTH)
-                        + FONT_CHAR_WIDTH, (row * FONT_CHAR_HEIGHT) + FONT_CHAR_HEIGHT,
+        getTexture().primaryBitmap.drawRectangle(
+                column * FONT_CHAR_WIDTH_TEXTURE_PIXELS,
+                row * FONT_CHAR_HEIGHT_TEXTURE_PIXELS,
+                (column * FONT_CHAR_WIDTH_TEXTURE_PIXELS) + FONT_CHAR_WIDTH_TEXTURE_PIXELS,
+                (row * FONT_CHAR_HEIGHT_TEXTURE_PIXELS) + FONT_CHAR_HEIGHT_TEXTURE_PIXELS,
                 backgroundColor);
 
         graphics.setFont(FONT);
         graphics.setColor(foreground.toAwtColor());
-        graphics.drawChars(new char[]{character,}, 0, 1,
-                (column * FONT_CHAR_WIDTH) - 0, (row * FONT_CHAR_HEIGHT) + 13);
+        graphics.drawChars(
+                new char[]{character,}, 0, 1,
+                (column * FONT_CHAR_WIDTH_TEXTURE_PIXELS) - 0,
+                (row * FONT_CHAR_HEIGHT_TEXTURE_PIXELS) + (int)(FONT_CHAR_HEIGHT_TEXTURE_PIXELS / 1.23f));
 
         getTexture().resetResampledBitmapCache();
     }
@@ -167,7 +183,7 @@ public class TextCanvas extends TexturedRectangle {
         final Point3D coordinate = topLeft.clone();
 
         coordinate.translateY((row * FONT_CHAR_HEIGHT)
-                + ((FONT_CHAR_HEIGHT / 2) - 3));
+                + (FONT_CHAR_HEIGHT / 3.2));
 
         coordinate.translateX((column * FONT_CHAR_WIDTH)
                 + (FONT_CHAR_WIDTH / 2));
@@ -212,7 +228,7 @@ public class TextCanvas extends TexturedRectangle {
         canvasCharacter.setValue(character);
         canvasCharacter.setBackgroundColor(backgroundColor);
         canvasCharacter.setForegroundColor(foregroundColor);
-        drawCharToTexture(row, column, character, backgroundColor,
+        drawCharToTexture(row, column, character,
                 foregroundColor);
     }
 
@@ -248,13 +264,18 @@ public class TextCanvas extends TexturedRectangle {
         renderMode = mode;
     }
 
-    public void setText(final String text) throws IOException {
+    public void setText(final String text) {
         final BufferedReader reader = new BufferedReader(new StringReader(text));
 
         int row = 0;
 
         while (true) {
-            final String line = reader.readLine();
+            final String line;
+            try {
+                line = reader.readLine();
+            } catch (IOException e) {
+                throw new RuntimeException(e);
+            }
 
             if (line == null)
                 return;
@@ -274,11 +295,4 @@ public class TextCanvas extends TexturedRectangle {
                 character.setForegroundColor(color);
     }
 
-    // @Override
-    // public void transform(final TransformPipe transformPipe,
-    // final RenderAggregator aggregator, final RenderingContext buffer) {
-    //
-    // super.transform(transformPipe, aggregator, buffer);
-    //
-    // }
 }