#16 expose columns, rows, font size
authorKevin Lamonte <kevin.lamonte@gmail.com>
Sat, 5 Aug 2017 15:28:42 +0000 (11:28 -0400)
committerKevin Lamonte <kevin.lamonte@gmail.com>
Sat, 5 Aug 2017 15:28:42 +0000 (11:28 -0400)
README.md
src/jexer/TApplication.java
src/jexer/backend/SwingBackend.java
src/jexer/io/SwingScreen.java
src/jexer/session/SwingSessionInfo.java

index 6bf20a962e3e0046a4141b8472ecf0682702d712..b4114f32a3186cd50900758933aa8c14fedb8957 100644 (file)
--- a/README.md
+++ b/README.md
@@ -24,11 +24,11 @@ Jexer currently supports three backends:
   TCP socket.  jexer.demos.Demo3 demonstrates how one might use a
   character encoding than the default UTF-8.
 
-* Java Swing UI.  The default window size for Swing is 80x25, which is
-  set in jexer.session.SwingSession.  For the demo applications, this
-  is the default backend on Windows and Mac platforms.  This backend
-  can be explicitly selected for the demo applications by setting
-  jexer.Swing=true.
+* Java Swing UI.  The default window size for Swing is 80x25 and 20
+  point font; this can be changed in the TApplication(BackendType)
+  constructor.  For the demo applications, this is the default backend
+  on Windows and Mac platforms.  This backend can be explicitly
+  selected for the demo applications by setting jexer.Swing=true.
 
 Additional backends can be created by subclassing
 jexer.backend.Backend and passing it into the TApplication
index d735e48b8da93d500451c3571f1d67d1837a605e..3907a9d15bda19c2bb636a0fe79e165012eb3f3b 100644 (file)
@@ -635,6 +635,12 @@ public class TApplication implements Runnable {
 
         switch (backendType) {
         case SWING:
+            // The default SwingBackend is 80x25, 20 pt font.  If you want to
+            // change that, you can pass the extra arguments to the
+            // SwingBackend constructor here.  For example, if you wanted
+            // 90x30, 16 pt font:
+            //
+            // backend = new SwingBackend(this, 90, 30, 16);
             backend = new SwingBackend(this);
             break;
         case XTERM:
index c881b9a791021ee6e026b37620f6f0a83eca7212..acca7fa0b66c0e4d056e8b268d504b11de83f731 100644 (file)
@@ -46,14 +46,31 @@ public final class SwingBackend extends Backend {
     private SwingTerminal terminal;
 
     /**
-     * Public constructor.
+     * Public constructor.  The window will be 80x25 with font size 20 pts.
      *
      * @param listener the object this backend needs to wake up when new
      * input comes in
      */
     public SwingBackend(final Object listener) {
+        this(listener, 80, 25, 20);
+    }
+
+    /**
+     * Public constructor.
+     *
+     * @param listener the object this backend needs to wake up when new
+     * input comes in
+     * @param windowWidth the number of text columns to start with
+     * @param windowHeight the number of text rows to start with
+     * @param fontSize the size in points.  Good values to pick are: 16, 20,
+     * 22, and 24.
+     */
+    public SwingBackend(final Object listener, final int windowWidth,
+        final int windowHeight, final int fontSize) {
+
         // Create a screen
-        SwingScreen screen = new SwingScreen();
+        SwingScreen screen = new SwingScreen(windowWidth, windowHeight,
+            fontSize);
         this.screen = screen;
 
         // Create the Swing event listeners
index 24b007a3040cf1a79db1d6d146e2ee0138025b38..ee8467dd076008970784d1225609f516cbc9a469 100644 (file)
@@ -308,8 +308,10 @@ public final class SwingScreen extends Screen {
          * Public constructor.
          *
          * @param screen the Screen that Backend talks to
+         * @param fontSize the size in points.  Good values to pick are: 16,
+         * 20, 22, and 24.
          */
-        public SwingFrame(final SwingScreen screen) {
+        public SwingFrame(final SwingScreen screen, final int fontSize) {
             this.screen = screen;
             setDOSColors();
 
@@ -342,13 +344,13 @@ public final class SwingScreen extends Screen {
                         getContextClassLoader();
                 InputStream in = loader.getResourceAsStream(FONTFILE);
                 Font terminusRoot = Font.createFont(Font.TRUETYPE_FONT, in);
-                Font terminus = terminusRoot.deriveFont(Font.PLAIN, 20);
+                Font terminus = terminusRoot.deriveFont(Font.PLAIN, fontSize);
                 setFont(terminus);
                 gotTerminus = true;
             } catch (Exception e) {
                 e.printStackTrace();
                 // setFont(new Font("Liberation Mono", Font.PLAIN, 24));
-                setFont(new Font(Font.MONOSPACED, Font.PLAIN, 24));
+                setFont(new Font(Font.MONOSPACED, Font.PLAIN, fontSize));
             }
             pack();
 
@@ -742,16 +744,24 @@ public final class SwingScreen extends Screen {
 
     /**
      * Public constructor.
+     *
+     * @param windowWidth the number of text columns to start with
+     * @param windowHeight the number of text rows to start with
+     * @param fontSize the size in points.  Good values to pick are: 16, 20,
+     * 22, and 24.
      */
-    public SwingScreen() {
+    public SwingScreen(final int windowWidth, final int windowHeight,
+        final int fontSize) {
+
         try {
             SwingUtilities.invokeAndWait(new Runnable() {
                 public void run() {
-                    SwingScreen.this.frame = new SwingFrame(SwingScreen.this);
+                    SwingScreen.this.frame = new SwingFrame(SwingScreen.this,
+                        fontSize);
                     SwingScreen.this.sessionInfo =
                         new SwingSessionInfo(SwingScreen.this.frame,
-                            frame.textWidth,
-                            frame.textHeight);
+                            frame.textWidth, frame.textHeight,
+                            windowWidth, windowHeight);
 
                     SwingScreen.this.setDimensions(sessionInfo.getWindowWidth(),
                         sessionInfo.getWindowHeight());
index 07e7b227d7f9bd4045df8639d5df0f5e13af339f..dcba27da5dc37a2778e4aa02ad5eb5483dab058d 100644 (file)
@@ -133,13 +133,17 @@ public final class SwingSessionInfo implements SessionInfo {
      * @param frame the Swing Frame
      * @param textWidth the width of a cell in pixels
      * @param textHeight the height of a cell in pixels
+     * @param windowWidth the number of text columns to start with
+     * @param windowHeight the number of text rows to start with
      */
     public SwingSessionInfo(final Frame frame, final int textWidth,
-        final int textHeight) {
+        final int textHeight, final int windowWidth, final int windowHeight) {
 
-        this.frame      = frame;
-        this.textWidth  = textWidth;
-        this.textHeight = textHeight;
+        this.frame              = frame;
+        this.textWidth          = textWidth;
+        this.textHeight         = textHeight;
+        this.windowWidth        = windowWidth;
+        this.windowHeight       = windowHeight;
     }
 
     /**