X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fjexer%2Fbackend%2FSwingSessionInfo.java;h=2f74d7012130e0eeda1f44c4721396d645493b35;hb=505be508ae7d3fb48122be548b310a238cfb91eb;hp=7457f57a0d73b185f1f618e4a035faade6e7c88b;hpb=3e0743556d1f31723a11a6019b5c2b018b4b2104;p=fanfix.git diff --git a/src/jexer/backend/SwingSessionInfo.java b/src/jexer/backend/SwingSessionInfo.java index 7457f57..2f74d70 100644 --- a/src/jexer/backend/SwingSessionInfo.java +++ b/src/jexer/backend/SwingSessionInfo.java @@ -3,7 +3,7 @@ * * 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"), @@ -35,7 +35,11 @@ import java.awt.Insets; * 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. @@ -72,6 +76,48 @@ public final class SwingSessionInfo implements SessionInfo { */ 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. * @@ -127,68 +173,54 @@ public final class SwingSessionInfo implements SessionInfo { } /** - * 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; } }