Many changes:
[fanfix.git] / src / jexer / backend / SwingComponent.java
index 84e147263476050530bfed776a948d3a9fcb8e76..56eb8bff5419ca18f3f0117b6e98f6ae7cbebc78 100644 (file)
@@ -52,26 +52,14 @@ import javax.swing.JFrame;
  */
 class SwingComponent {
 
-    /**
-     * If true, use triple buffering when drawing to a JFrame.
-     */
-    public static boolean tripleBuffer = false;
+    // ------------------------------------------------------------------------
+    // Variables --------------------------------------------------------------
+    // ------------------------------------------------------------------------
 
     /**
-     * Get the BufferStrategy object needed for triple-buffering.
-     *
-     * @return the BufferStrategy
-     * @throws IllegalArgumentException if this function is called when
-     * not rendering to a JFrame
+     * If true, use triple buffering when drawing to a JFrame.
      */
-    public BufferStrategy getBufferStrategy() {
-        if (frame != null) {
-            return frame.getBufferStrategy();
-        } else {
-            throw new IllegalArgumentException("BufferStrategy not used " +
-                "for JComponent access");
-        }
-    }
+    public static boolean tripleBuffer = true;
 
     /**
      * The frame reference, if we are drawing to a JFrame.
@@ -84,22 +72,19 @@ class SwingComponent {
     private JComponent component;
 
     /**
-     * Get the JFrame reference.
-     *
-     * @return the frame, or null if this is drawing to a JComponent
+     * An optional border in pixels to add.
      */
-    public JFrame getFrame() {
-        return frame;
-    }
+    private static final int BORDER = 5;
 
     /**
-     * Get the JComponent reference.
-     *
-     * @return the component, or null if this is drawing to a JFrame
+     * Adjustable Insets for this component.  This has the effect of adding a
+     * black border around the drawing area.
      */
-    public JComponent getComponent() {
-        return component;
-    }
+    Insets adjustInsets = new Insets(BORDER, BORDER, BORDER, BORDER);
+
+    // ------------------------------------------------------------------------
+    // Constructors -----------------------------------------------------------
+    // ------------------------------------------------------------------------
 
     /**
      * Construct using a JFrame.
@@ -121,6 +106,44 @@ class SwingComponent {
         setupComponent();
     }
 
+    // ------------------------------------------------------------------------
+    // SwingComponent ---------------------------------------------------------
+    // ------------------------------------------------------------------------
+
+    /**
+     * Get the BufferStrategy object needed for triple-buffering.
+     *
+     * @return the BufferStrategy
+     * @throws IllegalArgumentException if this function is called when
+     * not rendering to a JFrame
+     */
+    public BufferStrategy getBufferStrategy() {
+        if (frame != null) {
+            return frame.getBufferStrategy();
+        } else {
+            throw new IllegalArgumentException("BufferStrategy not used " +
+                "for JComponent access");
+        }
+    }
+
+    /**
+     * Get the JFrame reference.
+     *
+     * @return the frame, or null if this is drawing to a JComponent
+     */
+    public JFrame getFrame() {
+        return frame;
+    }
+
+    /**
+     * Get the JComponent reference.
+     *
+     * @return the component, or null if this is drawing to a JFrame
+     */
+    public JComponent getComponent() {
+        return component;
+    }
+
     /**
      * Setup to render to an existing JComponent.
      */
@@ -225,11 +248,17 @@ class SwingComponent {
      * @return the value of the insets property
      */
     public Insets getInsets() {
+        Insets swingInsets = null;
         if (frame != null) {
-            return frame.getInsets();
+            swingInsets = frame.getInsets();
         } else {
-            return component.getInsets();
+            swingInsets = component.getInsets();
         }
+        Insets result = new Insets(swingInsets.top + adjustInsets.top,
+            swingInsets.left + adjustInsets.left,
+            swingInsets.bottom + adjustInsets.bottom,
+            swingInsets.right + adjustInsets.right);
+        return result;
     }
 
     /**
@@ -336,12 +365,12 @@ class SwingComponent {
     public void setDimensions(final int width, final int height) {
         // Figure out the thickness of borders and use that to set the final
         // size.
-        Insets insets = getInsets();
-
         if (frame != null) {
+            Insets insets = frame.getInsets();
             frame.setSize(width + insets.left + insets.right,
                 height + insets.top + insets.bottom);
         } else {
+            Insets insets = component.getInsets();
             component.setSize(width + insets.left + insets.right,
                 height + insets.top + insets.bottom);
         }