#35 emoji font wip
[fanfix.git] / src / jexer / backend / SwingTerminal.java
index 58b8f799cf7f1e1153f2ef60f2af486ba96d03da..a3825b852548c86bccf45817df32756da5ea729b 100644 (file)
@@ -182,12 +182,12 @@ public class SwingTerminal extends LogicalScreen
     /**
      * Width of a character cell in pixels.
      */
-    private int textWidth = 1;
+    private int textWidth = 16;
 
     /**
      * Height of a character cell in pixels.
      */
-    private int textHeight = 1;
+    private int textHeight = 20;
 
     /**
      * Width of a character cell in pixels, as reported by font.
@@ -403,7 +403,7 @@ public class SwingTerminal extends LogicalScreen
                     SwingTerminal.this.setDimensions(sessionInfo.
                         getWindowWidth(), sessionInfo.getWindowHeight());
 
-                    SwingTerminal.this.resizeToScreen();
+                    SwingTerminal.this.resizeToScreen(true);
                     SwingTerminal.this.swing.setVisible(true);
                 }
             });
@@ -573,6 +573,7 @@ public class SwingTerminal extends LogicalScreen
         ) {
             do {
                 do {
+                    clearPhysical();
                     drawToSwing();
                 } while (swing.getBufferStrategy().contentsRestored());
 
@@ -760,7 +761,7 @@ public class SwingTerminal extends LogicalScreen
             swing.setFont(font);
             glyphCacheBlink = new HashMap<Cell, BufferedImage>();
             glyphCache = new HashMap<Cell, BufferedImage>();
-            resizeToScreen();
+            resizeToScreen(true);
         }
     }
 
@@ -1109,13 +1110,24 @@ public class SwingTerminal extends LogicalScreen
         gotFontDimensions = true;
     }
 
+    /**
+     * Resize the physical screen to match the logical screen dimensions.
+     *
+     * @param resizeComponent if true, resize the Swing component
+     */
+    private void resizeToScreen(final boolean resizeComponent) {
+        if (resizeComponent) {
+            swing.setDimensions(textWidth * width, textHeight * height);
+        }
+        clearPhysical();
+    }
+
     /**
      * Resize the physical screen to match the logical screen dimensions.
      */
     @Override
     public void resizeToScreen() {
-        swing.setDimensions(textWidth * width, textHeight * height);
-        clearPhysical();
+        resizeToScreen(false);
     }
 
     /**
@@ -1217,9 +1229,8 @@ public class SwingTerminal extends LogicalScreen
             || (cell.isBlink() && cursorBlinkVisible)
         ) {
             gr2.setColor(attrToForegroundColor(cellColor));
-            char [] chars = new char[1];
-            chars[0] = cell.getChar();
-            gr2.drawChars(chars, 0, 1, gr2x + textAdjustX,
+            char [] chars = Character.toChars(cell.getChar());
+            gr2.drawChars(chars, 0, chars.length, gr2x + textAdjustX,
                 gr2y + textHeight - maxDescent + textAdjustY);
 
             if (cell.isUnderline()) {
@@ -1265,18 +1276,31 @@ public class SwingTerminal extends LogicalScreen
             int xPixel = cursorX * textWidth + left;
             int yPixel = cursorY * textHeight + top;
             Cell lCell = logical[cursorX][cursorY];
+            int cursorWidth = textWidth;
+            switch (lCell.getWidth()) {
+            case SINGLE:
+                // NOP
+                break;
+            case LEFT:
+                cursorWidth *= 2;
+                break;
+            case RIGHT:
+                cursorWidth *= 2;
+                xPixel -= textWidth;
+                break;
+            }
             gr.setColor(attrToForegroundColor(lCell));
             switch (cursorStyle) {
             default:
                 // Fall through...
             case UNDERLINE:
-                gr.fillRect(xPixel, yPixel + textHeight - 2, textWidth, 2);
+                gr.fillRect(xPixel, yPixel + textHeight - 2, cursorWidth, 2);
                 break;
             case BLOCK:
-                gr.fillRect(xPixel, yPixel, textWidth, textHeight);
+                gr.fillRect(xPixel, yPixel, cursorWidth, textHeight);
                 break;
             case OUTLINE:
-                gr.drawRect(xPixel, yPixel, textWidth - 1, textHeight - 1);
+                gr.drawRect(xPixel, yPixel, cursorWidth - 1, textHeight - 1);
                 break;
             }
         }