refactor
[fanfix.git] / src / jexer / backend / MultiScreen.java
index b77872bba5f6eb617c70dace855efe9c9501bb2c..f6067984ede18152cfcac42f8bdbcb468b9f6317 100644 (file)
@@ -241,7 +241,7 @@ public class MultiScreen implements Screen {
      * @param ch character to draw
      * @param attr attributes to use (bold, foreColor, backColor)
      */
-    public void putAll(final char ch, final CellAttributes attr) {
+    public void putAll(final int ch, final CellAttributes attr) {
         for (Screen screen: screens) {
             screen.putAll(ch, attr);
         }
@@ -268,7 +268,7 @@ public class MultiScreen implements Screen {
      * @param ch character to draw
      * @param attr attributes to use (bold, foreColor, backColor)
      */
-    public void putCharXY(final int x, final int y, final char ch,
+    public void putCharXY(final int x, final int y, final int ch,
         final CellAttributes attr) {
 
         for (Screen screen: screens) {
@@ -283,7 +283,7 @@ public class MultiScreen implements Screen {
      * @param y row coordinate.  0 is the top-most row.
      * @param ch character to draw
      */
-    public void putCharXY(final int x, final int y, final char ch) {
+    public void putCharXY(final int x, final int y, final int ch) {
         for (Screen screen: screens) {
             screen.putCharXY(x, y, ch);
         }
@@ -329,7 +329,7 @@ public class MultiScreen implements Screen {
      * @param attr attributes to use (bold, foreColor, backColor)
      */
     public void vLineXY(final int x, final int y, final int n,
-        final char ch, final CellAttributes attr) {
+        final int ch, final CellAttributes attr) {
 
         for (Screen screen: screens) {
             screen.vLineXY(x, y, n, ch, attr);
@@ -346,7 +346,7 @@ public class MultiScreen implements Screen {
      * @param attr attributes to use (bold, foreColor, backColor)
      */
     public void hLineXY(final int x, final int y, final int n,
-        final char ch, final CellAttributes attr) {
+        final int ch, final CellAttributes attr) {
 
         for (Screen screen: screens) {
             screen.hLineXY(x, y, n, ch, attr);
@@ -646,14 +646,7 @@ public class MultiScreen implements Screen {
     public int getTextWidth() {
         int textWidth = 16;
         for (Screen screen: screens) {
-            int newTextWidth = textWidth;
-            if (screen instanceof MultiScreen) {
-                newTextWidth = ((MultiScreen) screen).getTextWidth();
-            } else if (screen instanceof ECMA48Terminal) {
-                newTextWidth = ((ECMA48Terminal) screen).getTextWidth();
-            } else if (screen instanceof SwingTerminal) {
-                newTextWidth = ((SwingTerminal) screen).getTextWidth();
-            }
+            int newTextWidth = screen.getTextWidth();
             if (newTextWidth < textWidth) {
                 textWidth = newTextWidth;
             }
@@ -669,14 +662,7 @@ public class MultiScreen implements Screen {
     public int getTextHeight() {
         int textHeight = 20;
         for (Screen screen: screens) {
-            int newTextHeight = textHeight;
-            if (screen instanceof MultiScreen) {
-                newTextHeight = ((MultiScreen) screen).getTextHeight();
-            } else if (screen instanceof ECMA48Terminal) {
-                newTextHeight = ((ECMA48Terminal) screen).getTextHeight();
-            } else if (screen instanceof SwingTerminal) {
-                newTextHeight = ((SwingTerminal) screen).getTextHeight();
-            }
+            int newTextHeight = screen.getTextHeight();
             if (newTextHeight < textHeight) {
                 textHeight = newTextHeight;
             }
@@ -684,4 +670,33 @@ public class MultiScreen implements Screen {
         return textHeight;
     }
 
+    /**
+     * Invert the cell color at a position, including both halves of a
+     * double-width cell.
+     *
+     * @param x column position
+     * @param y row position
+     */
+    public void invertCell(final int x, final int y) {
+        for (Screen screen: screens) {
+            screen.invertCell(x, y);
+        }
+    }
+
+    /**
+     * Invert the cell color at a position.
+     *
+     * @param x column position
+     * @param y row position
+     * @param onlyThisCell if true, only invert this cell, otherwise invert
+     * both halves of a double-width cell if necessary
+     */
+    public void invertCell(final int x, final int y,
+        final boolean onlyThisCell) {
+
+        for (Screen screen: screens) {
+            screen.invertCell(x, y, onlyThisCell);
+        }
+    }
+
 }