*
* The MIT License (MIT)
*
- * Copyright (C) 2017 Kevin Lamonte
+ * Copyright (C) 2019 Kevin Lamonte
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* Swing to support queryWindowSize(). The username is blank, language is
* "en_US", with a 80x25 text window.
*/
-public final class SwingSessionInfo implements SessionInfo {
+public class SwingSessionInfo implements SessionInfo {
+
+ // ------------------------------------------------------------------------
+ // Variables --------------------------------------------------------------
+ // ------------------------------------------------------------------------
/**
* The Swing JFrame or JComponent.
*/
private int windowHeight = 25;
+ // ------------------------------------------------------------------------
+ // Constructors -----------------------------------------------------------
+ // ------------------------------------------------------------------------
+
+ /**
+ * Public constructor.
+ *
+ * @param swing the Swing JFrame or JComponent
+ * @param textWidth the width of a cell in pixels
+ * @param textHeight the height of a cell in pixels
+ */
+ public SwingSessionInfo(final SwingComponent swing, final int textWidth,
+ final int textHeight) {
+
+ this.swing = swing;
+ this.textWidth = textWidth;
+ this.textHeight = textHeight;
+ }
+
+ /**
+ * Public constructor.
+ *
+ * @param swing the Swing JFrame or JComponent
+ * @param textWidth the width of a cell in pixels
+ * @param textHeight the height of a cell in pixels
+ * @param width the number of columns
+ * @param height the number of rows
+ */
+ public SwingSessionInfo(final SwingComponent swing, final int textWidth,
+ final int textHeight, final int width, final int height) {
+
+ this.swing = swing;
+ this.textWidth = textWidth;
+ this.textHeight = textHeight;
+ this.windowWidth = width;
+ this.windowHeight = height;
+ }
+
+ // ------------------------------------------------------------------------
+ // SessionInfo ------------------------------------------------------------
+ // ------------------------------------------------------------------------
+
/**
* Username getter.
*
}
/**
- * Set the dimensions of a single text cell.
- *
- * @param textWidth the width of a cell in pixels
- * @param textHeight the height of a cell in pixels
+ * Re-query the text window size.
*/
- public void setTextCellDimensions(final int textWidth,
- final int textHeight) {
+ public void queryWindowSize() {
+ Insets insets = swing.getInsets();
+ int width = swing.getWidth() - insets.left - insets.right;
+ int height = swing.getHeight() - insets.top - insets.bottom;
+ // In theory, if Java reported pixel-perfect dimensions, the
+ // expressions above would precisely line up with the requested
+ // window size from SwingComponent.setDimensions(). In practice,
+ // there appears to be a small difference. Add half a text cell in
+ // both directions before the division to hopefully reach the same
+ // result as setDimensions() was supposed to give us.
+ width += (textWidth / 2);
+ height += (textHeight / 2);
+ windowWidth = width / textWidth;
+ windowHeight = height / textHeight;
- this.textWidth = textWidth;
- this.textHeight = textHeight;
+ /*
+ System.err.printf("queryWindowSize(): frame %d %d window %d %d\n",
+ swing.getWidth(), swing.getHeight(),
+ windowWidth, windowHeight);
+ */
}
+ // ------------------------------------------------------------------------
+ // SwingSessionInfo -------------------------------------------------------
+ // ------------------------------------------------------------------------
+
/**
- * Public constructor.
+ * Set the dimensions of a single text cell.
*
- * @param swing the Swing JFrame or JComponent
* @param textWidth the width of a cell in pixels
* @param textHeight the height of a cell in pixels
*/
- public SwingSessionInfo(final SwingComponent swing, final int textWidth,
+ public void setTextCellDimensions(final int textWidth,
final int textHeight) {
- this.swing = swing;
this.textWidth = textWidth;
this.textHeight = textHeight;
}
/**
- * Public constructor.
+ * Getter for the underlying Swing component.
*
- * @param swing the Swing JFrame or JComponent
- * @param textWidth the width of a cell in pixels
- * @param textHeight the height of a cell in pixels
- * @param width the number of columns
- * @param height the number of rows
- */
- public SwingSessionInfo(final SwingComponent swing, final int textWidth,
- final int textHeight, final int width, final int height) {
-
- this.swing = swing;
- this.textWidth = textWidth;
- this.textHeight = textHeight;
- this.windowWidth = width;
- this.windowHeight = height;
- }
-
- /**
- * Re-query the text window size.
+ * @return the SwingComponent
*/
- public void queryWindowSize() {
- Insets insets = swing.getInsets();
- int width = swing.getWidth() - insets.left - insets.right;
- int height = swing.getHeight() - insets.top - insets.bottom;
- windowWidth = width / textWidth;
- windowHeight = height / textHeight;
-
- /*
- System.err.printf("queryWindowSize(): frame %d %d window %d %d\n",
- swing.getWidth(), swing.getHeight(),
- windowWidth, windowHeight);
- */
-
+ public SwingComponent getSwingComponent() {
+ return swing;
}
}