From 24ab4d30de6a939fd8cec13b689566f1939b262d Mon Sep 17 00:00:00 2001 From: levi yourchuck Date: Tue, 5 Mar 2024 04:10:29 -0600 Subject: [PATCH 01/11] LANTERNA-fix split panel cleanup TerminalPosition, reduce object memory churn --- .../lanterna/examples/DrawRectangle.java | 3 +- .../googlecode/lanterna/TerminalPosition.java | 166 +++++++++--------- .../lanterna/TerminalRectangle.java | 18 +- .../com/googlecode/lanterna/TerminalSize.java | 47 ++++- .../graphics/AbstractTextGraphics.java | 6 +- .../graphics/DefaultShapeRenderer.java | 8 +- .../lanterna/graphics/TextGraphics.java | 4 +- .../lanterna/graphics/TextGraphicsWriter.java | 2 +- .../lanterna/gui2/AbstractBasePane.java | 4 +- .../lanterna/gui2/AbstractBorder.java | 2 +- .../lanterna/gui2/AbstractComponent.java | 4 +- .../lanterna/gui2/AbstractComposite.java | 4 +- .../lanterna/gui2/AbstractListBox.java | 10 +- .../lanterna/gui2/AbstractWindow.java | 2 +- .../lanterna/gui2/BorderLayout.java | 12 +- .../com/googlecode/lanterna/gui2/Borders.java | 14 +- .../com/googlecode/lanterna/gui2/Button.java | 2 +- .../googlecode/lanterna/gui2/CheckBox.java | 2 +- .../googlecode/lanterna/gui2/ComboBox.java | 6 +- .../googlecode/lanterna/gui2/Component.java | 11 +- .../gui2/DefaultWindowDecorationRenderer.java | 18 +- .../lanterna/gui2/DefaultWindowManager.java | 12 +- .../gui2/EmptyWindowDecorationRenderer.java | 2 +- .../gui2/FatWindowDecorationRenderer.java | 4 +- .../googlecode/lanterna/gui2/GridLayout.java | 2 +- .../lanterna/gui2/ImageComponent.java | 2 +- .../lanterna/gui2/InteractableLookupMap.java | 18 +- .../lanterna/gui2/LinearLayout.java | 4 +- .../lanterna/gui2/MenuPopupWindow.java | 2 +- .../lanterna/gui2/MultiWindowTextGUI.java | 4 +- .../googlecode/lanterna/gui2/SplitPanel.java | 12 +- .../com/googlecode/lanterna/gui2/TextBox.java | 18 +- .../gui2/table/DefaultTableRenderer.java | 14 +- .../lanterna/input/MouseCharacterPattern.java | 2 +- .../input/ScreenInfoCharacterPattern.java | 4 +- .../lanterna/screen/AbstractScreen.java | 2 +- .../googlecode/lanterna/screen/Screen.java | 2 +- .../lanterna/screen/TerminalScreen.java | 4 +- .../lanterna/screen/VirtualScreen.java | 16 +- .../terminal/TerminalTextGraphics.java | 4 +- .../lanterna/terminal/ansi/ANSITerminal.java | 4 +- .../GraphicalTerminalImplementation.java | 4 +- .../virtual/DefaultVirtualTerminal.java | 16 +- .../virtual/VirtualTerminalTextGraphics.java | 19 +- .../terminal/win32/WindowsTerminal.java | 2 +- .../lanterna/TestTerminalPosition.java | 92 ++++++++++ .../lanterna/gui2/FullScreenTextGUITest.java | 32 ++-- .../lanterna/gui2/GUIOverTelnet.java | 2 +- .../googlecode/lanterna/gui2/InputUITest.java | 4 +- .../googlecode/lanterna/gui2/ThemeTest.java | 4 +- .../lanterna/gui2/WindowManagerTest.java | 2 +- .../lanterna/issue/Issue452Test.java | 6 +- .../lanterna/screen/DrawImageTest.java | 30 ++-- .../lanterna/screen/ScreenLineTest.java | 8 +- .../lanterna/screen/ScreenRectangleTest.java | 2 +- .../lanterna/screen/ScreenResizeTest.java | 2 +- .../lanterna/screen/ScreenTabTest.java | 10 +- .../lanterna/screen/ScreenTriangleTest.java | 12 +- .../lanterna/screen/VirtualScreenTest.java | 4 +- .../googlecode/lanterna/terminal/KeyTest.java | 8 +- .../lanterna/terminal/SimpleTerminalTest.java | 2 +- .../terminal/TerminalTextGraphicsTest.java | 6 +- .../virtual/DefaultVirtualTerminalTest.java | 150 ++++++++-------- .../lanterna/tutorial/Tutorial03.java | 4 +- 64 files changed, 526 insertions(+), 372 deletions(-) create mode 100644 src/test/java/com/googlecode/lanterna/TestTerminalPosition.java diff --git a/src/examples/java/com/googlecode/lanterna/examples/DrawRectangle.java b/src/examples/java/com/googlecode/lanterna/examples/DrawRectangle.java index b370a76d8..becf8a972 100644 --- a/src/examples/java/com/googlecode/lanterna/examples/DrawRectangle.java +++ b/src/examples/java/com/googlecode/lanterna/examples/DrawRectangle.java @@ -29,8 +29,7 @@ public static void main(String[] args) throws IOException { screen.startScreen(); screen.clear(); - tGraphics.drawRectangle( - new TerminalPosition(3,3), new TerminalSize(10,10), '*'); + tGraphics.drawRectangle(TerminalPosition.of(3,3), TerminalSize.of(10,10), '*'); screen.refresh(); screen.readInput(); diff --git a/src/main/java/com/googlecode/lanterna/TerminalPosition.java b/src/main/java/com/googlecode/lanterna/TerminalPosition.java index b65af79db..f0d3d1e1e 100644 --- a/src/main/java/com/googlecode/lanterna/TerminalPosition.java +++ b/src/main/java/com/googlecode/lanterna/TerminalPosition.java @@ -28,17 +28,49 @@ public class TerminalPosition implements Comparable { /** - * Constant for the top-left corner (0x0) + * Constants for less objects memory churn, these are from the top-left corner (column x row) */ - public static final TerminalPosition TOP_LEFT_CORNER = new TerminalPosition(0, 0); - /** - * Constant for the 1x1 position (one offset in both directions from top-left) - */ - public static final TerminalPosition OFFSET_1x1 = new TerminalPosition(1, 1); + public static final TerminalPosition OF_0x0 = new TerminalPosition(0, 0); + public static final TerminalPosition OF_0x1 = new TerminalPosition(0, 1); + public static final TerminalPosition OF_1x0 = new TerminalPosition(1, 0); + public static final TerminalPosition OF_1x1 = new TerminalPosition(1, 1); - private final int row; private final int column; - + private final int row; + /** + * @return a new TerminalPosition instance with the supplied column and row + */ + public static final TerminalPosition of(int column, int row) { + if(column == 0 && row == 0) { + return OF_0x0; + } else if(column == 0 && row == 1) { + return OF_0x1; + } else if(column == 1 && row == 0) { + return OF_1x0; + } else if(column == 1 && row == 1) { + return OF_1x1; + } + return new TerminalPosition(column, row); + } + /** + * Returns a TerminalPositoin with the column and row supplied. + * If either the column or row supplied is different than this instances column or row, then a new instance is returned. + * If both column and row are the same as this instance's column and row, then this instance is returned. + * @return Either this instance, or a new instance if column/row are different than this instance's column/row. + */ + public TerminalPosition as(int column, int row) { + return (column != this.column || row != this.row) ? of(column, row) : this; + } + /** + * Returns itself if it is equal to the supplied position, otherwise the supplied position. You can use this if you + * have a position field which is frequently recalculated but often resolves to the same; it will keep the same + * object in memory instead of swapping it out every cycle. + * @param position Position you want to return + * @return Itself if this position equals the position passed in, otherwise the position passed in + */ + public TerminalPosition as(TerminalPosition position) { + return position == null ? this : as(position.column, position.row); + } /** * Creates a new TerminalPosition object, which represents a location on the screen. There is no check to verify * that the position you specified is within the size of the current terminal and you can specify negative positions @@ -48,10 +80,9 @@ public class TerminalPosition implements Comparable { * @param row Row of the location, or the "y" coordinate, zero indexed (the first row is 0) */ public TerminalPosition(int column, int row) { - this.row = row; this.column = column; + this.row = row; } - /** * Returns the index of the column this position is representing, zero indexed (the first column has index 0). * @return Index of the column this position has @@ -59,7 +90,6 @@ public TerminalPosition(int column, int row) { public int getColumn() { return column; } - /** * Returns the index of the row this position is representing, zero indexed (the first row has index 0) * @return Index of the row this position has @@ -67,7 +97,6 @@ public int getColumn() { public int getRow() { return row; } - /** * Creates a new TerminalPosition object representing a position with the same column index as this but with a * supplied row index. @@ -75,12 +104,8 @@ public int getRow() { * @return A TerminalPosition object with the same column as this but with a specified row index */ public TerminalPosition withRow(int row) { - if(row == 0 && this.column == 0) { - return TOP_LEFT_CORNER; - } - return new TerminalPosition(this.column, row); + return as(column, row); } - /** * Creates a new TerminalPosition object representing a position with the same row index as this but with a * supplied column index. @@ -88,12 +113,8 @@ public TerminalPosition withRow(int row) { * @return A TerminalPosition object with the same row as this but with a specified column index */ public TerminalPosition withColumn(int column) { - if(column == 0 && this.row == 0) { - return TOP_LEFT_CORNER; - } - return new TerminalPosition(column, this.row); + return as(column, row); } - /** * Creates a new TerminalPosition object representing a position on the same row, but with a column offset by a * supplied value. Calling this method with delta 0 will return this, calling it with a positive delta will return @@ -102,12 +123,8 @@ public TerminalPosition withColumn(int column) { * @return New terminal position based off this one but with an applied offset */ public TerminalPosition withRelativeColumn(int delta) { - if(delta == 0) { - return this; - } - return withColumn(column + delta); + return plus(delta, 0); } - /** * Creates a new TerminalPosition object representing a position on the same column, but with a row offset by a * supplied value. Calling this method with delta 0 will return this, calling it with a positive delta will return @@ -116,12 +133,8 @@ public TerminalPosition withRelativeColumn(int delta) { * @return New terminal position based off this one but with an applied offset */ public TerminalPosition withRelativeRow(int delta) { - if(delta == 0) { - return this; - } - return withRow(row + delta); + return plus(0, delta); } - /** * Creates a new TerminalPosition object that is 'translated' by an amount of rows and columns specified by another * TerminalPosition. Same as calling @@ -130,9 +143,8 @@ public TerminalPosition withRelativeRow(int delta) { * @return New TerminalPosition that is the result of the original with added translation */ public TerminalPosition withRelative(TerminalPosition translate) { - return withRelative(translate.getColumn(), translate.getRow()); + return plus(translate); } - /** * Creates a new TerminalPosition object that is 'translated' by an amount of rows and columns specified by the two * parameters. Same as calling @@ -142,9 +154,8 @@ public TerminalPosition withRelative(TerminalPosition translate) { * @return New TerminalPosition that is the result of the original position with added translation */ public TerminalPosition withRelative(int deltaColumn, int deltaRow) { - return withRelativeRow(deltaRow).withRelativeColumn(deltaColumn); + return plus(deltaColumn, deltaRow); } - /** * Returns itself if it is equal to the supplied position, otherwise the supplied position. You can use this if you * have a position field which is frequently recalculated but often resolves to the same; it will keep the same @@ -153,60 +164,53 @@ public TerminalPosition withRelative(int deltaColumn, int deltaRow) { * @return Itself if this position equals the position passed in, otherwise the position passed in */ public TerminalPosition with(TerminalPosition position) { - if(equals(position)) { - return this; - } - return position; + return as(position); } - - public TerminalPosition plus(TerminalPosition position) { - return withRelative(position); + public TerminalPosition plus(TerminalPosition other) { + return plus(other.column, other.row); } - - public TerminalPosition minus(TerminalPosition position) { - return withRelative(-position.getColumn(), -position.getRow()); + public TerminalPosition minus(TerminalPosition other) { + return minus(other.column, other.row); } - - public TerminalPosition multiply(TerminalPosition position) { - return new TerminalPosition(column * position.column, row * position.row); + public TerminalPosition multiply(TerminalPosition other) { + return multiply(other.column, other.row); } - public TerminalPosition divide(TerminalPosition denominator) { - return new TerminalPosition(column / denominator.column, row / denominator.row); + return divide(denominator.column, denominator.row); + } + public TerminalPosition plus(int column, int row) { + return as(this.column + column, this.row + row); + } + public TerminalPosition minus(int column, int row) { + return as(this.column - column, this.row - row); + } + public TerminalPosition multiply(int column, int row) { + return as(this.column * column, this.row * row); + } + public TerminalPosition divide(int columnsDenominator, int rowsDenominator) { + return as(column / columnsDenominator, row / rowsDenominator); } + public TerminalPosition plus(int amount) { return plus(amount, amount); } + public TerminalPosition minus(int amount) { return minus(amount, amount); } + public TerminalPosition multiply(int amount) { return multiply(amount, amount); } + public TerminalPosition divide(int denominator) { return divide(denominator, denominator); } public TerminalPosition abs() { - int x = Math.abs(column); - int y = Math.abs(row); - return new TerminalPosition(x, y); + return as(Math.abs(column), Math.abs(row)); } public TerminalPosition min(TerminalPosition position) { - int x = Math.min(column, position.column); - int y = Math.min(row, position.row); - return new TerminalPosition(x, y); + return as(Math.min(column, position.column), Math.min(row, position.row)); } public TerminalPosition max(TerminalPosition position) { - int x = Math.max(column, position.column); - int y = Math.max(row, position.row); - return new TerminalPosition(x, y); + return as(Math.max(column, position.column), Math.max(row, position.row)); } @Override - public int compareTo(TerminalPosition o) { - if(row < o.row) { - return -1; - } - else if(row == o.row) { - if(column < o.column) { - return -1; - } - else if(column == o.column) { - return 0; - } - } - return 1; + public int compareTo(TerminalPosition other) { + int result = Integer.compare(row, other.row); + return result != 0 ? result : Integer.compare(column, other.column); } @Override @@ -223,19 +227,15 @@ public int hashCode() { } public boolean equals(int columnIndex, int rowIndex) { - return this.column == columnIndex && - this.row == rowIndex; + return column == columnIndex && row == rowIndex; } @Override public boolean equals(Object obj) { - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - final TerminalPosition other = (TerminalPosition) obj; - return this.row == other.row && this.column == other.column; + return obj != null + && obj.getClass() == getClass() + && ((TerminalPosition) obj).column == column + && ((TerminalPosition) obj).row == row + ; } } diff --git a/src/main/java/com/googlecode/lanterna/TerminalRectangle.java b/src/main/java/com/googlecode/lanterna/TerminalRectangle.java index 2dd12f609..78d576cad 100644 --- a/src/main/java/com/googlecode/lanterna/TerminalRectangle.java +++ b/src/main/java/com/googlecode/lanterna/TerminalRectangle.java @@ -47,7 +47,7 @@ public class TerminalRectangle { * @param height number of rows */ public TerminalRectangle(int x, int y, int width, int height) { - position = new TerminalPosition(x, y); + position = TerminalPosition.of(x, y); size = new TerminalSize(width, height); this.x = x; @@ -57,6 +57,17 @@ public TerminalRectangle(int x, int y, int width, int height) { this.xAndWidth = x + width; this.yAndHeight = y + height; } + public TerminalRectangle(TerminalPosition position, TerminalSize size) { + this.position = position; + this.size = size; + + this.x = position.getColumn(); + this.y = position.getRow(); + this.width = size.getColumns(); + this.height = size.getRows(); + this.xAndWidth = x + width; + this.yAndHeight = y + height; + } /** * @return Returns the width of this rect, in number of columns @@ -94,7 +105,10 @@ public boolean whenContains(TerminalPosition p, Runnable op) { return whenContains(p.getColumn(), p.getRow(), op); } public boolean whenContains(int x, int y, Runnable op) { - if (this.x <= x && x < this.xAndWidth && this.y <= y && y < this.yAndHeight) { + return whenContains(this.x, this.y, width, height, x, y, op); + } + public static final boolean whenContains(int rx, int ry, int rw, int rh, int x, int y, Runnable op) { + if (rx <= x && x < (rx + rw) && ry <= y && y < (ry + rh)) { op.run(); return true; } diff --git a/src/main/java/com/googlecode/lanterna/TerminalSize.java b/src/main/java/com/googlecode/lanterna/TerminalSize.java index 5b5b0afdb..1d905613c 100644 --- a/src/main/java/com/googlecode/lanterna/TerminalSize.java +++ b/src/main/java/com/googlecode/lanterna/TerminalSize.java @@ -28,8 +28,12 @@ public class TerminalSize { public static final TerminalSize ZERO = new TerminalSize(0, 0); public static final TerminalSize ONE = new TerminalSize(1, 1); - private final int columns; - private final int rows; + public final int columns; + public final int rows; + + public static final TerminalSize of(int columns, int rows) { + return new TerminalSize(columns, rows); + } /** * Creates a new terminal size representation with a given width (columns) and height (rows) @@ -165,6 +169,35 @@ public TerminalSize min(TerminalSize other) { .withRows(Math.min(rows, other.rows)); } + public TerminalSize plus(TerminalSize other) { + return plus(other.columns, other.rows); + } + public TerminalSize minus(TerminalSize other) { + return minus(other.columns, other.rows); + } + public TerminalSize multiply(TerminalSize other) { + return multiply(other.columns, other.rows); + } + public TerminalSize divide(TerminalSize denominator) { + return divide(denominator.columns, denominator.rows); + } + public TerminalSize plus(int columns, int rows) { + return of(this.columns + columns, this.rows + rows); + } + public TerminalSize minus(int columns, int rows) { + return of(this.columns - columns, this.rows - rows); + } + public TerminalSize multiply(int columns, int rows) { + return of(this.columns * columns, this.rows * rows); + } + public TerminalSize divide(int columnsDenominator, int rowsDenominator) { + return of(columns / columnsDenominator, rows / rowsDenominator); + } + public TerminalSize plus(int amount) { return plus(amount, amount); } + public TerminalSize minus(int amount) { return minus(amount, amount); } + public TerminalSize multiply(int amount) { return multiply(amount, amount); } + public TerminalSize divide(int denominator) { return divide(denominator, denominator); } + /** * Returns itself if it is equal to the supplied size, otherwise the supplied size. You can use this if you have a * size field which is frequently recalculated but often resolves to the same size; it will keep the same object @@ -179,6 +212,16 @@ public TerminalSize with(TerminalSize size) { return size; } + /** + * x dimension, when d is zero + * y dimension, when d is not zero + * + * @return either getColumns() for x dimension or getRows() for y dimension + */ + public int getDimension(int d) { + return d == 0 ? getColumns() : getRows(); + } + @Override public String toString() { return "{" + columns + "x" + rows + "}"; diff --git a/src/main/java/com/googlecode/lanterna/graphics/AbstractTextGraphics.java b/src/main/java/com/googlecode/lanterna/graphics/AbstractTextGraphics.java index ecf641192..ce38da024 100644 --- a/src/main/java/com/googlecode/lanterna/graphics/AbstractTextGraphics.java +++ b/src/main/java/com/googlecode/lanterna/graphics/AbstractTextGraphics.java @@ -120,7 +120,7 @@ public TextGraphics setTabBehaviour(TabBehaviour tabBehaviour) { @Override public TextGraphics fill(char c) { - fillRectangle(TerminalPosition.TOP_LEFT_CORNER, getSize(), c); + fillRectangle(TerminalPosition.OF_0x0, getSize(), c); return this; } @@ -158,7 +158,7 @@ public TextGraphics drawLine(int fromX, int fromY, int toX, int toY, char charac @Override public TextGraphics drawLine(int fromX, int fromY, int toX, int toY, TextCharacter character) { - return drawLine(new TerminalPosition(fromX, fromY), new TerminalPosition(toX, toY), character); + return drawLine(TerminalPosition.of(fromX, fromY), TerminalPosition.of(toX, toY), character); } @Override @@ -207,7 +207,7 @@ public TextGraphics fillRectangle(TerminalPosition topLeft, TerminalSize size, T @Override public TextGraphics drawImage(TerminalPosition topLeft, TextImage image) { - return drawImage(topLeft, image, TerminalPosition.TOP_LEFT_CORNER, image.getSize()); + return drawImage(topLeft, image, TerminalPosition.OF_0x0, image.getSize()); } @Override diff --git a/src/main/java/com/googlecode/lanterna/graphics/DefaultShapeRenderer.java b/src/main/java/com/googlecode/lanterna/graphics/DefaultShapeRenderer.java index 563d567ce..05f778e9f 100644 --- a/src/main/java/com/googlecode/lanterna/graphics/DefaultShapeRenderer.java +++ b/src/main/java/com/googlecode/lanterna/graphics/DefaultShapeRenderer.java @@ -162,20 +162,20 @@ public void fillTriangle(TerminalPosition p1, TerminalPosition p2, TerminalPosit startY = points[0].getRow(); if (dx1 > dx2) { for (; startY <= points[1].getRow(); startY++, startX += dx2, endX += dx1) { - drawLine(new TerminalPosition((int)startX, (int)startY), new TerminalPosition((int)endX, (int)startY), character); + drawLine(TerminalPosition.of((int)startX, (int)startY), TerminalPosition.of((int)endX, (int)startY), character); } endX = points[1].getColumn(); for (; startY <= points[2].getRow(); startY++, startX += dx2, endX += dx3) { - drawLine(new TerminalPosition((int)startX, (int)startY), new TerminalPosition((int)endX, (int)startY), character); + drawLine(TerminalPosition.of((int)startX, (int)startY), TerminalPosition.of((int)endX, (int)startY), character); } } else { for (; startY <= points[1].getRow(); startY++, startX += dx1, endX += dx2) { - drawLine(new TerminalPosition((int)startX, (int)startY), new TerminalPosition((int)endX, (int)startY), character); + drawLine(TerminalPosition.of((int)startX, (int)startY), TerminalPosition.of((int)endX, (int)startY), character); } startX = points[1].getColumn(); startY = points[1].getRow(); for (; startY <= points[2].getRow(); startY++, startX += dx3, endX += dx2) { - drawLine(new TerminalPosition((int)startX, (int)startY), new TerminalPosition((int)endX, (int)startY), character); + drawLine(TerminalPosition.of((int)startX, (int)startY), TerminalPosition.of((int)endX, (int)startY), character); } } } diff --git a/src/main/java/com/googlecode/lanterna/graphics/TextGraphics.java b/src/main/java/com/googlecode/lanterna/graphics/TextGraphics.java index 72d824e17..ad00560f6 100644 --- a/src/main/java/com/googlecode/lanterna/graphics/TextGraphics.java +++ b/src/main/java/com/googlecode/lanterna/graphics/TextGraphics.java @@ -54,7 +54,7 @@ public interface TextGraphics extends StyleSet { /** * Creates a new TextGraphics of the same type as this one, using the same underlying subsystem. Using this method, * you need to specify a section of the current TextGraphics valid area that this new TextGraphic shall be - * restricted to. If you call newTextGraphics(TerminalPosition.TOP_LEFT_CORNER, textGraphics.getSize()) + * restricted to. If you call newTextGraphics(TerminalPosition.of(0, 0), textGraphics.getSize()) * then the resulting object will be identical to this one, but having a separated state for colors, position and * modifiers. * @param topLeftCorner Position of this TextGraphics's writable area that is to become the top-left corner (0x0) of @@ -281,7 +281,7 @@ public interface TextGraphics extends StyleSet { /** * Takes a TextImage and draws it on the surface this TextGraphics is targeting, given the coordinates on the target * that is specifying where the top-left corner of the image should be drawn. This is equivalent of calling - * {@code drawImage(topLeft, image, TerminalPosition.TOP_LEFT_CORNER, image.getSize()}. + * {@code drawImage(topLeft, image, TerminalPosition.of(0, 0), image.getSize()}. * @param topLeft Position of the top-left corner of the image on the target * @param image Image to draw * @return Itself diff --git a/src/main/java/com/googlecode/lanterna/graphics/TextGraphicsWriter.java b/src/main/java/com/googlecode/lanterna/graphics/TextGraphicsWriter.java index d8885c61c..f84f2801f 100644 --- a/src/main/java/com/googlecode/lanterna/graphics/TextGraphicsWriter.java +++ b/src/main/java/com/googlecode/lanterna/graphics/TextGraphicsWriter.java @@ -24,7 +24,7 @@ public class TextGraphicsWriter implements StyleSet { public TextGraphicsWriter(TextGraphics backend) { this.backend = backend; setStyleFrom( backend ); - cursorPosition = new TerminalPosition(0, 0); + cursorPosition = TerminalPosition.OF_0x0; } public TextGraphicsWriter putString(String string) { diff --git a/src/main/java/com/googlecode/lanterna/gui2/AbstractBasePane.java b/src/main/java/com/googlecode/lanterna/gui2/AbstractBasePane.java index 6fdeebc92..32b3630e9 100644 --- a/src/main/java/com/googlecode/lanterna/gui2/AbstractBasePane.java +++ b/src/main/java/com/googlecode/lanterna/gui2/AbstractBasePane.java @@ -461,9 +461,9 @@ public TerminalSize getPreferredSize(Container component) { public void drawComponent(TextGUIGraphics graphics, Container component) { if (!(menuBar instanceof EmptyMenuBar)) { int menuBarHeight = menuBar.getPreferredSize().getRows(); - TextGUIGraphics menuGraphics = graphics.newTextGraphics(TerminalPosition.TOP_LEFT_CORNER, graphics.getSize().withRows(menuBarHeight)); + TextGUIGraphics menuGraphics = graphics.newTextGraphics(TerminalPosition.OF_0x0, graphics.getSize().withRows(menuBarHeight)); menuBar.draw(menuGraphics); - graphics = graphics.newTextGraphics(TerminalPosition.TOP_LEFT_CORNER.withRelativeRow(menuBarHeight), graphics.getSize().withRelativeRows(-menuBarHeight)); + graphics = graphics.newTextGraphics(TerminalPosition.of(0, menuBarHeight), graphics.getSize().withRelativeRows(-menuBarHeight)); } Component subComponent = getComponent(); diff --git a/src/main/java/com/googlecode/lanterna/gui2/AbstractBorder.java b/src/main/java/com/googlecode/lanterna/gui2/AbstractBorder.java index 781f6fee4..52c1c60e5 100644 --- a/src/main/java/com/googlecode/lanterna/gui2/AbstractBorder.java +++ b/src/main/java/com/googlecode/lanterna/gui2/AbstractBorder.java @@ -32,7 +32,7 @@ public abstract class AbstractBorder extends AbstractComposite implement public void setComponent(Component component) { super.setComponent(component); if(component != null) { - component.setPosition(TerminalPosition.TOP_LEFT_CORNER); + component.setPosition(TerminalPosition.OF_0x0); } } diff --git a/src/main/java/com/googlecode/lanterna/gui2/AbstractComponent.java b/src/main/java/com/googlecode/lanterna/gui2/AbstractComponent.java index 369c30459..c74f4c878 100644 --- a/src/main/java/com/googlecode/lanterna/gui2/AbstractComponent.java +++ b/src/main/java/com/googlecode/lanterna/gui2/AbstractComponent.java @@ -77,7 +77,7 @@ public abstract class AbstractComponent implements Componen */ public AbstractComponent() { size = TerminalSize.ZERO; - position = TerminalPosition.TOP_LEFT_CORNER; + position = TerminalPosition.OF_0x0; explicitPreferredSize = null; layoutData = null; visible = true; @@ -233,7 +233,7 @@ public TerminalPosition getPosition() { @Override public TerminalPosition getGlobalPosition() { - return toGlobal(TerminalPosition.TOP_LEFT_CORNER); + return toGlobal(TerminalPosition.OF_0x0); } @Override diff --git a/src/main/java/com/googlecode/lanterna/gui2/AbstractComposite.java b/src/main/java/com/googlecode/lanterna/gui2/AbstractComposite.java index debad26a6..940f33d83 100644 --- a/src/main/java/com/googlecode/lanterna/gui2/AbstractComposite.java +++ b/src/main/java/com/googlecode/lanterna/gui2/AbstractComposite.java @@ -60,9 +60,9 @@ public void setComponent(Component component) { if (getBasePane() != null) { MenuBar menuBar = getBasePane().getMenuBar(); if (menuBar == null || menuBar.isEmptyMenuBar()) { - component.setPosition(TerminalPosition.TOP_LEFT_CORNER); + component.setPosition(TerminalPosition.OF_0x0); } else { - component.setPosition(TerminalPosition.TOP_LEFT_CORNER.withRelativeRow(1)); + component.setPosition(TerminalPosition.OF_0x1); } } invalidate(); diff --git a/src/main/java/com/googlecode/lanterna/gui2/AbstractListBox.java b/src/main/java/com/googlecode/lanterna/gui2/AbstractListBox.java index 44c158b13..f8d08a95f 100644 --- a/src/main/java/com/googlecode/lanterna/gui2/AbstractListBox.java +++ b/src/main/java/com/googlecode/lanterna/gui2/AbstractListBox.java @@ -39,7 +39,7 @@ public abstract class AbstractListBox> extend private final List items; private int selectedIndex; private ListItemRenderer listItemRenderer; - protected TerminalPosition scrollOffset = new TerminalPosition(0, 0); + protected TerminalPosition scrollOffset = TerminalPosition.OF_0x0; /** * This constructor sets up the component so it has no preferred size but will ask to be as big as the list is. If @@ -403,7 +403,7 @@ public TerminalPosition getCursorLocation(T listBox) { if(columnAccordingToRenderer == -1) { return null; } - return new TerminalPosition(columnAccordingToRenderer, selectedIndex - scrollTopIndex); + return TerminalPosition.of(columnAccordingToRenderer, selectedIndex - scrollTopIndex); } @Override @@ -445,7 +445,7 @@ else if(selectedIndex >= componentHeight + scrollTopIndex) scrollTopIndex = items.size() - componentHeight; } - listBox.scrollOffset = new TerminalPosition(0, -scrollTopIndex); + listBox.scrollOffset = TerminalPosition.of(0, -scrollTopIndex); graphics.applyThemeStyle(themeDefinition.getNormal()); graphics.fill(' '); @@ -456,7 +456,7 @@ else if(selectedIndex >= componentHeight + scrollTopIndex) break; } listItemRenderer.drawItem( - graphics.newTextGraphics(new TerminalPosition(0, i - scrollTopIndex), itemSize), + graphics.newTextGraphics(TerminalPosition.of(0, i - scrollTopIndex), itemSize), listBox, i, items.get(i), @@ -471,7 +471,7 @@ else if(selectedIndex >= componentHeight + scrollTopIndex) verticalScrollBar.setScrollMaximum(items.size()); verticalScrollBar.setScrollPosition(scrollTopIndex); verticalScrollBar.draw(graphics.newTextGraphics( - new TerminalPosition(graphics.getSize().getColumns() - 1, 0), + TerminalPosition.of(graphics.getSize().getColumns() - 1, 0), new TerminalSize(1, graphics.getSize().getRows()))); } } diff --git a/src/main/java/com/googlecode/lanterna/gui2/AbstractWindow.java b/src/main/java/com/googlecode/lanterna/gui2/AbstractWindow.java index 3d7ac5fde..fb67650ab 100644 --- a/src/main/java/com/googlecode/lanterna/gui2/AbstractWindow.java +++ b/src/main/java/com/googlecode/lanterna/gui2/AbstractWindow.java @@ -60,7 +60,7 @@ public AbstractWindow(String title) { this.title = title; this.textGUI = null; this.visible = true; - this.contentOffset = TerminalPosition.TOP_LEFT_CORNER; + this.contentOffset = TerminalPosition.OF_0x0; this.lastKnownPosition = null; this.lastKnownSize = null; this.lastKnownDecoratedSize = null; diff --git a/src/main/java/com/googlecode/lanterna/gui2/BorderLayout.java b/src/main/java/com/googlecode/lanterna/gui2/BorderLayout.java index dc301af1b..29ef2ee20 100644 --- a/src/main/java/com/googlecode/lanterna/gui2/BorderLayout.java +++ b/src/main/java/com/googlecode/lanterna/gui2/BorderLayout.java @@ -115,7 +115,7 @@ public void doLayout(TerminalSize area, List components) { if(layout.containsKey(Location.TOP)) { Component topComponent = layout.get(Location.TOP); topComponentHeight = Math.min(topComponent.getPreferredSize().getRows(), availableVerticalSpace); - topComponent.setPosition(TerminalPosition.TOP_LEFT_CORNER); + topComponent.setPosition(TerminalPosition.OF_0x0); topComponent.setSize(new TerminalSize(availableHorizontalSpace, topComponentHeight)); availableVerticalSpace -= topComponentHeight; } @@ -124,7 +124,7 @@ public void doLayout(TerminalSize area, List components) { if(layout.containsKey(Location.BOTTOM)) { Component bottomComponent = layout.get(Location.BOTTOM); int bottomComponentHeight = Math.min(bottomComponent.getPreferredSize().getRows(), availableVerticalSpace); - bottomComponent.setPosition(new TerminalPosition(0, area.getRows() - bottomComponentHeight)); + bottomComponent.setPosition(TerminalPosition.of(0, area.getRows() - bottomComponentHeight)); bottomComponent.setSize(new TerminalSize(availableHorizontalSpace, bottomComponentHeight)); availableVerticalSpace -= bottomComponentHeight; } @@ -133,27 +133,27 @@ public void doLayout(TerminalSize area, List components) { if(layout.containsKey(Location.LEFT)) { Component leftComponent = layout.get(Location.LEFT); leftComponentWidth = Math.min(leftComponent.getPreferredSize().getColumns(), availableHorizontalSpace); - leftComponent.setPosition(new TerminalPosition(0, topComponentHeight)); + leftComponent.setPosition(TerminalPosition.of(0, topComponentHeight)); leftComponent.setSize(new TerminalSize(leftComponentWidth, availableVerticalSpace)); availableHorizontalSpace -= leftComponentWidth; } if(layout.containsKey(Location.RIGHT)) { Component rightComponent = layout.get(Location.RIGHT); int rightComponentWidth = Math.min(rightComponent.getPreferredSize().getColumns(), availableHorizontalSpace); - rightComponent.setPosition(new TerminalPosition(area.getColumns() - rightComponentWidth, topComponentHeight)); + rightComponent.setPosition(TerminalPosition.of(area.getColumns() - rightComponentWidth, topComponentHeight)); rightComponent.setSize(new TerminalSize(rightComponentWidth, availableVerticalSpace)); availableHorizontalSpace -= rightComponentWidth; } if(layout.containsKey(Location.CENTER)) { Component centerComponent = layout.get(Location.CENTER); - centerComponent.setPosition(new TerminalPosition(leftComponentWidth, topComponentHeight)); + centerComponent.setPosition(TerminalPosition.of(leftComponentWidth, topComponentHeight)); centerComponent.setSize(new TerminalSize(availableHorizontalSpace, availableVerticalSpace)); } //Set the remaining components to 0x0 for(Component component: components) { if(component.isVisible() && !layout.containsValue(component)) { - component.setPosition(TerminalPosition.TOP_LEFT_CORNER); + component.setPosition(TerminalPosition.OF_0x0); component.setSize(TerminalSize.ZERO); } } diff --git a/src/main/java/com/googlecode/lanterna/gui2/Borders.java b/src/main/java/com/googlecode/lanterna/gui2/Borders.java index 632ab2d6f..b8d298373 100644 --- a/src/main/java/com/googlecode/lanterna/gui2/Borders.java +++ b/src/main/java/com/googlecode/lanterna/gui2/Borders.java @@ -197,7 +197,7 @@ public TerminalSize getPreferredSize(Border component) { @Override public TerminalPosition getWrappedComponentTopLeftOffset() { - return TerminalPosition.OFFSET_1x1; + return TerminalPosition.OF_1x1; } @Override @@ -234,11 +234,11 @@ public void drawComponent(TextGUIGraphics graphics, Border component) { } graphics.setCharacter(0, drawableArea.getRows() - 1, bottomLeftCorner); if(drawableArea.getRows() > 2) { - graphics.drawLine(new TerminalPosition(0, drawableArea.getRows() - 2), new TerminalPosition(0, 1), verticalLine); + graphics.drawLine(TerminalPosition.of(0, drawableArea.getRows() - 2), TerminalPosition.OF_0x1, verticalLine); } graphics.setCharacter(0, 0, topLeftCorner); if(drawableArea.getColumns() > 2) { - graphics.drawLine(new TerminalPosition(1, 0), new TerminalPosition(drawableArea.getColumns() - 2, 0), horizontalLine); + graphics.drawLine(TerminalPosition.OF_1x0, TerminalPosition.of(drawableArea.getColumns() - 2, 0), horizontalLine); } if(borderStyle == BorderStyle.ReverseBevel) { @@ -249,14 +249,14 @@ public void drawComponent(TextGUIGraphics graphics, Border component) { } graphics.setCharacter(drawableArea.getColumns() - 1, 0, topRightCorner); if(drawableArea.getRows() > 2) { - graphics.drawLine(new TerminalPosition(drawableArea.getColumns() - 1, 1), - new TerminalPosition(drawableArea.getColumns() - 1, drawableArea.getRows() - 2), + graphics.drawLine(TerminalPosition.of(drawableArea.getColumns() - 1, 1), + TerminalPosition.of(drawableArea.getColumns() - 1, drawableArea.getRows() - 2), verticalLine); } graphics.setCharacter(drawableArea.getColumns() - 1, drawableArea.getRows() - 1, bottomRightCorner); if(drawableArea.getColumns() > 2) { - graphics.drawLine(new TerminalPosition(1, drawableArea.getRows() - 1), - new TerminalPosition(drawableArea.getColumns() - 2, drawableArea.getRows() - 1), + graphics.drawLine(TerminalPosition.of(1, drawableArea.getRows() - 1), + TerminalPosition.of(drawableArea.getColumns() - 2, drawableArea.getRows() - 1), horizontalLine); } diff --git a/src/main/java/com/googlecode/lanterna/gui2/Button.java b/src/main/java/com/googlecode/lanterna/gui2/Button.java index 001ae7961..501f0e514 100644 --- a/src/main/java/com/googlecode/lanterna/gui2/Button.java +++ b/src/main/java/com/googlecode/lanterna/gui2/Button.java @@ -160,7 +160,7 @@ public static class DefaultButtonRenderer implements ButtonRenderer { @Override public TerminalPosition getCursorLocation(Button button) { if(button.getThemeDefinition().isCursorVisible()) { - return new TerminalPosition(1 + getLabelShift(button, button.getSize()), 0); + return TerminalPosition.of(1 + getLabelShift(button, button.getSize()), 0); } else { return null; diff --git a/src/main/java/com/googlecode/lanterna/gui2/CheckBox.java b/src/main/java/com/googlecode/lanterna/gui2/CheckBox.java index a2b45354a..71f8e2567 100644 --- a/src/main/java/com/googlecode/lanterna/gui2/CheckBox.java +++ b/src/main/java/com/googlecode/lanterna/gui2/CheckBox.java @@ -175,7 +175,7 @@ public static abstract class CheckBoxRenderer implements InteractableRenderer comboBox) { if(comboBox.isDropDownFocused()) { if(comboBox.getThemeDefinition().isCursorVisible()) { - return new TerminalPosition(comboBox.getSize().getColumns() - 1, 0); + return TerminalPosition.of(comboBox.getSize().getColumns() - 1, 0); } else { return null; @@ -636,7 +636,7 @@ public TerminalPosition getCursorLocation(ComboBox comboBox) { else { int textInputPosition = comboBox.getTextInputPosition(); int textInputColumn = TerminalTextUtils.getColumnWidth(comboBox.getText().substring(0, textInputPosition)); - return new TerminalPosition(textInputColumn - textVisibleLeftPosition, 0); + return TerminalPosition.of(textInputColumn - textVisibleLeftPosition, 0); } } diff --git a/src/main/java/com/googlecode/lanterna/gui2/Component.java b/src/main/java/com/googlecode/lanterna/gui2/Component.java index 9234536e3..94a9bca2d 100644 --- a/src/main/java/com/googlecode/lanterna/gui2/Component.java +++ b/src/main/java/com/googlecode/lanterna/gui2/Component.java @@ -18,6 +18,7 @@ */ package com.googlecode.lanterna.gui2; +import com.googlecode.lanterna.TerminalRectangle; import com.googlecode.lanterna.TerminalPosition; import com.googlecode.lanterna.TerminalSize; import com.googlecode.lanterna.graphics.Theme; @@ -30,6 +31,14 @@ * @author Martin */ public interface Component extends TextGUIElement { + + /** + * + * @return the TerminalPosition and TerminalSize as a TerminalRectangle + */ + default TerminalRectangle getBounds() { + return new TerminalRectangle(getPosition(), getSize()); + } /** * Returns the top-left corner of this component, measured from its parent. * @return Position of this component @@ -38,7 +47,7 @@ public interface Component extends TextGUIElement { /** * Returns the top-left corner of this component in global coordinates space - * using {@link TerminalPosition#TOP_LEFT_CORNER} with + * using {@link TerminalPosition#OF_0x0} with * {@link #toGlobal(TerminalPosition)} * * @return global position of this component diff --git a/src/main/java/com/googlecode/lanterna/gui2/DefaultWindowDecorationRenderer.java b/src/main/java/com/googlecode/lanterna/gui2/DefaultWindowDecorationRenderer.java index d26988a03..816638738 100644 --- a/src/main/java/com/googlecode/lanterna/gui2/DefaultWindowDecorationRenderer.java +++ b/src/main/java/com/googlecode/lanterna/gui2/DefaultWindowDecorationRenderer.java @@ -69,8 +69,8 @@ public TextGUIGraphics draw(WindowBasedTextGUI textGUI, TextGUIGraphics graphics else { graphics.applyThemeStyle(themeDefinition.getPreLight()); } - graphics.drawLine(new TerminalPosition(0, drawableArea.getRows() - 2), new TerminalPosition(0, 1), verticalLine); - graphics.drawLine(new TerminalPosition(1, 0), new TerminalPosition(drawableArea.getColumns() - 2, 0), horizontalLine); + graphics.drawLine(TerminalPosition.of(0, drawableArea.getRows() - 2), TerminalPosition.OF_0x1, verticalLine); + graphics.drawLine(TerminalPosition.OF_1x0, TerminalPosition.of(drawableArea.getColumns() - 2, 0), horizontalLine); graphics.setCharacter(0, 0, topLeftCorner); graphics.setCharacter(0, drawableArea.getRows() - 1, bottomLeftCorner); @@ -87,12 +87,12 @@ public TextGUIGraphics draw(WindowBasedTextGUI textGUI, TextGUIGraphics graphics graphics.applyThemeStyle(themeDefinition.getNormal()); graphics.drawLine( - new TerminalPosition(drawableArea.getColumns() - 1, 1), - new TerminalPosition(drawableArea.getColumns() - 1, drawableArea.getRows() - 2), + TerminalPosition.of(drawableArea.getColumns() - 1, 1), + TerminalPosition.of(drawableArea.getColumns() - 1, drawableArea.getRows() - 2), verticalLine); graphics.drawLine( - new TerminalPosition(1, drawableArea.getRows() - 1), - new TerminalPosition(drawableArea.getColumns() - 2, drawableArea.getRows() - 1), + TerminalPosition.of(1, drawableArea.getRows() - 1), + TerminalPosition.of(drawableArea.getColumns() - 2, drawableArea.getRows() - 1), horizontalLine); graphics.setCharacter(drawableArea.getColumns() - 1, 0, topRightCorner); @@ -109,7 +109,7 @@ public TextGUIGraphics draw(WindowBasedTextGUI textGUI, TextGUIGraphics graphics } return graphics.newTextGraphics( - new TerminalPosition(1, 1), + TerminalPosition.OF_1x1, drawableArea // Make sure we don't make the new graphic's area smaller than 0 .withRelativeColumns(-(Math.min(2, drawableArea.getColumns()))) @@ -133,10 +133,8 @@ public TerminalSize getDecoratedSize(Window window, TerminalSize contentAreaSize .max(new TerminalSize(titleWidth + minPadding, 1)); //Make sure the title fits! } - private static final TerminalPosition OFFSET = new TerminalPosition(1, 1); - @Override public TerminalPosition getOffset(Window window) { - return OFFSET; + return TerminalPosition.OF_1x1; } } diff --git a/src/main/java/com/googlecode/lanterna/gui2/DefaultWindowManager.java b/src/main/java/com/googlecode/lanterna/gui2/DefaultWindowManager.java index a9dacd6f9..ee59c26c4 100644 --- a/src/main/java/com/googlecode/lanterna/gui2/DefaultWindowManager.java +++ b/src/main/java/com/googlecode/lanterna/gui2/DefaultWindowManager.java @@ -108,18 +108,18 @@ public void onAdded(WindowBasedTextGUI textGUI, Window window, List allW //Don't place the window, assume the position is already set } else if(allWindows.isEmpty()) { - window.setPosition(TerminalPosition.OFFSET_1x1); + window.setPosition(TerminalPosition.OF_1x1); } else if(window.getHints().contains(Window.Hint.CENTERED)) { int left = (lastKnownScreenSize.getColumns() - expectedDecoratedSize.getColumns()) / 2; int top = (lastKnownScreenSize.getRows() - expectedDecoratedSize.getRows()) / 2; - window.setPosition(new TerminalPosition(left, top)); + window.setPosition(TerminalPosition.of(left, top)); } else { TerminalPosition nextPosition = allWindows.get(allWindows.size() - 1).getPosition().withRelative(2, 1); if(nextPosition.getColumn() + expectedDecoratedSize.getColumns() > lastKnownScreenSize.getColumns() || nextPosition.getRow() + expectedDecoratedSize.getRows() > lastKnownScreenSize.getRows()) { - nextPosition = TerminalPosition.OFFSET_1x1; + nextPosition = TerminalPosition.of(1, 1); } window.setPosition(nextPosition); } @@ -164,11 +164,11 @@ protected void prepareWindow(TerminalSize screenSize, Window window) { TerminalPosition position = window.getPosition(); if(window.getHints().contains(Window.Hint.FULL_SCREEN)) { - position = TerminalPosition.TOP_LEFT_CORNER; + position = TerminalPosition.OF_0x0; size = screenSize; } else if(window.getHints().contains(Window.Hint.EXPANDED)) { - position = TerminalPosition.OFFSET_1x1; + position = TerminalPosition.OF_1x1; size = screenSize.withRelative( -Math.min(4, screenSize.getColumns()), -Math.min(3, screenSize.getRows())); @@ -195,7 +195,7 @@ else if(window.getHints().contains(Window.Hint.FIT_TERMINAL_WINDOW) || if(window.getHints().contains(Window.Hint.CENTERED)) { int left = (lastKnownScreenSize.getColumns() - size.getColumns()) / 2; int top = (lastKnownScreenSize.getRows() - size.getRows()) / 2; - position = new TerminalPosition(left, top); + position = TerminalPosition.of(left, top); } } diff --git a/src/main/java/com/googlecode/lanterna/gui2/EmptyWindowDecorationRenderer.java b/src/main/java/com/googlecode/lanterna/gui2/EmptyWindowDecorationRenderer.java index 0220ed6e1..7d0d2d53f 100644 --- a/src/main/java/com/googlecode/lanterna/gui2/EmptyWindowDecorationRenderer.java +++ b/src/main/java/com/googlecode/lanterna/gui2/EmptyWindowDecorationRenderer.java @@ -38,6 +38,6 @@ public TerminalSize getDecoratedSize(Window window, TerminalSize contentAreaSize @Override public TerminalPosition getOffset(Window window) { - return TerminalPosition.TOP_LEFT_CORNER; + return TerminalPosition.OF_0x0; } } diff --git a/src/main/java/com/googlecode/lanterna/gui2/FatWindowDecorationRenderer.java b/src/main/java/com/googlecode/lanterna/gui2/FatWindowDecorationRenderer.java index bc3c3e86c..aeec06116 100644 --- a/src/main/java/com/googlecode/lanterna/gui2/FatWindowDecorationRenderer.java +++ b/src/main/java/com/googlecode/lanterna/gui2/FatWindowDecorationRenderer.java @@ -119,8 +119,8 @@ public TerminalSize getDecoratedSize(Window window, TerminalSize contentAreaSize } } - private static final TerminalPosition OFFSET_WITH_TITLE = new TerminalPosition(1, 3); - private static final TerminalPosition OFFSET_WITHOUT_TITLE = new TerminalPosition(1, 1); + private static final TerminalPosition OFFSET_WITH_TITLE = TerminalPosition.of(1, 3); + private static final TerminalPosition OFFSET_WITHOUT_TITLE = TerminalPosition.of(1, 1); @Override public TerminalPosition getOffset(Window window) { diff --git a/src/main/java/com/googlecode/lanterna/gui2/GridLayout.java b/src/main/java/com/googlecode/lanterna/gui2/GridLayout.java index 4bc220f2e..725237b5c 100644 --- a/src/main/java/com/googlecode/lanterna/gui2/GridLayout.java +++ b/src/main/java/com/googlecode/lanterna/gui2/GridLayout.java @@ -458,7 +458,7 @@ public void doLayout(TerminalSize area, List components) { //Ok, all constraints are in place, we can start placing out components. To simplify, do it horizontally first //and vertically after - TerminalPosition tableCellTopLeft = TerminalPosition.TOP_LEFT_CORNER; + TerminalPosition tableCellTopLeft = TerminalPosition.OF_0x0; for(int y = 0; y < table.length; y++) { tableCellTopLeft = tableCellTopLeft.withColumn(0); for(int x = 0; x < table[y].length; x++) { diff --git a/src/main/java/com/googlecode/lanterna/gui2/ImageComponent.java b/src/main/java/com/googlecode/lanterna/gui2/ImageComponent.java index fc43dabcc..e48df73cc 100644 --- a/src/main/java/com/googlecode/lanterna/gui2/ImageComponent.java +++ b/src/main/java/com/googlecode/lanterna/gui2/ImageComponent.java @@ -44,7 +44,7 @@ public InteractableRenderer createDefaultRenderer() { return new InteractableRenderer() { @Override public void drawComponent(TextGUIGraphics graphics, ImageComponent panel) { - graphics.drawImage(TerminalPosition.TOP_LEFT_CORNER, textImage); + graphics.drawImage(TerminalPosition.OF_0x0, textImage); } @Override public TerminalSize getPreferredSize(ImageComponent panel) { diff --git a/src/main/java/com/googlecode/lanterna/gui2/InteractableLookupMap.java b/src/main/java/com/googlecode/lanterna/gui2/InteractableLookupMap.java index a67d6981e..d2df9da8d 100644 --- a/src/main/java/com/googlecode/lanterna/gui2/InteractableLookupMap.java +++ b/src/main/java/com/googlecode/lanterna/gui2/InteractableLookupMap.java @@ -57,7 +57,7 @@ TerminalSize getSize() { * @param interactable Interactable to add to the lookup map */ public synchronized void add(Interactable interactable) { - TerminalPosition topLeft = interactable.toBasePane(TerminalPosition.TOP_LEFT_CORNER); + TerminalPosition topLeft = interactable.toBasePane(TerminalPosition.OF_0x0); TerminalSize size = interactable.getSize(); interactables.add(interactable); int index = interactables.size() - 1; @@ -121,10 +121,10 @@ private Interactable findNextUpOrDown(Interactable interactable, boolean isDown) // If the currently active interactable component is not showing the cursor, use the top-left position // instead if we're going up, or the bottom-left position if we're going down if(isDown) { - startPosition = new TerminalPosition(0, interactable.getSize().getRows() - 1); + startPosition = TerminalPosition.of(0, interactable.getSize().getRows() - 1); } else { - startPosition = TerminalPosition.TOP_LEFT_CORNER; + startPosition = TerminalPosition.OF_0x0; } } else { @@ -144,9 +144,9 @@ private Interactable findNextUpOrDown(Interactable interactable, boolean isDown) } Set disqualified = getDisqualifiedInteractables(startPosition, true); TerminalSize size = getSize(); - int maxShiftLeft = interactable.toBasePane(TerminalPosition.TOP_LEFT_CORNER).getColumn(); + int maxShiftLeft = interactable.toBasePane(TerminalPosition.OF_0x0).getColumn(); maxShiftLeft = Math.max(maxShiftLeft, 0); - int maxShiftRight = interactable.toBasePane(new TerminalPosition(interactable.getSize().getColumns() - 1, 0)).getColumn(); + int maxShiftRight = interactable.toBasePane(TerminalPosition.of(interactable.getSize().getColumns() - 1, 0)).getColumn(); maxShiftRight = Math.min(maxShiftRight, size.getColumns() - 1); int maxShift = Math.max(startPosition.getColumn() - maxShiftLeft, maxShiftRight - startPosition.getRow()); for (int searchRow = startPosition.getRow() + directionTerm; @@ -201,10 +201,10 @@ private Interactable findNextLeftOrRight(Interactable interactable, boolean isRi // If the currently active interactable component is not showing the cursor, use the top-left position // instead if we're going left, or the top-right position if we're going right if(isRight) { - startPosition = new TerminalPosition(interactable.getSize().getColumns() - 1, 0); + startPosition = TerminalPosition.of(interactable.getSize().getColumns() - 1, 0); } else { - startPosition = TerminalPosition.TOP_LEFT_CORNER; + startPosition = TerminalPosition.OF_0x0; } } else { @@ -224,9 +224,9 @@ private Interactable findNextLeftOrRight(Interactable interactable, boolean isRi } Set disqualified = getDisqualifiedInteractables(startPosition, false); TerminalSize size = getSize(); - int maxShiftUp = interactable.toBasePane(TerminalPosition.TOP_LEFT_CORNER).getRow(); + int maxShiftUp = interactable.toBasePane(TerminalPosition.OF_0x0).getRow(); maxShiftUp = Math.max(maxShiftUp, 0); - int maxShiftDown = interactable.toBasePane(new TerminalPosition(0, interactable.getSize().getRows() - 1)).getRow(); + int maxShiftDown = interactable.toBasePane(TerminalPosition.of(0, interactable.getSize().getRows() - 1)).getRow(); maxShiftDown = Math.min(maxShiftDown, size.getRows() - 1); int maxShift = Math.max(startPosition.getRow() - maxShiftUp, maxShiftDown - startPosition.getRow()); for(int searchColumn = startPosition.getColumn() + directionTerm; diff --git a/src/main/java/com/googlecode/lanterna/gui2/LinearLayout.java b/src/main/java/com/googlecode/lanterna/gui2/LinearLayout.java index 4ae78f878..d865be856 100644 --- a/src/main/java/com/googlecode/lanterna/gui2/LinearLayout.java +++ b/src/main/java/com/googlecode/lanterna/gui2/LinearLayout.java @@ -229,7 +229,7 @@ private void doVerticalLayout(TerminalSize area, List components) { int availableHorizontalSpace = area.getColumns(); for(Component component: components) { if(remainingVerticalSpace <= 0) { - component.setPosition(TerminalPosition.TOP_LEFT_CORNER); + component.setPosition(TerminalPosition.OF_0x0); component.setSize(TerminalSize.ZERO); } else { @@ -381,7 +381,7 @@ private void doHorizontalLayout(TerminalSize area, List components) { int availableVerticalSpace = area.getRows(); for(Component component: components) { if(remainingHorizontalSpace <= 0) { - component.setPosition(TerminalPosition.TOP_LEFT_CORNER); + component.setPosition(TerminalPosition.OF_0x0); component.setSize(TerminalSize.ZERO); } else { diff --git a/src/main/java/com/googlecode/lanterna/gui2/MenuPopupWindow.java b/src/main/java/com/googlecode/lanterna/gui2/MenuPopupWindow.java index ef00dbb90..7e80651d3 100644 --- a/src/main/java/com/googlecode/lanterna/gui2/MenuPopupWindow.java +++ b/src/main/java/com/googlecode/lanterna/gui2/MenuPopupWindow.java @@ -38,7 +38,7 @@ public class MenuPopupWindow extends AbstractWindow { public MenuPopupWindow(Component parent) { setHints(Arrays.asList(Hint.MODAL, Hint.MENU_POPUP, Hint.FIXED_POSITION)); if (parent != null) { - TerminalPosition menuPositionGlobal = parent.toGlobal(TerminalPosition.TOP_LEFT_CORNER); + TerminalPosition menuPositionGlobal = parent.toGlobal(TerminalPosition.OF_0x0); setPosition(menuPositionGlobal.withRelative(0, 1)); } menuItemPanel = new Panel(new LinearLayout(Direction.VERTICAL)); diff --git a/src/main/java/com/googlecode/lanterna/gui2/MultiWindowTextGUI.java b/src/main/java/com/googlecode/lanterna/gui2/MultiWindowTextGUI.java index 4463d83f8..6c884987c 100644 --- a/src/main/java/com/googlecode/lanterna/gui2/MultiWindowTextGUI.java +++ b/src/main/java/com/googlecode/lanterna/gui2/MultiWindowTextGUI.java @@ -265,7 +265,7 @@ protected synchronized void drawGUI(TextGUIGraphics graphics) { } TextGUIGraphics windowGraphics = new DefaultTextGUIGraphics(this, textImage.newTextGraphics()); TextGUIGraphics insideWindowDecorationsGraphics = windowGraphics; - TerminalPosition contentOffset = TerminalPosition.TOP_LEFT_CORNER; + TerminalPosition contentOffset = TerminalPosition.OF_0x0; if (!window.getHints().contains(Window.Hint.NO_DECORATIONS)) { WindowDecorationRenderer decorationRenderer = windowManager.getWindowDecorationRenderer(window); insideWindowDecorationsGraphics = decorationRenderer.draw(this, windowGraphics, window); @@ -439,7 +439,7 @@ protected void ifMouseDragPossiblyMoveWindow(KeyStroke keyStroke) { int dx = mp.getColumn() - dragStart.getColumn(); int dy = mp.getRow() - dragStart.getRow(); changeWindowHintsForDragged(titleBarDragWindow); - titleBarDragWindow.setPosition(new TerminalPosition(wp.getColumn() + dx, wp.getRow() + dy)); + titleBarDragWindow.setPosition(TerminalPosition.of(wp.getColumn() + dx, wp.getRow() + dy)); // TODO ? any additional children popups (shown menus, etc) should also be moved (or just closed) } diff --git a/src/main/java/com/googlecode/lanterna/gui2/SplitPanel.java b/src/main/java/com/googlecode/lanterna/gui2/SplitPanel.java index d94c99868..69a772004 100644 --- a/src/main/java/com/googlecode/lanterna/gui2/SplitPanel.java +++ b/src/main/java/com/googlecode/lanterna/gui2/SplitPanel.java @@ -207,9 +207,9 @@ public void doLayout(TerminalSize area, List components) { thumb.setSize(thumb.getPreferredSize()); compB.setSize(new TerminalSize(rightWidth, rightHeight)); - compA.setPosition(new TerminalPosition(0, 0)); - thumb.setPosition(new TerminalPosition(leftWidth, h / 2 - tHeight / 2)); - compB.setPosition(new TerminalPosition(leftWidth + tWidth, 0)); + compA.setPosition(TerminalPosition.of(0, 0)); + thumb.setPosition(TerminalPosition.of(leftWidth, h / 2 - tHeight / 2)); + compB.setPosition(TerminalPosition.of(leftWidth + tWidth, 0)); } else { int leftWidth = Math.max(0, Math.min(compA.getPreferredSize().getColumns(), w)); int leftHeight = Math.max(0, (int) (h * ratio)); @@ -221,9 +221,9 @@ public void doLayout(TerminalSize area, List components) { thumb.setSize(thumb.getPreferredSize()); compB.setSize(new TerminalSize(rightWidth, rightHeight)); - compA.setPosition(new TerminalPosition(0, 0)); - thumb.setPosition(new TerminalPosition(w / 2 - tWidth / 2, leftHeight)); - compB.setPosition(new TerminalPosition(0, leftHeight + tHeight)); + compA.setPosition(TerminalPosition.of(0, 0)); + thumb.setPosition(TerminalPosition.of(w / 2 - tWidth / 2, leftHeight)); + compB.setPosition(TerminalPosition.of(0, leftHeight + tHeight)); } hasChanged = !compAPrevPos.equals(compA.getPosition()) || diff --git a/src/main/java/com/googlecode/lanterna/gui2/TextBox.java b/src/main/java/com/googlecode/lanterna/gui2/TextBox.java index 7dc325bf9..e6227581a 100644 --- a/src/main/java/com/googlecode/lanterna/gui2/TextBox.java +++ b/src/main/java/com/googlecode/lanterna/gui2/TextBox.java @@ -136,7 +136,7 @@ public TextBox(TerminalSize preferredSize, String initialContent, Style style) { this.caretWarp = false; this.verticalFocusSwitching = true; this.horizontalFocusSwitching = (style == Style.SINGLE_LINE); - this.caretPosition = TerminalPosition.TOP_LEFT_CORNER; + this.caretPosition = TerminalPosition.OF_0x0; this.maxLineLength = -1; this.longestRow = 1; //To fit the cursor this.mask = null; @@ -145,7 +145,7 @@ public TextBox(TerminalSize preferredSize, String initialContent, Style style) { setText(initialContent); // Re-adjust caret position - this.caretPosition = TerminalPosition.TOP_LEFT_CORNER.withColumn(getLine(0).length()); + this.caretPosition = TerminalPosition.of(getLine(0).length(), 0); if (preferredSize == null) { preferredSize = new TerminalSize(Math.max(10, longestRow), lines.size()); @@ -676,7 +676,7 @@ else if(verticalFocusSwitching) { int maxPositionAttempt = newActiveLine.length(); newCaretPositionColumn = Math.max(minPositionAttempt, Math.min(newCaretPositionColumn, maxPositionAttempt)); - caretPosition = caretPosition.with(new TerminalPosition(newCaretPositionColumn, newCaretPositionRow)); + caretPosition = caretPosition.with(TerminalPosition.of(newCaretPositionColumn, newCaretPositionRow)); } } result = Result.HANDLED; @@ -749,10 +749,10 @@ private Result handleKeyStrokeReadOnly(KeyStroke keyStroke) { getRenderer().setViewTopLeft(getRenderer().getViewTopLeft().withRelativeRow(1)); return Result.HANDLED; case HOME: - getRenderer().setViewTopLeft(TerminalPosition.TOP_LEFT_CORNER); + getRenderer().setViewTopLeft(TerminalPosition.OF_0x0); return Result.HANDLED; case END: - getRenderer().setViewTopLeft(TerminalPosition.TOP_LEFT_CORNER.withRow(getLineCount() - getSize().getRows())); + getRenderer().setViewTopLeft(TerminalPosition.of(0, getLineCount() - getSize().getRows())); return Result.HANDLED; case PAGE_DOWN: getRenderer().setViewTopLeft(getRenderer().getViewTopLeft().withRelativeRow(getSize().getRows())); @@ -797,7 +797,7 @@ public static class DefaultTextBoxRenderer implements TextBoxRenderer { * Default constructor */ public DefaultTextBoxRenderer() { - viewTopLeft = TerminalPosition.TOP_LEFT_CORNER; + viewTopLeft = TerminalPosition.OF_0x0; verticalScrollBar = new ScrollBar(Direction.VERTICAL); horizontalScrollBar = new ScrollBar(Direction.HORIZONTAL); hideScrollBars = false; @@ -887,7 +887,7 @@ public void drawComponent(TextGUIGraphics graphics, TextBox component) { } } - drawTextArea(graphics.newTextGraphics(TerminalPosition.TOP_LEFT_CORNER, realTextArea), component); + drawTextArea(graphics.newTextGraphics(TerminalPosition.OF_0x0, realTextArea), component); //Draw scrollbars, if any if(drawVerticalScrollBar) { @@ -896,7 +896,7 @@ public void drawComponent(TextGUIGraphics graphics, TextBox component) { verticalScrollBar.setScrollMaximum(textBoxLineCount); verticalScrollBar.setScrollPosition(viewTopLeft.getRow()); verticalScrollBar.draw(graphics.newTextGraphics( - new TerminalPosition(graphics.getSize().getColumns() - 1, 0), + TerminalPosition.of(graphics.getSize().getColumns() - 1, 0), new TerminalSize(1, graphics.getSize().getRows() - (drawHorizontalScrollBar ? 1 : 0)))); } if(drawHorizontalScrollBar) { @@ -905,7 +905,7 @@ public void drawComponent(TextGUIGraphics graphics, TextBox component) { horizontalScrollBar.setScrollMaximum(component.longestRow - 1); horizontalScrollBar.setScrollPosition(viewTopLeft.getColumn()); horizontalScrollBar.draw(graphics.newTextGraphics( - new TerminalPosition(0, graphics.getSize().getRows() - 1), + TerminalPosition.of(0, graphics.getSize().getRows() - 1), new TerminalSize(graphics.getSize().getColumns() - (drawVerticalScrollBar ? 1 : 0), 1))); } } diff --git a/src/main/java/com/googlecode/lanterna/gui2/table/DefaultTableRenderer.java b/src/main/java/com/googlecode/lanterna/gui2/table/DefaultTableRenderer.java index 1d607917b..cd9f9c4b0 100644 --- a/src/main/java/com/googlecode/lanterna/gui2/table/DefaultTableRenderer.java +++ b/src/main/java/com/googlecode/lanterna/gui2/table/DefaultTableRenderer.java @@ -449,7 +449,7 @@ public synchronized void drawComponent(TextGUIGraphics graphics, Table table) List columnSizes = fitColumnsInAvailableSpace(table, areaWithoutScrollBars, visibleColumns); drawHeader(graphics, table, columnSizes); drawRows(graphics.newTextGraphics( - new TerminalPosition(0, headerSizeIncludingBorder), + TerminalPosition.of(0, headerSizeIncludingBorder), // Can't use areaWithoutScrollBars here because we need to draw the scrollbar too! area.withRelativeRows(-headerSizeIncludingBorder)), table, @@ -542,7 +542,7 @@ private void drawHeader(TextGUIGraphics graphics, Table table, List for(int index = viewLeftColumn; index < endColumnIndex; index++) { String label = headers.get(index); TerminalSize size = new TerminalSize(columnSizes.get(index), headerSizeInRows); - tableHeaderRenderer.drawHeader(table, label, index, graphics.newTextGraphics(new TerminalPosition(leftPosition, 0), size)); + tableHeaderRenderer.drawHeader(table, label, index, graphics.newTextGraphics(TerminalPosition.of(leftPosition, 0), size)); leftPosition += size.getColumns(); if(headerHorizontalBorderStyle != TableCellBorderStyle.NONE && index < (endColumnIndex - 1)) { graphics.applyThemeStyle(theme.getDefinition(Table.class).getNormal()); @@ -602,7 +602,7 @@ private void drawRows( if(needHorizontalScrollBar) { scrollBarHeight--; } - verticalScrollBar.setPosition(new TerminalPosition(graphics.getSize().getColumns() - verticalScrollBarPreferredSize.getColumns(), 0)); + verticalScrollBar.setPosition(TerminalPosition.of(graphics.getSize().getColumns() - verticalScrollBarPreferredSize.getColumns(), 0)); verticalScrollBar.setSize(verticalScrollBarPreferredSize.withRows(scrollBarHeight)); verticalScrollBar.setScrollMaximum(rows.size()); verticalScrollBar.setViewSize(visibleRows); @@ -622,12 +622,12 @@ private void drawRows( verticalScrollBar.draw(graphics.newTextGraphics(verticalScrollBar.getPosition(), verticalScrollBar.getSize())); // Adjust graphics object to the remaining area when the vertical scrollbar is subtracted - graphics = graphics.newTextGraphics(TerminalPosition.TOP_LEFT_CORNER, graphics.getSize().withRelativeColumns(-verticalScrollBarPreferredSize.getColumns())); + graphics = graphics.newTextGraphics(TerminalPosition.OF_0x0, graphics.getSize().withRelativeColumns(-verticalScrollBarPreferredSize.getColumns())); } if(needHorizontalScrollBar) { TerminalSize horizontalScrollBarPreferredSize = horizontalScrollBar.getPreferredSize(); int scrollBarWidth = graphics.getSize().getColumns(); - horizontalScrollBar.setPosition(new TerminalPosition(0, graphics.getSize().getRows() - horizontalScrollBarPreferredSize.getRows())); + horizontalScrollBar.setPosition(TerminalPosition.of(0, graphics.getSize().getRows() - horizontalScrollBarPreferredSize.getRows())); horizontalScrollBar.setSize(horizontalScrollBarPreferredSize.withColumns(scrollBarWidth)); horizontalScrollBar.setScrollMaximum(tableModel.getColumnCount()); horizontalScrollBar.setViewSize(visibleColumns); @@ -647,7 +647,7 @@ private void drawRows( horizontalScrollBar.draw(graphics.newTextGraphics(horizontalScrollBar.getPosition(), horizontalScrollBar.getSize())); // Adjust graphics object to the remaining area when the horizontal scrollbar is subtracted - graphics = graphics.newTextGraphics(TerminalPosition.TOP_LEFT_CORNER, graphics.getSize().withRelativeRows(-horizontalScrollBarPreferredSize.getRows())); + graphics = graphics.newTextGraphics(TerminalPosition.OF_0x0, graphics.getSize().withRelativeRows(-horizontalScrollBarPreferredSize.getRows())); } int topPosition = 0; @@ -671,7 +671,7 @@ private void drawRows( leftPosition++; } V cell = row.get(columnIndex); - TerminalPosition cellPosition = new TerminalPosition(leftPosition, topPosition); + TerminalPosition cellPosition = TerminalPosition.of(leftPosition, topPosition); TerminalSize cellArea = new TerminalSize(columnSizes.get(columnIndex), preferredRowSizes.get(rowIndex)); tableCellRenderer.drawCell(table, cell, columnIndex, rowIndex, graphics.newTextGraphics(cellPosition, cellArea)); leftPosition += cellArea.getColumns(); diff --git a/src/main/java/com/googlecode/lanterna/input/MouseCharacterPattern.java b/src/main/java/com/googlecode/lanterna/input/MouseCharacterPattern.java index e1e854323..a52bf9774 100644 --- a/src/main/java/com/googlecode/lanterna/input/MouseCharacterPattern.java +++ b/src/main/java/com/googlecode/lanterna/input/MouseCharacterPattern.java @@ -112,7 +112,7 @@ public Matching match(List seq) { // xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - TerminalPosition pos = new TerminalPosition( seq.get(4) - 33, seq.get(5) - 33 ); + TerminalPosition pos = TerminalPosition.of( seq.get(4) - 33, seq.get(5) - 33 ); MouseAction ma = new MouseAction(actionType, button, pos ); return new Matching( ma ); // yep diff --git a/src/main/java/com/googlecode/lanterna/input/ScreenInfoCharacterPattern.java b/src/main/java/com/googlecode/lanterna/input/ScreenInfoCharacterPattern.java index 8c399b374..4f5f874e7 100644 --- a/src/main/java/com/googlecode/lanterna/input/ScreenInfoCharacterPattern.java +++ b/src/main/java/com/googlecode/lanterna/input/ScreenInfoCharacterPattern.java @@ -38,7 +38,7 @@ protected KeyStroke getKeyStrokeRaw(char first,int num1,int num2,char last,boole if (num1 == 1 && num2 <= 8) { return null; // nope: much more likely it's an F3 with modifiers } - TerminalPosition pos = new TerminalPosition(num2, num1); + TerminalPosition pos = TerminalPosition.of(num2, num1); return new ScreenInfoAction(pos); // yep } @@ -53,7 +53,7 @@ public static ScreenInfoAction tryToAdopt(KeyStroke ks) { int col = 1 + (ks.isAltDown() ? ALT : 0) + (ks.isCtrlDown() ? CTRL : 0) + (ks.isShiftDown()? SHIFT: 0); - TerminalPosition pos = new TerminalPosition(col,1); + TerminalPosition pos = TerminalPosition.of(col,1); return new ScreenInfoAction(pos); default: return null; } diff --git a/src/main/java/com/googlecode/lanterna/screen/AbstractScreen.java b/src/main/java/com/googlecode/lanterna/screen/AbstractScreen.java index b8b6f03e4..4f0d82461 100644 --- a/src/main/java/com/googlecode/lanterna/screen/AbstractScreen.java +++ b/src/main/java/com/googlecode/lanterna/screen/AbstractScreen.java @@ -65,7 +65,7 @@ public AbstractScreen(TerminalSize initialSize, TextCharacter defaultCharacter) this.frontBuffer = new ScreenBuffer(initialSize, defaultCharacter); this.backBuffer = new ScreenBuffer(initialSize, defaultCharacter); this.defaultCharacter = defaultCharacter; - this.cursorPosition = new TerminalPosition(0, 0); + this.cursorPosition = TerminalPosition.OF_0x0; this.tabBehaviour = TabBehaviour.ALIGN_TO_COLUMN_4; this.terminalSize = initialSize; this.latestResizeRequest = null; diff --git a/src/main/java/com/googlecode/lanterna/screen/Screen.java b/src/main/java/com/googlecode/lanterna/screen/Screen.java index c5a2ed5f1..ca62c2dce 100644 --- a/src/main/java/com/googlecode/lanterna/screen/Screen.java +++ b/src/main/java/com/googlecode/lanterna/screen/Screen.java @@ -80,7 +80,7 @@ public interface Screen extends InputProvider, Scrollable, Closeable { /** * Erases all the characters on the screen, effectively giving you a blank area. The default background color will * be used. This is effectively the same as calling - *
fill(TerminalPosition.TOP_LEFT_CORNER, getSize(), TextColor.ANSI.Default)
. + *
fill(TerminalPosition.of(0, 0), getSize(), TextColor.ANSI.Default)
. *

* Please note that calling this method will only affect the back buffer, you need to call refresh to make the * change visible. diff --git a/src/main/java/com/googlecode/lanterna/screen/TerminalScreen.java b/src/main/java/com/googlecode/lanterna/screen/TerminalScreen.java index fddb470e9..be4f025aa 100644 --- a/src/main/java/com/googlecode/lanterna/screen/TerminalScreen.java +++ b/src/main/java/com/googlecode/lanterna/screen/TerminalScreen.java @@ -198,13 +198,13 @@ private void refreshByDelta() throws IOException { TextCharacter backBufferCharacter = getBackBuffer().getCharacterAt(x, y); TextCharacter frontBufferCharacter = getFrontBuffer().getCharacterAt(x, y); if(!backBufferCharacter.equals(frontBufferCharacter)) { - updateMap.put(new TerminalPosition(x, y), backBufferCharacter); + updateMap.put(TerminalPosition.of(x, y), backBufferCharacter); } if(backBufferCharacter.isDoubleWidth()) { x++; //Skip the trailing padding } else if (frontBufferCharacter.isDoubleWidth()) { if (x+1 < terminalSize.getColumns()) { - updateMap.put(new TerminalPosition(x+1, y), frontBufferCharacter.withCharacter(' ')); + updateMap.put(TerminalPosition.of(x+1, y), frontBufferCharacter.withCharacter(' ')); } } } diff --git a/src/main/java/com/googlecode/lanterna/screen/VirtualScreen.java b/src/main/java/com/googlecode/lanterna/screen/VirtualScreen.java index 9be458cfe..8496f588b 100644 --- a/src/main/java/com/googlecode/lanterna/screen/VirtualScreen.java +++ b/src/main/java/com/googlecode/lanterna/screen/VirtualScreen.java @@ -56,7 +56,7 @@ public VirtualScreen(Screen screen) { this.frameRenderer = new DefaultFrameRenderer(); this.realScreen = screen; this.minimumSize = screen.getTerminalSize(); - this.viewportTopLeft = TerminalPosition.TOP_LEFT_CORNER; + this.viewportTopLeft = TerminalPosition.OF_0x0; this.viewportSize = minimumSize; this.scrollWithCTRL = false; } @@ -163,7 +163,7 @@ private TerminalSize calculateViewport(TerminalSize realTerminalSize) { TerminalSize newVirtualSize = minimumSize.max(realTerminalSize); if(newVirtualSize.equals(realTerminalSize)) { viewportSize = realTerminalSize; - viewportTopLeft = TerminalPosition.TOP_LEFT_CORNER; + viewportTopLeft = TerminalPosition.OF_0x0; } else { TerminalSize newViewportSize = frameRenderer.getViewportSize(realTerminalSize, newVirtualSize); @@ -324,7 +324,7 @@ public interface FrameRenderer { /** * Where in the virtual screen should the top-left position of the viewport be? To draw the viewport from the - * top-left position of the screen, return 0x0 (or TerminalPosition.TOP_LEFT_CORNER) here. + * top-left position of the screen, return 0x0 (or TerminalPosition.OF_0x0) here. * @return Position of the top-left corner of the viewport inside the screen */ TerminalPosition getViewportOffset(); @@ -357,7 +357,7 @@ public TerminalSize getViewportSize(TerminalSize realSize, TerminalSize virtualS @Override public TerminalPosition getViewportOffset() { - return TerminalPosition.TOP_LEFT_CORNER; + return TerminalPosition.OF_0x0; } @Override @@ -381,16 +381,16 @@ public void drawFrame( int scrollable = viewportSize.getColumns() - horizontalSize - 1; int horizontalPosition = (int)((double)scrollable * ((double)virtualScrollPosition.getColumn() / (double)(virtualSize.getColumns() - viewportSize.getColumns()))); graphics.drawLine( - new TerminalPosition(horizontalPosition, graphics.getSize().getRows() - 2), - new TerminalPosition(horizontalPosition + horizontalSize, graphics.getSize().getRows() - 2), + TerminalPosition.of(horizontalPosition, graphics.getSize().getRows() - 2), + TerminalPosition.of(horizontalPosition + horizontalSize, graphics.getSize().getRows() - 2), Symbols.BLOCK_MIDDLE); int verticalSize = (int)(((double)(viewportSize.getRows()) / (double)virtualSize.getRows()) * (viewportSize.getRows())); scrollable = viewportSize.getRows() - verticalSize - 1; int verticalPosition = (int)((double)scrollable * ((double)virtualScrollPosition.getRow() / (double)(virtualSize.getRows() - viewportSize.getRows()))); graphics.drawLine( - new TerminalPosition(graphics.getSize().getColumns() - 1, verticalPosition), - new TerminalPosition(graphics.getSize().getColumns() - 1, verticalPosition + verticalSize), + TerminalPosition.of(graphics.getSize().getColumns() - 1, verticalPosition), + TerminalPosition.of(graphics.getSize().getColumns() - 1, verticalPosition + verticalSize), Symbols.BLOCK_MIDDLE); } } diff --git a/src/main/java/com/googlecode/lanterna/terminal/TerminalTextGraphics.java b/src/main/java/com/googlecode/lanterna/terminal/TerminalTextGraphics.java index b60e06a4f..c16aad1fb 100644 --- a/src/main/java/com/googlecode/lanterna/terminal/TerminalTextGraphics.java +++ b/src/main/java/com/googlecode/lanterna/terminal/TerminalTextGraphics.java @@ -62,7 +62,7 @@ class TerminalTextGraphics extends AbstractTextGraphics { @Override public TextGraphics setCharacter(int columnIndex, int rowIndex, TextCharacter textCharacter) { - return setCharacter(new TerminalPosition(columnIndex, rowIndex), textCharacter); + return setCharacter(TerminalPosition.of(columnIndex, rowIndex), textCharacter); } @Override @@ -96,7 +96,7 @@ public synchronized TextGraphics setCharacter(TerminalPosition position, TextCha @Override public TextCharacter getCharacter(int column, int row) { - return getCharacter(new TerminalPosition(column, row)); + return getCharacter(TerminalPosition.of(column, row)); } @Override diff --git a/src/main/java/com/googlecode/lanterna/terminal/ansi/ANSITerminal.java b/src/main/java/com/googlecode/lanterna/terminal/ansi/ANSITerminal.java index 53ee508d8..88a4c2158 100644 --- a/src/main/java/com/googlecode/lanterna/terminal/ansi/ANSITerminal.java +++ b/src/main/java/com/googlecode/lanterna/terminal/ansi/ANSITerminal.java @@ -107,7 +107,7 @@ protected TerminalSize findTerminalSize() throws IOException { restoreCursorPosition(); TerminalPosition terminalPosition = waitForCursorPositionReport(); if (terminalPosition == null) { - terminalPosition = new TerminalPosition(80,24); + terminalPosition = TerminalPosition.of(80,24); } return new TerminalSize(terminalPosition.getColumn(), terminalPosition.getRow()); } @@ -270,7 +270,7 @@ public synchronized TerminalPosition getCursorPosition() throws IOException { // ANSI terminal positions are 1-indexed so top-left corner is 1x1 instead of 0x0, that's why we need to adjust it here TerminalPosition terminalPosition = waitForCursorPositionReport(); if (terminalPosition == null) { - terminalPosition = TerminalPosition.OFFSET_1x1; + terminalPosition = TerminalPosition.OF_1x1; } return terminalPosition.withRelative(-1, -1); } diff --git a/src/main/java/com/googlecode/lanterna/terminal/swing/GraphicalTerminalImplementation.java b/src/main/java/com/googlecode/lanterna/terminal/swing/GraphicalTerminalImplementation.java index 91394ca69..9bea3782c 100644 --- a/src/main/java/com/googlecode/lanterna/terminal/swing/GraphicalTerminalImplementation.java +++ b/src/main/java/com/googlecode/lanterna/terminal/swing/GraphicalTerminalImplementation.java @@ -690,7 +690,7 @@ private void clearBackBuffer() { @Override public synchronized void setCursorPosition(int x, int y) { - setCursorPosition(new TerminalPosition(x, y)); + setCursorPosition(TerminalPosition.of(x, y)); } @Override @@ -1083,4 +1083,4 @@ boolean isDirty(int row, int column) { } } } -} \ No newline at end of file +} diff --git a/src/main/java/com/googlecode/lanterna/terminal/virtual/DefaultVirtualTerminal.java b/src/main/java/com/googlecode/lanterna/terminal/virtual/DefaultVirtualTerminal.java index 55d826ff0..8c1e2c78f 100644 --- a/src/main/java/com/googlecode/lanterna/terminal/virtual/DefaultVirtualTerminal.java +++ b/src/main/java/com/googlecode/lanterna/terminal/virtual/DefaultVirtualTerminal.java @@ -82,8 +82,8 @@ public DefaultVirtualTerminal(TerminalSize initialTerminalSize) { this.wholeBufferDirty = false; this.terminalSize = initialTerminalSize; this.cursorVisible = true; - this.cursorPosition = TerminalPosition.TOP_LEFT_CORNER; - this.savedCursorPosition = TerminalPosition.TOP_LEFT_CORNER; + this.cursorPosition = TerminalPosition.OF_0x0; + this.savedCursorPosition = TerminalPosition.OF_0x0; this.backlogSize = 1000; } @@ -110,7 +110,7 @@ public synchronized void setTerminalSize(TerminalSize newSize) { public synchronized void enterPrivateMode() { currentTextBuffer = privateModeTextBuffer; savedCursorPosition = getCursorBufferPosition(); - setCursorPosition(TerminalPosition.TOP_LEFT_CORNER); + setCursorPosition(TerminalPosition.OF_0x0); setWholeBufferDirty(); } @@ -125,7 +125,7 @@ public synchronized void exitPrivateMode() { public synchronized void clearScreen() { currentTextBuffer.clear(); setWholeBufferDirty(); - setCursorPosition(TerminalPosition.TOP_LEFT_CORNER); + setCursorPosition(TerminalPosition.OF_0x0); } @Override @@ -368,12 +368,12 @@ synchronized void putCharacter(TextCharacter terminalCharacter) { // Update the buffer int i = currentTextBuffer.setCharacter(cursorPosition.getRow(), cursorPosition.getColumn(), terminalCharacter); if(!wholeBufferDirty) { - dirtyTerminalCells.add(new TerminalPosition(cursorPosition.getColumn(), cursorPosition.getRow())); + dirtyTerminalCells.add(TerminalPosition.of(cursorPosition.getColumn(), cursorPosition.getRow())); if(i == 1) { - dirtyTerminalCells.add(new TerminalPosition(cursorPosition.getColumn() + 1, cursorPosition.getRow())); + dirtyTerminalCells.add(TerminalPosition.of(cursorPosition.getColumn() + 1, cursorPosition.getRow())); } else if(i == 2) { - dirtyTerminalCells.add(new TerminalPosition(cursorPosition.getColumn() - 1, cursorPosition.getRow())); + dirtyTerminalCells.add(TerminalPosition.of(cursorPosition.getColumn() - 1, cursorPosition.getRow())); } if(dirtyTerminalCells.size() > (terminalSize.getColumns() * terminalSize.getRows() * 0.9)) { setWholeBufferDirty(); @@ -440,7 +440,7 @@ private void correctCursor() { this.cursorPosition = cursorPosition.withColumn(Math.min(cursorPosition.getColumn(), terminalSize.getColumns() - 1)); this.cursorPosition = cursorPosition.withRow(Math.min(cursorPosition.getRow(), Math.max(terminalSize.getRows(), getBufferLineCount()) - 1)); this.cursorPosition = - new TerminalPosition( + TerminalPosition.of( Math.max(cursorPosition.getColumn(), 0), Math.max(cursorPosition.getRow(), 0)); } diff --git a/src/main/java/com/googlecode/lanterna/terminal/virtual/VirtualTerminalTextGraphics.java b/src/main/java/com/googlecode/lanterna/terminal/virtual/VirtualTerminalTextGraphics.java index 7f35ada95..757b7cd47 100644 --- a/src/main/java/com/googlecode/lanterna/terminal/virtual/VirtualTerminalTextGraphics.java +++ b/src/main/java/com/googlecode/lanterna/terminal/virtual/VirtualTerminalTextGraphics.java @@ -18,6 +18,7 @@ */ package com.googlecode.lanterna.terminal.virtual; +import com.googlecode.lanterna.TerminalRectangle; import com.googlecode.lanterna.TerminalPosition; import com.googlecode.lanterna.TerminalSize; import com.googlecode.lanterna.TextCharacter; @@ -36,16 +37,14 @@ class VirtualTerminalTextGraphics extends AbstractTextGraphics { } @Override - public TextGraphics setCharacter(int columnIndex, int rowIndex, TextCharacter textCharacter) { + public TextGraphics setCharacter(int column, int row, TextCharacter textCharacter) { TerminalSize size = getSize(); - if(columnIndex < 0 || columnIndex >= size.getColumns() || - rowIndex < 0 || rowIndex >= size.getRows()) { - return this; - } - synchronized(virtualTerminal) { - virtualTerminal.setCursorPosition(new TerminalPosition(columnIndex, rowIndex)); - virtualTerminal.putCharacter(textCharacter); - } + TerminalRectangle.whenContains(0, 0, size.columns, size.rows, column, row, () -> { + synchronized (virtualTerminal) { + virtualTerminal.setCursorPosition(TerminalPosition.of(column, row)); + virtualTerminal.putCharacter(textCharacter); + } + }); return this; } @@ -56,7 +55,7 @@ public TextCharacter getCharacter(TerminalPosition position) { @Override public TextCharacter getCharacter(int column, int row) { - return getCharacter(new TerminalPosition(column, row)); + return getCharacter(TerminalPosition.of(column, row)); } @Override diff --git a/src/main/java/com/googlecode/lanterna/terminal/win32/WindowsTerminal.java b/src/main/java/com/googlecode/lanterna/terminal/win32/WindowsTerminal.java index c323f79d0..db563305d 100644 --- a/src/main/java/com/googlecode/lanterna/terminal/win32/WindowsTerminal.java +++ b/src/main/java/com/googlecode/lanterna/terminal/win32/WindowsTerminal.java @@ -130,7 +130,7 @@ public TerminalPosition getCursorPosition() { Wincon.INSTANCE.GetConsoleScreenBufferInfo(CONSOLE_OUTPUT.getHandle(), screenBufferInfo); int column = screenBufferInfo.dwCursorPosition.X - screenBufferInfo.srWindow.Left; int row = screenBufferInfo.dwCursorPosition.Y - screenBufferInfo.srWindow.Top; - return new TerminalPosition(column, row); + return TerminalPosition.of(column, row); } private int getConsoleInputMode() { diff --git a/src/test/java/com/googlecode/lanterna/TestTerminalPosition.java b/src/test/java/com/googlecode/lanterna/TestTerminalPosition.java new file mode 100644 index 000000000..0c4d453d8 --- /dev/null +++ b/src/test/java/com/googlecode/lanterna/TestTerminalPosition.java @@ -0,0 +1,92 @@ +/* + * This file is part of lanterna (https://github.com/mabe02/lanterna). + * + * lanterna is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Copyright (C) 2010-2020 Martin Berglund + */ +package com.googlecode.lanterna; + +import org.junit.Assert; +import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; + +/** + * @author ginkoblongata + */ +public class TestTerminalPosition { + + TerminalPosition tp(int x, int y) { + return TerminalPosition.of(x, y); + } + void assertSameSystemIdentityHashCode(Object a, Object b) { + assertEquals(System.identityHashCode(a), System.identityHashCode(b)); + } + void assertNotSameSystemIdentityHashCode(Object a, Object b) { + assertNotEquals(System.identityHashCode(a), System.identityHashCode(b)); + } + @Test + public void testSystemIdentityHashCodeSame() { + TerminalPosition a = TerminalPosition.of(23, 34); + assertSameSystemIdentityHashCode(a, a); + } + @Test + public void testSystemIdentityHashCodeDifferent() { + TerminalPosition a = TerminalPosition.of(23, 34); + TerminalPosition b = TerminalPosition.of(23, 34); + assertNotSameSystemIdentityHashCode(a, b); + } + @Test + public void testObjectChurnReduced_of() { + assertSameSystemIdentityHashCode(tp(0, 0), tp(0, 0)); + assertSameSystemIdentityHashCode(TerminalPosition.OF_0x0, tp(0, 0)); + assertSameSystemIdentityHashCode(TerminalPosition.OF_0x1, tp(0, 1)); + assertSameSystemIdentityHashCode(TerminalPosition.OF_1x0, tp(1, 0)); + assertSameSystemIdentityHashCode(TerminalPosition.OF_1x1, tp(1, 1)); + } + @Test + public void testObjectChurnReduced_as() { + TerminalPosition p = tp(35, 80); + assertSameSystemIdentityHashCode(p, p.as(35, 80)); + } + @Test + public void testObjectChurnReduced_plus() { + assertSameSystemIdentityHashCode(tp(0, 1), tp(0, 0).plus(0, 1)); + assertSameSystemIdentityHashCode(tp(1, 1), tp(0, 0).plus(0 , 1).plus(1, 0)); + assertSameSystemIdentityHashCode(tp(1, 1), tp(0, 0).plus(1 , 1)); + + TerminalPosition p = tp(35, 80); + assertSameSystemIdentityHashCode(p, p.plus(0, 0)); + } + @Test + public void testObjectChurnReduced_minus() { + assertSameSystemIdentityHashCode(tp(0, 0), tp(1, 1).minus(1, 1)); + assertSameSystemIdentityHashCode(tp(1, 1), tp(2, 2).minus(0, 1).minus(1, 0)); + + TerminalPosition p = tp(35, 80); + assertSameSystemIdentityHashCode(p, p.minus(0, 0)); + } + @Test + public void testObjectChurnReduced_divide() { + TerminalPosition p = tp(35, 80); + assertSameSystemIdentityHashCode(p, p.divide(1, 1)); + } + @Test + public void testObjectChurnReduced_multiply() { + TerminalPosition p = tp(35, 80); + assertSameSystemIdentityHashCode(p, p.multiply(1, 1)); + } + +} diff --git a/src/test/java/com/googlecode/lanterna/gui2/FullScreenTextGUITest.java b/src/test/java/com/googlecode/lanterna/gui2/FullScreenTextGUITest.java index 0b3c66a42..73a7c1bf3 100644 --- a/src/test/java/com/googlecode/lanterna/gui2/FullScreenTextGUITest.java +++ b/src/test/java/com/googlecode/lanterna/gui2/FullScreenTextGUITest.java @@ -90,36 +90,36 @@ private BIOS() { BIOSButton button14 = new BIOSButton("Exit Without Saving", "僕の事が思い出せなくても泣かないでね"); button1.setSize(new TerminalSize(35, 1)); - button1.setPosition(new TerminalPosition(3, 3)); + button1.setPosition(TerminalPosition.of(3, 3)); button2.setSize(new TerminalSize(35, 1)); - button2.setPosition(new TerminalPosition(3, 5)); + button2.setPosition(TerminalPosition.of(3, 5)); button3.setSize(new TerminalSize(35, 1)); - button3.setPosition(new TerminalPosition(3, 7)); + button3.setPosition(TerminalPosition.of(3, 7)); button4.setSize(new TerminalSize(35, 1)); - button4.setPosition(new TerminalPosition(3, 9)); + button4.setPosition(TerminalPosition.of(3, 9)); button5.setSize(new TerminalSize(35, 1)); - button5.setPosition(new TerminalPosition(3, 11)); + button5.setPosition(TerminalPosition.of(3, 11)); button6.setSize(new TerminalSize(35, 1)); - button6.setPosition(new TerminalPosition(3, 13)); + button6.setPosition(TerminalPosition.of(3, 13)); button7.setSize(new TerminalSize(35, 1)); - button7.setPosition(new TerminalPosition(3, 15)); + button7.setPosition(TerminalPosition.of(3, 15)); button8.setSize(new TerminalSize(35, 1)); - button8.setPosition(new TerminalPosition(43, 3)); + button8.setPosition(TerminalPosition.of(43, 3)); button9.setSize(new TerminalSize(35, 1)); - button9.setPosition(new TerminalPosition(43, 5)); + button9.setPosition(TerminalPosition.of(43, 5)); button10.setSize(new TerminalSize(35, 1)); - button10.setPosition(new TerminalPosition(43, 7)); + button10.setPosition(TerminalPosition.of(43, 7)); button11.setSize(new TerminalSize(35, 1)); - button11.setPosition(new TerminalPosition(43, 9)); + button11.setPosition(TerminalPosition.of(43, 9)); button12.setSize(new TerminalSize(35, 1)); - button12.setPosition(new TerminalPosition(43, 11)); + button12.setPosition(TerminalPosition.of(43, 11)); button13.setSize(new TerminalSize(35, 1)); - button13.setPosition(new TerminalPosition(43, 13)); + button13.setPosition(TerminalPosition.of(43, 13)); button14.setSize(new TerminalSize(35, 1)); - button14.setPosition(new TerminalPosition(43, 15)); + button14.setPosition(TerminalPosition.of(43, 15)); - helpLabel.setPosition(new TerminalPosition(2, 22)); + helpLabel.setPosition(TerminalPosition.of(2, 22)); helpLabel.setSize(new TerminalSize(76, 1)); addComponent(helpLabel); for(BIOSButton button: Arrays.asList(button1, button2, button3, button4, button5, button6, button7, button8, button9, button10, button11, button12, button13, button14)) { @@ -184,7 +184,7 @@ public void drawComponent(TextGUIGraphics graphics, Panel component) { graphics.setBackgroundColor(TextColor.ANSI.BLACK).fill(' '); //Draw the background image - graphics.drawImage(TerminalPosition.TOP_LEFT_CORNER, background); + graphics.drawImage(TerminalPosition.OF_0x0, background); //Then draw all the child components panelRenderer.drawComponent(graphics, BIOS.this); diff --git a/src/test/java/com/googlecode/lanterna/gui2/GUIOverTelnet.java b/src/test/java/com/googlecode/lanterna/gui2/GUIOverTelnet.java index ad177d76e..018608b85 100644 --- a/src/test/java/com/googlecode/lanterna/gui2/GUIOverTelnet.java +++ b/src/test/java/com/googlecode/lanterna/gui2/GUIOverTelnet.java @@ -112,7 +112,7 @@ public void drawComponent(TextGUIGraphics graphics, Component component) { @Override public TerminalPosition getCursorLocation(Component component) { - return TerminalPosition.TOP_LEFT_CORNER; + return TerminalPosition.OF_0x0; } }; } diff --git a/src/test/java/com/googlecode/lanterna/gui2/InputUITest.java b/src/test/java/com/googlecode/lanterna/gui2/InputUITest.java index 075cad147..6c37848e7 100644 --- a/src/test/java/com/googlecode/lanterna/gui2/InputUITest.java +++ b/src/test/java/com/googlecode/lanterna/gui2/InputUITest.java @@ -68,7 +68,7 @@ protected InteractableRenderer createDefaultRenderer() { @Override public TerminalPosition getCursorLocation(Component component) { TerminalSize adjustedSize = component.getSize().withRelative(-1, -1); - return new TerminalPosition(adjustedSize.getColumns(), adjustedSize.getRows()); + return TerminalPosition.of(adjustedSize.getColumns(), adjustedSize.getRows()); } @Override @@ -97,4 +97,4 @@ public void drawComponent(TextGUIGraphics graphics, Component component) { new Button("Close", window::close))); textGUI.addWindow(window); } -} \ No newline at end of file +} diff --git a/src/test/java/com/googlecode/lanterna/gui2/ThemeTest.java b/src/test/java/com/googlecode/lanterna/gui2/ThemeTest.java index ee6d175d9..e3b2de11a 100644 --- a/src/test/java/com/googlecode/lanterna/gui2/ThemeTest.java +++ b/src/test/java/com/googlecode/lanterna/gui2/ThemeTest.java @@ -276,12 +276,12 @@ private void runMultiThemeTest(final WindowBasedTextGUI textGUI) { final BasicWindow window1 = new BasicWindow("Theme: bigsnake"); window1.setHints(Collections.singletonList(Window.Hint.FIXED_POSITION)); window1.setTheme(LanternaThemes.getRegisteredTheme(themes.get(windowThemeIndex[0]))); - window1.setPosition(new TerminalPosition(2, 1)); + window1.setPosition(TerminalPosition.of(2, 1)); final BasicWindow window2 = new BasicWindow("Theme: conqueror"); window2.setHints(Collections.singletonList(Window.Hint.FIXED_POSITION)); window2.setTheme(LanternaThemes.getRegisteredTheme(themes.get(windowThemeIndex[1]))); - window2.setPosition(new TerminalPosition(30, 1)); + window2.setPosition(TerminalPosition.of(30, 1)); final Panel leftHolder = new Panel().setPreferredSize(new TerminalSize(15, 4)); final Panel rightHolder = new Panel().setPreferredSize(new TerminalSize(15, 4)); diff --git a/src/test/java/com/googlecode/lanterna/gui2/WindowManagerTest.java b/src/test/java/com/googlecode/lanterna/gui2/WindowManagerTest.java index 6c8aa52b4..c25d61d58 100644 --- a/src/test/java/com/googlecode/lanterna/gui2/WindowManagerTest.java +++ b/src/test/java/com/googlecode/lanterna/gui2/WindowManagerTest.java @@ -40,7 +40,7 @@ protected void prepareWindow(TerminalSize screenSize, Window window) { super.prepareWindow(screenSize, window); window.setDecoratedSize(window.getPreferredSize().withRelative(12, 10)); - window.setPosition(new TerminalPosition( + window.setPosition(TerminalPosition.of( screenSize.getColumns() - window.getDecoratedSize().getColumns() - 1, screenSize.getRows() - window.getDecoratedSize().getRows() - 1 )); diff --git a/src/test/java/com/googlecode/lanterna/issue/Issue452Test.java b/src/test/java/com/googlecode/lanterna/issue/Issue452Test.java index 8fdb7385f..d3848d353 100644 --- a/src/test/java/com/googlecode/lanterna/issue/Issue452Test.java +++ b/src/test/java/com/googlecode/lanterna/issue/Issue452Test.java @@ -55,7 +55,7 @@ public void before() { content = new Panel(new GridLayout(GRID_WIDTH)); GridLayout gridLayout = (GridLayout) content.getLayoutManager(); gridLayout.setVerticalSpacing(1); - window.setPosition(TerminalPosition.TOP_LEFT_CORNER); + window.setPosition(TerminalPosition.OF_0x0); window.setComponent(content); } @@ -269,7 +269,7 @@ private void assertTablePositionSelectedAndExecuted(Table table, int pos * Clicks at position */ private MouseAction clickAt(int column, int row) { - return new MouseAction(MouseActionType.CLICK_DOWN, 1, new TerminalPosition(column, row)); + return new MouseAction(MouseActionType.CLICK_DOWN, 1, TerminalPosition.of(column, row)); } /** @@ -312,4 +312,4 @@ public String getName() { } -} \ No newline at end of file +} diff --git a/src/test/java/com/googlecode/lanterna/screen/DrawImageTest.java b/src/test/java/com/googlecode/lanterna/screen/DrawImageTest.java index 429a9dc3d..efde34b2a 100644 --- a/src/test/java/com/googlecode/lanterna/screen/DrawImageTest.java +++ b/src/test/java/com/googlecode/lanterna/screen/DrawImageTest.java @@ -40,11 +40,11 @@ public static void main(String[] args) throws IOException { TextCharacter imageCharacter = new TextCharacter('X'); TextGraphics textGraphics = image.newTextGraphics(); textGraphics.drawRectangle( - TerminalPosition.TOP_LEFT_CORNER, + TerminalPosition.OF_0x0, new TerminalSize(5, 5), imageCharacter.withBackgroundColor(TextColor.ANSI.RED)); textGraphics.drawRectangle( - TerminalPosition.OFFSET_1x1, + TerminalPosition.OF_1x1, new TerminalSize(3, 3), imageCharacter.withBackgroundColor(TextColor.ANSI.MAGENTA)); textGraphics.setCharacter(2, 2, @@ -53,25 +53,25 @@ public static void main(String[] args) throws IOException { TextGraphics screenGraphics = screen.newTextGraphics(); screenGraphics.setBackgroundColor(TextColor.Indexed.fromRGB(50, 50, 50)); screenGraphics.fill(' '); - screenGraphics.drawImage(TerminalPosition.OFFSET_1x1, image); - screenGraphics.drawImage(new TerminalPosition(8, 1), image, TerminalPosition.TOP_LEFT_CORNER, image.getSize().withRelativeColumns(-4)); - screenGraphics.drawImage(new TerminalPosition(10, 1), image, TerminalPosition.TOP_LEFT_CORNER, image.getSize().withRelativeColumns(-3)); - screenGraphics.drawImage(new TerminalPosition(13, 1), image, TerminalPosition.TOP_LEFT_CORNER, image.getSize().withRelativeColumns(-2)); - screenGraphics.drawImage(new TerminalPosition(17, 1), image, TerminalPosition.TOP_LEFT_CORNER, image.getSize().withRelativeColumns(-1)); - screenGraphics.drawImage(new TerminalPosition(22, 1), image); - screenGraphics.drawImage(new TerminalPosition(28, 1), image, new TerminalPosition(1, 0), image.getSize()); - screenGraphics.drawImage(new TerminalPosition(33, 1), image, new TerminalPosition(2, 0), image.getSize()); - screenGraphics.drawImage(new TerminalPosition(37, 1), image, new TerminalPosition(3, 0), image.getSize()); - screenGraphics.drawImage(new TerminalPosition(40, 1), image, new TerminalPosition(4, 0), image.getSize()); + screenGraphics.drawImage(TerminalPosition.of(1, 1), image); + screenGraphics.drawImage(TerminalPosition.of(8, 1), image, TerminalPosition.of(0, 0), image.getSize().withRelativeColumns(-4)); + screenGraphics.drawImage(TerminalPosition.of(10, 1), image, TerminalPosition.of(0, 0), image.getSize().withRelativeColumns(-3)); + screenGraphics.drawImage(TerminalPosition.of(13, 1), image, TerminalPosition.of(0, 0), image.getSize().withRelativeColumns(-2)); + screenGraphics.drawImage(TerminalPosition.of(17, 1), image, TerminalPosition.of(0, 0), image.getSize().withRelativeColumns(-1)); + screenGraphics.drawImage(TerminalPosition.of(22, 1), image); + screenGraphics.drawImage(TerminalPosition.of(28, 1), image, TerminalPosition.of(1, 0), image.getSize()); + screenGraphics.drawImage(TerminalPosition.of(33, 1), image, TerminalPosition.of(2, 0), image.getSize()); + screenGraphics.drawImage(TerminalPosition.of(37, 1), image, TerminalPosition.of(3, 0), image.getSize()); + screenGraphics.drawImage(TerminalPosition.of(40, 1), image, TerminalPosition.of(4, 0), image.getSize()); //Try to draw bigger than the image size, this should ignore the extra size - screenGraphics.drawImage(new TerminalPosition(1, 7), image, TerminalPosition.TOP_LEFT_CORNER, image.getSize().withRelativeColumns(10)); + screenGraphics.drawImage(TerminalPosition.of(1, 7), image, TerminalPosition.of(0, 0), image.getSize().withRelativeColumns(10)); //0 size should draw nothing - screenGraphics.drawImage(new TerminalPosition(8, 7), image, TerminalPosition.TOP_LEFT_CORNER, TerminalSize.ZERO); + screenGraphics.drawImage(TerminalPosition.of(8, 7), image, TerminalPosition.of(0, 0), TerminalSize.ZERO); //Drawing with a negative source image offset will move the target position - screenGraphics.drawImage(new TerminalPosition(8, 7), image, new TerminalPosition(-2, -2), image.getSize()); + screenGraphics.drawImage(TerminalPosition.of(8, 7), image, TerminalPosition.of(-2, -2), image.getSize()); screen.refresh(); screen.readInput(); diff --git a/src/test/java/com/googlecode/lanterna/screen/ScreenLineTest.java b/src/test/java/com/googlecode/lanterna/screen/ScreenLineTest.java index ba50463c4..8d2b5462b 100644 --- a/src/test/java/com/googlecode/lanterna/screen/ScreenLineTest.java +++ b/src/test/java/com/googlecode/lanterna/screen/ScreenLineTest.java @@ -74,9 +74,9 @@ public static void main(String[] args) throws IOException, InterruptedException TerminalPosition p1; TerminalPosition p2; if(circle) { - p1 = new TerminalPosition(size.getColumns() / 2, size.getRows() / 2); + p1 = TerminalPosition.of(size.getColumns() / 2, size.getRows() / 2); if(CIRCLE_LAST_POSITION == null) { - CIRCLE_LAST_POSITION = new TerminalPosition(0, 0); + CIRCLE_LAST_POSITION = TerminalPosition.of(0, 0); } else if(CIRCLE_LAST_POSITION.getRow() == 0) { if(CIRCLE_LAST_POSITION.getColumn() < size.getColumns() - 1) { @@ -105,8 +105,8 @@ else if(CIRCLE_LAST_POSITION.getRow() < size.getRows() - 1) { p2 = CIRCLE_LAST_POSITION; } else { - p1 = new TerminalPosition(random.nextInt(size.getColumns()), random.nextInt(size.getRows())); - p2 = new TerminalPosition(random.nextInt(size.getColumns()), random.nextInt(size.getRows())); + p1 = TerminalPosition.of(random.nextInt(size.getColumns()), random.nextInt(size.getRows())); + p2 = TerminalPosition.of(random.nextInt(size.getColumns()), random.nextInt(size.getRows())); } textGraphics.setBackgroundColor(color); textGraphics.drawLine(p1, p2, ' '); diff --git a/src/test/java/com/googlecode/lanterna/screen/ScreenRectangleTest.java b/src/test/java/com/googlecode/lanterna/screen/ScreenRectangleTest.java index 61689d5bf..c8a582c54 100644 --- a/src/test/java/com/googlecode/lanterna/screen/ScreenRectangleTest.java +++ b/src/test/java/com/googlecode/lanterna/screen/ScreenRectangleTest.java @@ -72,7 +72,7 @@ public static void main(String[] args) throws IOException, InterruptedException color = new TextColor.Indexed(random.nextInt(256)); } - TerminalPosition topLeft = new TerminalPosition(random.nextInt(size.getColumns()), random.nextInt(size.getRows())); + TerminalPosition topLeft = TerminalPosition.of(random.nextInt(size.getColumns()), random.nextInt(size.getRows())); TerminalSize rectangleSize = new TerminalSize(random.nextInt(size.getColumns() - topLeft.getColumn()), random.nextInt(size.getRows() - topLeft.getRow())); textGraphics.setBackgroundColor(color); diff --git a/src/test/java/com/googlecode/lanterna/screen/ScreenResizeTest.java b/src/test/java/com/googlecode/lanterna/screen/ScreenResizeTest.java index b38b3c7ca..940aed999 100644 --- a/src/test/java/com/googlecode/lanterna/screen/ScreenResizeTest.java +++ b/src/test/java/com/googlecode/lanterna/screen/ScreenResizeTest.java @@ -40,7 +40,7 @@ public static void main(String[] args) throws InterruptedException, IOException public ScreenResizeTest(String[] args) throws InterruptedException, IOException { screen = new TestTerminalFactory(args).createScreen(); screen.startScreen(); - screen.setCursorPosition(new TerminalPosition(0, 0)); + screen.setCursorPosition(TerminalPosition.of(0, 0)); putStrings("Initial setup, please resize the window"); long now = System.currentTimeMillis(); diff --git a/src/test/java/com/googlecode/lanterna/screen/ScreenTabTest.java b/src/test/java/com/googlecode/lanterna/screen/ScreenTabTest.java index 8bf3402d3..899f9a3f3 100644 --- a/src/test/java/com/googlecode/lanterna/screen/ScreenTabTest.java +++ b/src/test/java/com/googlecode/lanterna/screen/ScreenTabTest.java @@ -38,7 +38,7 @@ public static void main(String[] args) throws InterruptedException, IOException public ScreenTabTest(String[] args) throws InterruptedException, IOException { screen = new TestTerminalFactory(args).createScreen(); screen.startScreen(); - screen.setCursorPosition(new TerminalPosition(0, 0)); + screen.setCursorPosition(TerminalPosition.of(0, 0)); putStrings("Trying out some tabs!"); long now = System.currentTimeMillis(); @@ -80,16 +80,16 @@ private void putStrings(String topTitle) throws IOException { screen.refresh(); //Verify - if(!screen.getBackCharacter(new TerminalPosition(20, 11)).is(' ')) { + if(!screen.getBackCharacter(TerminalPosition.of(20, 11)).is(' ')) { throw new IllegalStateException("Expected tab to be replaced with space"); } - if(!screen.getBackCharacter(new TerminalPosition(21, 11)).is('X')) { + if(!screen.getBackCharacter(TerminalPosition.of(21, 11)).is('X')) { throw new IllegalStateException("Expected X in back buffer"); } - if(!screen.getFrontCharacter(new TerminalPosition(20, 11)).is(' ')) { + if(!screen.getFrontCharacter(TerminalPosition.of(20, 11)).is(' ')) { throw new IllegalStateException("Expected tab to be replaced with space"); } - if(!screen.getFrontCharacter(new TerminalPosition(21, 11)).is('X')) { + if(!screen.getFrontCharacter(TerminalPosition.of(21, 11)).is('X')) { throw new IllegalStateException("Expected X in front buffer"); } } diff --git a/src/test/java/com/googlecode/lanterna/screen/ScreenTriangleTest.java b/src/test/java/com/googlecode/lanterna/screen/ScreenTriangleTest.java index 211523d8d..da18ad808 100644 --- a/src/test/java/com/googlecode/lanterna/screen/ScreenTriangleTest.java +++ b/src/test/java/com/googlecode/lanterna/screen/ScreenTriangleTest.java @@ -104,15 +104,15 @@ public static void main(String[] args) throws IOException, InterruptedException int y1 = (size.getRows() / 2) + (int) (Math.sin(rad + oneThirdOf2PI) * triangleSize); int x2 = (size.getColumns() / 2) + (int) (Math.cos(rad + twoThirdsOf2PI) * triangleSize); int y2 = (size.getRows() / 2) + (int) (Math.sin(rad + twoThirdsOf2PI) * triangleSize); - p1 = new TerminalPosition(x0, y0); - p2 = new TerminalPosition(x1, y1); - p3 = new TerminalPosition(x2, y2); + p1 = TerminalPosition.of(x0, y0); + p2 = TerminalPosition.of(x1, y1); + p3 = TerminalPosition.of(x2, y2); rad += Math.PI / 90.0; } else { - p1 = new TerminalPosition(random.nextInt(size.getColumns()), random.nextInt(size.getRows())); - p2 = new TerminalPosition(random.nextInt(size.getColumns()), random.nextInt(size.getRows())); - p3 = new TerminalPosition(random.nextInt(size.getColumns()), random.nextInt(size.getRows())); + p1 = TerminalPosition.of(random.nextInt(size.getColumns()), random.nextInt(size.getRows())); + p2 = TerminalPosition.of(random.nextInt(size.getColumns()), random.nextInt(size.getRows())); + p3 = TerminalPosition.of(random.nextInt(size.getColumns()), random.nextInt(size.getRows())); } graphics.setBackgroundColor(color); diff --git a/src/test/java/com/googlecode/lanterna/screen/VirtualScreenTest.java b/src/test/java/com/googlecode/lanterna/screen/VirtualScreenTest.java index c64b4f3ca..7085cbafb 100644 --- a/src/test/java/com/googlecode/lanterna/screen/VirtualScreenTest.java +++ b/src/test/java/com/googlecode/lanterna/screen/VirtualScreenTest.java @@ -44,9 +44,9 @@ public VirtualScreenTest(String[] args) throws InterruptedException, IOException TextGraphics textGraphics = screen.newTextGraphics(); textGraphics.setBackgroundColor(TextColor.ANSI.GREEN); - textGraphics.fillTriangle(new TerminalPosition(40, 0), new TerminalPosition(25,19), new TerminalPosition(65, 19), ' '); + textGraphics.fillTriangle(TerminalPosition.of(40, 0), TerminalPosition.of(25,19), TerminalPosition.of(65, 19), ' '); textGraphics.setBackgroundColor(TextColor.ANSI.RED); - textGraphics.drawRectangle(TerminalPosition.TOP_LEFT_CORNER, screen.getTerminalSize(), ' '); + textGraphics.drawRectangle(TerminalPosition.OF_0x0, screen.getTerminalSize(), ' '); screen.refresh(); while(true) { diff --git a/src/test/java/com/googlecode/lanterna/terminal/KeyTest.java b/src/test/java/com/googlecode/lanterna/terminal/KeyTest.java index 5150cd175..9b05236f4 100644 --- a/src/test/java/com/googlecode/lanterna/terminal/KeyTest.java +++ b/src/test/java/com/googlecode/lanterna/terminal/KeyTest.java @@ -32,28 +32,28 @@ public void testFromVim() { { KeyStroke k = KeyStroke.fromString("a"); assertEquals(KeyType.CHARACTER, k.getKeyType()); - assertEquals(new Character('a'), k.getCharacter()); + assertEquals(Character.valueOf('a'), k.getCharacter()); assertFalse(k.isCtrlDown()); assertFalse(k.isAltDown()); } { KeyStroke k = KeyStroke.fromString(""); assertEquals(KeyType.CHARACTER, k.getKeyType()); - assertEquals(new Character('a'), k.getCharacter()); + assertEquals(Character.valueOf('a'), k.getCharacter()); assertTrue(k.isCtrlDown()); assertFalse(k.isAltDown()); } { KeyStroke k = KeyStroke.fromString(""); assertEquals(KeyType.CHARACTER, k.getKeyType()); - assertEquals(new Character('a'), k.getCharacter()); + assertEquals(Character.valueOf('a'), k.getCharacter()); assertFalse(k.isCtrlDown()); assertTrue(k.isAltDown()); } { KeyStroke k = KeyStroke.fromString(""); assertEquals(k.getKeyType(), KeyType.CHARACTER); - assertEquals(new Character('a'), k.getCharacter()); + assertEquals(Character.valueOf('a'), k.getCharacter()); assertTrue(k.isCtrlDown()); assertTrue(k.isAltDown()); } diff --git a/src/test/java/com/googlecode/lanterna/terminal/SimpleTerminalTest.java b/src/test/java/com/googlecode/lanterna/terminal/SimpleTerminalTest.java index 84c041285..30f9b69e3 100644 --- a/src/test/java/com/googlecode/lanterna/terminal/SimpleTerminalTest.java +++ b/src/test/java/com/googlecode/lanterna/terminal/SimpleTerminalTest.java @@ -159,7 +159,7 @@ public static void main(String[] args) throws IOException { } private static TerminalPosition resetCursorPositionAfterHelp(Terminal terminal) throws IOException { - TerminalPosition cursorPosition = new TerminalPosition(0, 10); + TerminalPosition cursorPosition = TerminalPosition.of(0, 10); terminal.setCursorPosition(cursorPosition.getColumn(), cursorPosition.getRow()); return cursorPosition; } diff --git a/src/test/java/com/googlecode/lanterna/terminal/TerminalTextGraphicsTest.java b/src/test/java/com/googlecode/lanterna/terminal/TerminalTextGraphicsTest.java index 3aa90956a..16c296244 100644 --- a/src/test/java/com/googlecode/lanterna/terminal/TerminalTextGraphicsTest.java +++ b/src/test/java/com/googlecode/lanterna/terminal/TerminalTextGraphicsTest.java @@ -40,7 +40,7 @@ public static void main(String[] args) throws IOException, InterruptedException textGraphics.setForegroundColor(TextColor.ANSI.BLUE); textGraphics.putString(3, 3, "Hello World!"); textGraphics.setForegroundColor(TextColor.ANSI.CYAN); - TerminalPosition lineStart = new TerminalPosition(3 + "Hello World!".length(), 3); + TerminalPosition lineStart = TerminalPosition.of(3 + "Hello World!".length(), 3); textGraphics.drawLine(lineStart, lineStart.withRelativeColumn(2).withRelativeRow(6), Symbols.BLOCK_SOLID); textGraphics.setForegroundColor(TextColor.ANSI.RED); textGraphics.drawRectangle(lineStart.withRelativeColumn(2).withRelativeRow(6), new TerminalSize(5, 3), Symbols.BULLET); @@ -52,9 +52,9 @@ public static void main(String[] args) throws IOException, InterruptedException triangleStart.withColumn(5).withRelativeRow(3), Symbols.SPADES); textGraphics.setForegroundColor(TextColor.ANSI.YELLOW); - textGraphics.fillRectangle(new TerminalPosition(30, 1), new TerminalSize(8, 5), Symbols.DIAMOND); + textGraphics.fillRectangle(TerminalPosition.of(30, 1), new TerminalSize(8, 5), Symbols.DIAMOND); textGraphics.setForegroundColor(TextColor.ANSI.GREEN); - triangleStart = new TerminalPosition(30, 6); + triangleStart = TerminalPosition.of(30, 6); textGraphics.fillTriangle( triangleStart, triangleStart.withRelativeRow(5).withRelativeColumn(-2), diff --git a/src/test/java/com/googlecode/lanterna/terminal/virtual/DefaultVirtualTerminalTest.java b/src/test/java/com/googlecode/lanterna/terminal/virtual/DefaultVirtualTerminalTest.java index 5c175a052..f77eb3bab 100644 --- a/src/test/java/com/googlecode/lanterna/terminal/virtual/DefaultVirtualTerminalTest.java +++ b/src/test/java/com/googlecode/lanterna/terminal/virtual/DefaultVirtualTerminalTest.java @@ -40,7 +40,7 @@ public DefaultVirtualTerminalTest() { @Test public void initialTerminalStateIsAsExpected() { - assertEquals(TerminalPosition.TOP_LEFT_CORNER, virtualTerminal.getCursorPosition()); + assertEquals(TerminalPosition.OF_0x0, virtualTerminal.getCursorPosition()); TerminalSize terminalSize = virtualTerminal.getTerminalSize(); assertEquals(new TerminalSize(80, 24), terminalSize); @@ -59,7 +59,7 @@ public void simpleTestOutputTest() { } assertLineEquals(testString, 0); assertLineEquals("", 1); - assertEquals(new TerminalPosition(testString.length(), 0), virtualTerminal.getCursorPosition()); + assertEquals(TerminalPosition.of(testString.length(), 0), virtualTerminal.getCursorPosition()); } @Test @@ -79,31 +79,31 @@ public void multiLineTextTest() { for(int i = 0; i < toPrint.length; i++) { assertLineEquals(toPrint[i], i); } - assertEquals(new TerminalPosition(0, toPrint.length), virtualTerminal.getCursorPosition()); + assertEquals(TerminalPosition.of(0, toPrint.length), virtualTerminal.getCursorPosition()); } @Test public void singleLineWriteAndReadBackWorks() { - assertEquals(TerminalPosition.TOP_LEFT_CORNER, virtualTerminal.getCursorPosition()); + assertEquals(TerminalPosition.OF_0x0, virtualTerminal.getCursorPosition()); virtualTerminal.putCharacter(new TextCharacter('H')); virtualTerminal.putCharacter(new TextCharacter('E')); virtualTerminal.putCharacter(new TextCharacter('L')); virtualTerminal.putCharacter(new TextCharacter('L')); virtualTerminal.putCharacter(new TextCharacter('O')); - assertEquals(TerminalPosition.TOP_LEFT_CORNER.withColumn(5), virtualTerminal.getCursorPosition()); - assertEquals('H', virtualTerminal.getCharacter(new TerminalPosition(0, 0)).getCharacterString().charAt(0)); - assertEquals('E', virtualTerminal.getCharacter(new TerminalPosition(1, 0)).getCharacterString().charAt(0)); - assertEquals('L', virtualTerminal.getCharacter(new TerminalPosition(2, 0)).getCharacterString().charAt(0)); - assertEquals('L', virtualTerminal.getCharacter(new TerminalPosition(3, 0)).getCharacterString().charAt(0)); - assertEquals('O', virtualTerminal.getCharacter(new TerminalPosition(4, 0)).getCharacterString().charAt(0)); + assertEquals(TerminalPosition.OF_0x0.withColumn(5), virtualTerminal.getCursorPosition()); + assertEquals('H', virtualTerminal.getCharacter(TerminalPosition.of(0, 0)).getCharacterString().charAt(0)); + assertEquals('E', virtualTerminal.getCharacter(TerminalPosition.of(1, 0)).getCharacterString().charAt(0)); + assertEquals('L', virtualTerminal.getCharacter(TerminalPosition.of(2, 0)).getCharacterString().charAt(0)); + assertEquals('L', virtualTerminal.getCharacter(TerminalPosition.of(3, 0)).getCharacterString().charAt(0)); + assertEquals('O', virtualTerminal.getCharacter(TerminalPosition.of(4, 0)).getCharacterString().charAt(0)); assertFalse(virtualTerminal.isWholeBufferDirtyThenReset()); assertEquals(new TreeSet<>(Arrays.asList( - new TerminalPosition(0, 0), - new TerminalPosition(1, 0), - new TerminalPosition(2, 0), - new TerminalPosition(3, 0), - new TerminalPosition(4, 0))), + TerminalPosition.of(0, 0), + TerminalPosition.of(1, 0), + TerminalPosition.of(2, 0), + TerminalPosition.of(3, 0), + TerminalPosition.of(4, 0))), virtualTerminal.getAndResetDirtyCells()); // Make sure it's reset @@ -113,7 +113,7 @@ public void singleLineWriteAndReadBackWorks() { @Test public void clearAllMarksEverythingAsDirtyAndEverythingInTheTerminalIsReplacedWithDefaultCharacter() { virtualTerminal.setTerminalSize(new TerminalSize(10, 5)); - assertEquals(TerminalPosition.TOP_LEFT_CORNER, virtualTerminal.getCursorPosition()); + assertEquals(TerminalPosition.OF_0x0, virtualTerminal.getCursorPosition()); virtualTerminal.putCharacter(new TextCharacter('H')); virtualTerminal.putCharacter(new TextCharacter('E')); virtualTerminal.putCharacter(new TextCharacter('L')); @@ -124,18 +124,18 @@ public void clearAllMarksEverythingAsDirtyAndEverythingInTheTerminalIsReplacedWi assertTrue(virtualTerminal.isWholeBufferDirtyThenReset()); assertEquals(Collections.emptySet(), virtualTerminal.getAndResetDirtyCells()); - assertEquals(TerminalPosition.TOP_LEFT_CORNER, virtualTerminal.getCursorPosition()); - assertEquals(TextCharacter.DEFAULT_CHARACTER, virtualTerminal.getCharacter(new TerminalPosition(0, 0))); - assertEquals(TextCharacter.DEFAULT_CHARACTER, virtualTerminal.getCharacter(new TerminalPosition(1, 0))); - assertEquals(TextCharacter.DEFAULT_CHARACTER, virtualTerminal.getCharacter(new TerminalPosition(2, 0))); - assertEquals(TextCharacter.DEFAULT_CHARACTER, virtualTerminal.getCharacter(new TerminalPosition(3, 0))); - assertEquals(TextCharacter.DEFAULT_CHARACTER, virtualTerminal.getCharacter(new TerminalPosition(4, 0))); + assertEquals(TerminalPosition.OF_0x0, virtualTerminal.getCursorPosition()); + assertEquals(TextCharacter.DEFAULT_CHARACTER, virtualTerminal.getCharacter(TerminalPosition.of(0, 0))); + assertEquals(TextCharacter.DEFAULT_CHARACTER, virtualTerminal.getCharacter(TerminalPosition.of(1, 0))); + assertEquals(TextCharacter.DEFAULT_CHARACTER, virtualTerminal.getCharacter(TerminalPosition.of(2, 0))); + assertEquals(TextCharacter.DEFAULT_CHARACTER, virtualTerminal.getCharacter(TerminalPosition.of(3, 0))); + assertEquals(TextCharacter.DEFAULT_CHARACTER, virtualTerminal.getCharacter(TerminalPosition.of(4, 0))); } @Test public void replacingAllContentTriggersWholeTerminalIsDirty() { virtualTerminal.setTerminalSize(new TerminalSize(5, 3)); - assertEquals(TerminalPosition.TOP_LEFT_CORNER, virtualTerminal.getCursorPosition()); + assertEquals(TerminalPosition.OF_0x0, virtualTerminal.getCursorPosition()); virtualTerminal.putCharacter(new TextCharacter('H')); virtualTerminal.putCharacter(new TextCharacter('E')); virtualTerminal.putCharacter(new TextCharacter('L')); @@ -158,14 +158,14 @@ public void replacingAllContentTriggersWholeTerminalIsDirty() { @Test public void tooLongLinesWrap() { virtualTerminal.setTerminalSize(new TerminalSize(5, 5)); - assertEquals(TerminalPosition.TOP_LEFT_CORNER, virtualTerminal.getCursorPosition()); + assertEquals(TerminalPosition.OF_0x0, virtualTerminal.getCursorPosition()); virtualTerminal.putCharacter(new TextCharacter('H')); virtualTerminal.putCharacter(new TextCharacter('E')); virtualTerminal.putCharacter(new TextCharacter('L')); virtualTerminal.putCharacter(new TextCharacter('L')); virtualTerminal.putCharacter(new TextCharacter('O')); virtualTerminal.putCharacter(new TextCharacter('!')); - assertEquals(TerminalPosition.OFFSET_1x1, virtualTerminal.getCursorPosition()); + assertEquals(TerminalPosition.OF_1x1, virtualTerminal.getCursorPosition()); // Expected layout: // |HELLO| @@ -176,14 +176,14 @@ public void tooLongLinesWrap() { @Test public void makeSureDoubleWidthCharactersWrapProperly() { virtualTerminal.setTerminalSize(new TerminalSize(9, 5)); - assertEquals(TerminalPosition.TOP_LEFT_CORNER, virtualTerminal.getCursorPosition()); + assertEquals(TerminalPosition.OF_0x0, virtualTerminal.getCursorPosition()); virtualTerminal.putCharacter(new TextCharacter('こ')); virtualTerminal.putCharacter(new TextCharacter('ん')); virtualTerminal.putCharacter(new TextCharacter('に')); virtualTerminal.putCharacter(new TextCharacter('ち')); virtualTerminal.putCharacter(new TextCharacter('は')); virtualTerminal.putCharacter(new TextCharacter('!')); - assertEquals(new TerminalPosition(3, 1), virtualTerminal.getCursorPosition()); + assertEquals(TerminalPosition.of(3, 1), virtualTerminal.getCursorPosition()); // Expected layout: // |こんにち| @@ -191,7 +191,7 @@ public void makeSureDoubleWidthCharactersWrapProperly() { // where the cursor is one column after the '!' (2 + 1 = 3rd column) // Make sure there's a default padding character at 8x0 - assertEquals(TextCharacter.DEFAULT_CHARACTER, virtualTerminal.getCharacter(new TerminalPosition(8, 0))); + assertEquals(TextCharacter.DEFAULT_CHARACTER, virtualTerminal.getCharacter(TerminalPosition.of(8, 0))); } @Test @@ -200,22 +200,22 @@ public void overwritingDoubleWidthCharactersEraseTheOtherHalf() { virtualTerminal.putCharacter(new TextCharacter('画')); virtualTerminal.putCharacter(new TextCharacter('面')); - assertEquals('画', virtualTerminal.getCharacter(new TerminalPosition(0, 0)).getCharacterString().charAt(0)); - assertEquals('画', virtualTerminal.getCharacter(new TerminalPosition(1, 0)).getCharacterString().charAt(0)); - assertEquals('面', virtualTerminal.getCharacter(new TerminalPosition(2, 0)).getCharacterString().charAt(0)); - assertEquals('面', virtualTerminal.getCharacter(new TerminalPosition(3, 0)).getCharacterString().charAt(0)); + assertEquals('画', virtualTerminal.getCharacter(TerminalPosition.of(0, 0)).getCharacterString().charAt(0)); + assertEquals('画', virtualTerminal.getCharacter(TerminalPosition.of(1, 0)).getCharacterString().charAt(0)); + assertEquals('面', virtualTerminal.getCharacter(TerminalPosition.of(2, 0)).getCharacterString().charAt(0)); + assertEquals('面', virtualTerminal.getCharacter(TerminalPosition.of(3, 0)).getCharacterString().charAt(0)); - virtualTerminal.setCursorPosition(new TerminalPosition(0, 0)); + virtualTerminal.setCursorPosition(TerminalPosition.of(0, 0)); virtualTerminal.putCharacter(new TextCharacter('Y')); - assertEquals('Y', virtualTerminal.getCharacter(new TerminalPosition(0, 0)).getCharacterString().charAt(0)); - assertEquals(TextCharacter.DEFAULT_CHARACTER, virtualTerminal.getCharacter(new TerminalPosition(1, 0))); + assertEquals('Y', virtualTerminal.getCharacter(TerminalPosition.of(0, 0)).getCharacterString().charAt(0)); + assertEquals(TextCharacter.DEFAULT_CHARACTER, virtualTerminal.getCharacter(TerminalPosition.of(1, 0))); - virtualTerminal.setCursorPosition(new TerminalPosition(3, 0)); + virtualTerminal.setCursorPosition(TerminalPosition.of(3, 0)); virtualTerminal.putCharacter(new TextCharacter('V')); - assertEquals(TextCharacter.DEFAULT_CHARACTER, virtualTerminal.getCharacter(new TerminalPosition(2, 0))); - assertEquals('V', virtualTerminal.getCharacter(new TerminalPosition(3, 0)).getCharacterString().charAt(0)); + assertEquals(TextCharacter.DEFAULT_CHARACTER, virtualTerminal.getCharacter(TerminalPosition.of(2, 0))); + assertEquals('V', virtualTerminal.getCharacter(TerminalPosition.of(3, 0)).getCharacterString().charAt(0)); } @Test @@ -223,31 +223,31 @@ public void testCursorPositionUpdatesWhenTerminalSizeChanges() { virtualTerminal.setTerminalSize(new TerminalSize(3, 3)); virtualTerminal.putCharacter('\n'); virtualTerminal.putCharacter('\n'); - assertEquals(new TerminalPosition(0, 2), virtualTerminal.getCursorPosition()); + assertEquals(TerminalPosition.of(0, 2), virtualTerminal.getCursorPosition()); virtualTerminal.putCharacter('\n'); - assertEquals(new TerminalPosition(0, 2), virtualTerminal.getCursorPosition()); + assertEquals(TerminalPosition.of(0, 2), virtualTerminal.getCursorPosition()); virtualTerminal.putCharacter('\n'); - assertEquals(new TerminalPosition(0, 2), virtualTerminal.getCursorPosition()); + assertEquals(TerminalPosition.of(0, 2), virtualTerminal.getCursorPosition()); // Shrink viewport virtualTerminal.setTerminalSize(new TerminalSize(3, 2)); - assertEquals(new TerminalPosition(0, 1), virtualTerminal.getCursorPosition()); + assertEquals(TerminalPosition.of(0, 1), virtualTerminal.getCursorPosition()); // Restore virtualTerminal.setTerminalSize(new TerminalSize(3, 3)); - assertEquals(new TerminalPosition(0, 2), virtualTerminal.getCursorPosition()); + assertEquals(TerminalPosition.of(0, 2), virtualTerminal.getCursorPosition()); // Enlarge virtualTerminal.setTerminalSize(new TerminalSize(3, 4)); - assertEquals(new TerminalPosition(0, 3), virtualTerminal.getCursorPosition()); + assertEquals(TerminalPosition.of(0, 3), virtualTerminal.getCursorPosition()); virtualTerminal.setTerminalSize(new TerminalSize(3, 5)); - assertEquals(new TerminalPosition(0, 4), virtualTerminal.getCursorPosition()); + assertEquals(TerminalPosition.of(0, 4), virtualTerminal.getCursorPosition()); // We've reached the total size of the buffer, enlarging it further shouldn't affect the cursor position virtualTerminal.setTerminalSize(new TerminalSize(3, 6)); - assertEquals(new TerminalPosition(0, 4), virtualTerminal.getCursorPosition()); + assertEquals(TerminalPosition.of(0, 4), virtualTerminal.getCursorPosition()); virtualTerminal.setTerminalSize(new TerminalSize(3, 7)); - assertEquals(new TerminalPosition(0, 4), virtualTerminal.getCursorPosition()); + assertEquals(TerminalPosition.of(0, 4), virtualTerminal.getCursorPosition()); } @Test @@ -256,7 +256,7 @@ public void textScrollingOutOfTheBacklogDisappears() { // Backlog of 1, meaning viewport size + 1 row virtualTerminal.setBacklogSize(1); putString("Line 1\n"); - assertEquals(new TerminalPosition(0, 1), virtualTerminal.getCursorPosition()); + assertEquals(TerminalPosition.of(0, 1), virtualTerminal.getCursorPosition()); assertEquals(virtualTerminal.getCursorPosition(), virtualTerminal.getCursorBufferPosition()); putString("Line 2\n"); putString("Line 3\n"); @@ -276,8 +276,8 @@ public void textScrollingOutOfTheBacklogDisappears() { assertLineEquals("Line 3", 0); assertLineEquals("Line 4", 1); assertLineEquals("", 2); - assertEquals(new TerminalPosition(0, 2), virtualTerminal.getCursorPosition()); - assertEquals(new TerminalPosition(0, 3), virtualTerminal.getCursorBufferPosition()); + assertEquals(TerminalPosition.of(0, 2), virtualTerminal.getCursorPosition()); + assertEquals(TerminalPosition.of(0, 3), virtualTerminal.getCursorBufferPosition()); // Make terminal bigger virtualTerminal.setTerminalSize(new TerminalSize(10, 4)); @@ -287,8 +287,8 @@ public void textScrollingOutOfTheBacklogDisappears() { assertLineEquals("Line 3", 1); assertLineEquals("Line 4", 2); assertLineEquals("", 3); - assertEquals(new TerminalPosition(0, 3), virtualTerminal.getCursorPosition()); - assertEquals(new TerminalPosition(0, 3), virtualTerminal.getCursorBufferPosition()); + assertEquals(TerminalPosition.of(0, 3), virtualTerminal.getCursorPosition()); + assertEquals(TerminalPosition.of(0, 3), virtualTerminal.getCursorBufferPosition()); // Make it even bigger virtualTerminal.setTerminalSize(new TerminalSize(10, 5)); @@ -300,8 +300,8 @@ public void textScrollingOutOfTheBacklogDisappears() { assertLineEquals("Line 4", 2); assertLineEquals("", 3); assertLineEquals("", 4); - assertEquals(new TerminalPosition(0, 3), virtualTerminal.getCursorPosition()); - assertEquals(new TerminalPosition(0, 3), virtualTerminal.getCursorBufferPosition()); + assertEquals(TerminalPosition.of(0, 3), virtualTerminal.getCursorPosition()); + assertEquals(TerminalPosition.of(0, 3), virtualTerminal.getCursorBufferPosition()); } @Test @@ -309,9 +309,9 @@ public void backlogTrimmingAdjustsCursorPositionAndDirtyCells() { virtualTerminal.setTerminalSize(new TerminalSize(80, 3)); virtualTerminal.setBacklogSize(0); virtualTerminal.putCharacter(fromChar('A')); - virtualTerminal.setCursorPosition(new TerminalPosition(1, 1)); + virtualTerminal.setCursorPosition(TerminalPosition.of(1, 1)); virtualTerminal.putCharacter(fromChar('B')); - virtualTerminal.setCursorPosition(new TerminalPosition(2, 2)); + virtualTerminal.setCursorPosition(TerminalPosition.of(2, 2)); virtualTerminal.putCharacter(fromChar('C')); assertLineEquals("A", 0); @@ -320,19 +320,19 @@ public void backlogTrimmingAdjustsCursorPositionAndDirtyCells() { // Dirty positions should now be these assertEquals(new TreeSet<>(Arrays.asList( - new TerminalPosition(0, 0), - new TerminalPosition(1, 1), - new TerminalPosition(2, 2))), virtualTerminal.getDirtyCells()); - assertEquals(new TerminalPosition(3, 2), virtualTerminal.getCursorPosition()); + TerminalPosition.of(0, 0), + TerminalPosition.of(1, 1), + TerminalPosition.of(2, 2))), virtualTerminal.getDirtyCells()); + assertEquals(TerminalPosition.of(3, 2), virtualTerminal.getCursorPosition()); // Add one more row to shift out the first line virtualTerminal.putCharacter('\n'); // Dirty positions should now be adjusted assertEquals(new TreeSet<>(Arrays.asList( - new TerminalPosition(1, 0), - new TerminalPosition(2, 1))), virtualTerminal.getDirtyCells()); - assertEquals(new TerminalPosition(0, 2), virtualTerminal.getCursorPosition()); + TerminalPosition.of(1, 0), + TerminalPosition.of(2, 1))), virtualTerminal.getDirtyCells()); + assertEquals(TerminalPosition.of(0, 2), virtualTerminal.getCursorPosition()); } @Test @@ -342,12 +342,12 @@ public void testPrivateMode() { for(int i = 1; i <= ROWS + 2; i++) { putString("Line " + i + "\n"); } - assertEquals(new TerminalPosition(0, ROWS - 1), virtualTerminal.getCursorPosition()); - assertEquals(new TerminalPosition(0, ROWS + 2), virtualTerminal.getCursorBufferPosition()); + assertEquals(TerminalPosition.of(0, ROWS - 1), virtualTerminal.getCursorPosition()); + assertEquals(TerminalPosition.of(0, ROWS + 2), virtualTerminal.getCursorBufferPosition()); virtualTerminal.enterPrivateMode(); - assertEquals(new TerminalPosition(0, 0), virtualTerminal.getCursorPosition()); - assertEquals(new TerminalPosition(0, 0), virtualTerminal.getCursorBufferPosition()); + assertEquals(TerminalPosition.of(0, 0), virtualTerminal.getCursorPosition()); + assertEquals(TerminalPosition.of(0, 0), virtualTerminal.getCursorBufferPosition()); for(int i = 0; i < ROWS; i++) { assertLineEquals("", i); } @@ -519,26 +519,26 @@ public void onClose() { public void settingCursorOutsideOfTerminalWindowWillBeAdjusted() { virtualTerminal.setTerminalSize(new TerminalSize(10, 5)); virtualTerminal.setCursorPosition(20, 10); - assertEquals(new TerminalPosition(9, 4), virtualTerminal.getCursorPosition()); + assertEquals(TerminalPosition.of(9, 4), virtualTerminal.getCursorPosition()); virtualTerminal.setCursorPosition(0, 10); - assertEquals(new TerminalPosition(0, 4), virtualTerminal.getCursorPosition()); + assertEquals(TerminalPosition.of(0, 4), virtualTerminal.getCursorPosition()); virtualTerminal.setCursorPosition(20, 0); - assertEquals(new TerminalPosition(9, 0), virtualTerminal.getCursorPosition()); + assertEquals(TerminalPosition.of(9, 0), virtualTerminal.getCursorPosition()); } @Test public void puttingCharacterInLastColumnDoesntMoveCursorToNextLine() { virtualTerminal.setTerminalSize(new TerminalSize(10, 5)); virtualTerminal.setCursorPosition(8, 2); - assertEquals(new TerminalPosition(8, 2), virtualTerminal.getCursorPosition()); + assertEquals(TerminalPosition.of(8, 2), virtualTerminal.getCursorPosition()); virtualTerminal.putCharacter('A'); - assertEquals(new TerminalPosition(9, 2), virtualTerminal.getCursorPosition()); + assertEquals(TerminalPosition.of(9, 2), virtualTerminal.getCursorPosition()); virtualTerminal.putCharacter('B'); - assertEquals(new TerminalPosition(10, 2), virtualTerminal.getCursorPosition()); + assertEquals(TerminalPosition.of(10, 2), virtualTerminal.getCursorPosition()); virtualTerminal.putCharacter('C'); - assertEquals(new TerminalPosition(1, 3), virtualTerminal.getCursorPosition()); + assertEquals(TerminalPosition.of(1, 3), virtualTerminal.getCursorPosition()); assertEquals(DEFAULT_CHARACTER.withCharacter('C'), virtualTerminal.getCharacter(0, 3)); } @@ -568,7 +568,7 @@ private void assertLineEquals(String expectedLineContent, int rowNumber) { private void assertBufferLineEquals(String expectedBufferLineContent, int rowNumber) { int column = 0; for(char c: expectedBufferLineContent.toCharArray()) { - assertEquals(DEFAULT_CHARACTER.withCharacter(c), virtualTerminal.getBufferCharacter(new TerminalPosition(column++, rowNumber))); + assertEquals(DEFAULT_CHARACTER.withCharacter(c), virtualTerminal.getBufferCharacter(TerminalPosition.of(column++, rowNumber))); if(TerminalTextUtils.isCharDoubleWidth(c)) { column++; } diff --git a/src/test/java/com/googlecode/lanterna/tutorial/Tutorial03.java b/src/test/java/com/googlecode/lanterna/tutorial/Tutorial03.java index fd00a0ebb..1e8175f67 100644 --- a/src/test/java/com/googlecode/lanterna/tutorial/Tutorial03.java +++ b/src/test/java/com/googlecode/lanterna/tutorial/Tutorial03.java @@ -124,7 +124,7 @@ resized since last time it was called (or since the screen was created if this i /* We pick a random location */ - TerminalPosition cellToModify = new TerminalPosition( + TerminalPosition cellToModify = TerminalPosition.of( random.nextInt(terminalSize.getColumns()), random.nextInt(terminalSize.getRows())); @@ -149,7 +149,7 @@ objects are immutable so the withBackgroundColor(..) call below returns a copy w box with information on the size of the terminal window */ String sizeLabel = "Terminal Size: " + terminalSize; - TerminalPosition labelBoxTopLeft = new TerminalPosition(1, 1); + TerminalPosition labelBoxTopLeft = TerminalPosition.of(1, 1); TerminalSize labelBoxSize = new TerminalSize(sizeLabel.length() + 2, 3); TerminalPosition labelBoxTopRightCorner = labelBoxTopLeft.withRelativeColumn(labelBoxSize.getColumns() - 1); TextGraphics textGraphics = screen.newTextGraphics(); From cd568b5ceefda309c0215782f4d64187bf8b7c2f Mon Sep 17 00:00:00 2001 From: levi yourchuck Date: Tue, 5 Mar 2024 04:15:14 -0600 Subject: [PATCH 02/11] LANTERNA-fix split panel cleanup TerminalPosition --- .../googlecode/lanterna/TerminalPosition.java | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/googlecode/lanterna/TerminalPosition.java b/src/main/java/com/googlecode/lanterna/TerminalPosition.java index f0d3d1e1e..333383d08 100644 --- a/src/main/java/com/googlecode/lanterna/TerminalPosition.java +++ b/src/main/java/com/googlecode/lanterna/TerminalPosition.java @@ -40,18 +40,18 @@ public class TerminalPosition implements Comparable { /** * @return a new TerminalPosition instance with the supplied column and row */ - public static final TerminalPosition of(int column, int row) { - if(column == 0 && row == 0) { - return OF_0x0; - } else if(column == 0 && row == 1) { - return OF_0x1; - } else if(column == 1 && row == 0) { - return OF_1x0; - } else if(column == 1 && row == 1) { - return OF_1x1; - } - return new TerminalPosition(column, row); - } + public static final TerminalPosition of(int column, int row) { + if(column == 0 && row == 0) { + return OF_0x0; + } else if(column == 0 && row == 1) { + return OF_0x1; + } else if(column == 1 && row == 0) { + return OF_1x0; + } else if(column == 1 && row == 1) { + return OF_1x1; + } + return new TerminalPosition(column, row); + } /** * Returns a TerminalPositoin with the column and row supplied. * If either the column or row supplied is different than this instances column or row, then a new instance is returned. From f85490bbcc53a86ed5fbcfb6b46a420e752172fd Mon Sep 17 00:00:00 2001 From: levi yourchuck Date: Tue, 5 Mar 2024 04:17:09 -0600 Subject: [PATCH 03/11] LANTERNA-fix split panel cleanup TerminalPosition --- src/main/java/com/googlecode/lanterna/TerminalPosition.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/googlecode/lanterna/TerminalPosition.java b/src/main/java/com/googlecode/lanterna/TerminalPosition.java index 333383d08..28bc5c056 100644 --- a/src/main/java/com/googlecode/lanterna/TerminalPosition.java +++ b/src/main/java/com/googlecode/lanterna/TerminalPosition.java @@ -52,13 +52,13 @@ public static final TerminalPosition of(int column, int row) { } return new TerminalPosition(column, row); } - /** + /** * Returns a TerminalPositoin with the column and row supplied. * If either the column or row supplied is different than this instances column or row, then a new instance is returned. * If both column and row are the same as this instance's column and row, then this instance is returned. * @return Either this instance, or a new instance if column/row are different than this instance's column/row. */ - public TerminalPosition as(int column, int row) { + public TerminalPosition as(int column, int row) { return (column != this.column || row != this.row) ? of(column, row) : this; } /** From c5e8794ff9f300b90fe59cc5efe149d49e2d2ff6 Mon Sep 17 00:00:00 2001 From: levi yourchuck Date: Thu, 7 Mar 2024 02:34:39 -0600 Subject: [PATCH 04/11] LANTERNA-fix split panel cleanup TerminalPosition --- .../googlecode/lanterna/TerminalPosition.java | 30 +-- .../lanterna/TestTerminalPosition.java | 173 +++++++++++++++++- 2 files changed, 182 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/googlecode/lanterna/TerminalPosition.java b/src/main/java/com/googlecode/lanterna/TerminalPosition.java index 28bc5c056..550e85af7 100644 --- a/src/main/java/com/googlecode/lanterna/TerminalPosition.java +++ b/src/main/java/com/googlecode/lanterna/TerminalPosition.java @@ -35,8 +35,8 @@ public class TerminalPosition implements Comparable { public static final TerminalPosition OF_1x0 = new TerminalPosition(1, 0); public static final TerminalPosition OF_1x1 = new TerminalPosition(1, 1); - private final int column; - private final int row; + public final int column; + public final int row; /** * @return a new TerminalPosition instance with the supplied column and row */ @@ -53,7 +53,7 @@ public static final TerminalPosition of(int column, int row) { return new TerminalPosition(column, row); } /** - * Returns a TerminalPositoin with the column and row supplied. + * Returns a TerminalPosition with the column and row supplied. * If either the column or row supplied is different than this instances column or row, then a new instance is returned. * If both column and row are the same as this instance's column and row, then this instance is returned. * @return Either this instance, or a new instance if column/row are different than this instance's column/row. @@ -97,15 +97,6 @@ public int getColumn() { public int getRow() { return row; } - /** - * Creates a new TerminalPosition object representing a position with the same column index as this but with a - * supplied row index. - * @param row Index of the row for the new position - * @return A TerminalPosition object with the same column as this but with a specified row index - */ - public TerminalPosition withRow(int row) { - return as(column, row); - } /** * Creates a new TerminalPosition object representing a position with the same row index as this but with a * supplied column index. @@ -115,6 +106,15 @@ public TerminalPosition withRow(int row) { public TerminalPosition withColumn(int column) { return as(column, row); } + /** + * Creates a new TerminalPosition object representing a position with the same column index as this but with a + * supplied row index. + * @param row Index of the row for the new position + * @return A TerminalPosition object with the same column as this but with a specified row index + */ + public TerminalPosition withRow(int row) { + return as(column, row); + } /** * Creates a new TerminalPosition object representing a position on the same row, but with a column offset by a * supplied value. Calling this method with delta 0 will return this, calling it with a positive delta will return @@ -221,13 +221,13 @@ public String toString() { @Override public int hashCode() { int hash = 3; - hash = 23 * hash + this.row; hash = 23 * hash + this.column; + hash = 23 * hash + this.row; return hash; } - public boolean equals(int columnIndex, int rowIndex) { - return column == columnIndex && row == rowIndex; + public boolean equals(int column, int row) { + return this.column == column && this.row == row; } @Override diff --git a/src/test/java/com/googlecode/lanterna/TestTerminalPosition.java b/src/test/java/com/googlecode/lanterna/TestTerminalPosition.java index 0c4d453d8..f2d77bc82 100644 --- a/src/test/java/com/googlecode/lanterna/TestTerminalPosition.java +++ b/src/test/java/com/googlecode/lanterna/TestTerminalPosition.java @@ -20,6 +20,8 @@ import org.junit.Assert; import org.junit.Test; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; @@ -37,6 +39,14 @@ void assertSameSystemIdentityHashCode(Object a, Object b) { void assertNotSameSystemIdentityHashCode(Object a, Object b) { assertNotEquals(System.identityHashCode(a), System.identityHashCode(b)); } + + @Test + public void test_instantiation() { + assertTrue(tp(12, 14).getColumn() == 12); + assertTrue(tp(12, 14).getRow() == 14); + assertTrue(tp(12, 14).column == 12); + assertTrue(tp(12, 14).row == 14); + } @Test public void testSystemIdentityHashCodeSame() { TerminalPosition a = TerminalPosition.of(23, 34); @@ -58,8 +68,9 @@ public void testObjectChurnReduced_of() { } @Test public void testObjectChurnReduced_as() { - TerminalPosition p = tp(35, 80); - assertSameSystemIdentityHashCode(p, p.as(35, 80)); + TerminalPosition p = tp(35, 40); + assertSameSystemIdentityHashCode(p, p.as(35, 40)); + assertSameSystemIdentityHashCode(p, p.as(tp(35, 40))); } @Test public void testObjectChurnReduced_plus() { @@ -67,7 +78,7 @@ public void testObjectChurnReduced_plus() { assertSameSystemIdentityHashCode(tp(1, 1), tp(0, 0).plus(0 , 1).plus(1, 0)); assertSameSystemIdentityHashCode(tp(1, 1), tp(0, 0).plus(1 , 1)); - TerminalPosition p = tp(35, 80); + TerminalPosition p = tp(35, 40); assertSameSystemIdentityHashCode(p, p.plus(0, 0)); } @Test @@ -75,18 +86,168 @@ public void testObjectChurnReduced_minus() { assertSameSystemIdentityHashCode(tp(0, 0), tp(1, 1).minus(1, 1)); assertSameSystemIdentityHashCode(tp(1, 1), tp(2, 2).minus(0, 1).minus(1, 0)); - TerminalPosition p = tp(35, 80); + TerminalPosition p = tp(35, 40); assertSameSystemIdentityHashCode(p, p.minus(0, 0)); } @Test public void testObjectChurnReduced_divide() { - TerminalPosition p = tp(35, 80); + TerminalPosition p = tp(35, 40); assertSameSystemIdentityHashCode(p, p.divide(1, 1)); } @Test public void testObjectChurnReduced_multiply() { - TerminalPosition p = tp(35, 80); + TerminalPosition p = tp(35, 40); assertSameSystemIdentityHashCode(p, p.multiply(1, 1)); } + // ------------------------------------------------------ + + @Test + public void test_withColumn() { + TerminalPosition a = tp(35, 40); + assertTrue(a.getColumn() == 35); + assertTrue(a.withColumn(20).equals(20, 40)); + } + @Test + public void test_withRow() { + TerminalPosition a = tp(35, 40); + assertTrue(a.getRow() == 40); + assertTrue(a.withRow(15).equals(35, 15)); + } + @Test + public void test_withRelativeColumn() { + TerminalPosition a = tp(35, 40); + assertTrue(a.getColumn() == 35); + assertTrue(a.withRelativeColumn(5).equals(40, 40)); + } + @Test + public void test_withRelativeRow() { + TerminalPosition a = tp(35, 40); + assertTrue(a.getRow() == 40); + assertTrue(a.withRelativeRow(-21).equals(35, 19)); + } + + @Test + public void test_withRelative() { + assertTrue(tp(33, 40).withRelative(tp(2, 3)).equals(35, 43)); + assertTrue(tp(33, 40).withRelative(tp(-2, -3)).equals(31, 37)); + assertTrue(tp(33, 40).withRelative(2, 3).equals(35, 43)); + assertTrue(tp(33, 40).withRelative(-2, -3).equals(31, 37)); + } + + @Test + public void testObjectChurnReduced_with() { + TerminalPosition p = tp(35, 40); + assertSameSystemIdentityHashCode(p, p.with(p)); + } + + @Test + public void test_plus() { + assertTrue(tp(3, 5).plus(2).equals(5, 7)); + assertTrue(tp(0, 0).plus(1).equals(1, 1)); + assertTrue(tp(3, 2).plus(0).equals(3, 2)); + assertTrue(tp(3, 5).plus(-1).equals(2, 4)); + assertTrue(tp(3, 5).plus(-2).equals(1, 3)); + + assertTrue(tp(11, 22).plus(3, 5).equals(14, 27)); + assertTrue(tp(0, 0).plus(1, 2).equals(1, 2)); + assertTrue(tp(3, 5).plus(-4, 3).equals(-1, 8)); + assertTrue(tp(3, 5).plus(0, 5).equals(3, 10)); + + assertTrue(tp(11, 22).plus(tp(3, 5)).equals(14, 27)); + assertTrue(tp(0, 0).plus(tp(1, 2)).equals(1, 2)); + assertTrue(tp(3, 5).plus(tp(-4, 3)).equals(-1, 8)); + assertTrue(tp(3, 5).plus(tp(0, 5)).equals(3, 10)); + } + @Test + public void test_minus() { + assertTrue(tp(3, 5).minus(2).equals(1, 3)); + assertTrue(tp(0, 0).minus(1).equals(-1, -1)); + assertTrue(tp(3, 2).minus(0).equals(3, 2)); + assertTrue(tp(3, 5).minus(-1).equals(4, 6)); + assertTrue(tp(3, 5).minus(-2).equals(5, 7)); + + assertTrue(tp(11, 22).minus(3, 2).equals(8, 20)); + assertTrue(tp(11, 22).minus(-3, -2).equals(14, 24)); + assertTrue(tp(11, 22).minus(0, 5).equals(11, 17)); + assertTrue(tp(11, 22).minus(1, 0).equals(10, 22)); + + assertTrue(tp(11, 22).minus(tp(3, 2)).equals(8, 20)); + assertTrue(tp(11, 22).minus(tp(-3, -2)).equals(14, 24)); + assertTrue(tp(11, 22).minus(tp(0, 5)).equals(11, 17)); + assertTrue(tp(11, 22).minus(tp(1, 0)).equals(10, 22)); + } + @Test + public void test_multiply() { + assertTrue(tp(11, 22).multiply(-3).equals(-33, -66)); + assertTrue(tp(11, 22).multiply(-1).equals(-11, -22)); + assertTrue(tp(11, 22).multiply(-0).equals(0, 0)); + assertTrue(tp(11, 22).multiply(0).equals(0, 0)); + assertTrue(tp(11, 22).multiply(1).equals(11, 22)); + assertTrue(tp(11, 22).multiply(3).equals(33, 66)); + + assertTrue(tp(11, 22).multiply(1, 2).equals(11, 44)); + assertTrue(tp(11, 22).multiply(-3, -2).equals(-33, -44)); + assertTrue(tp(11, 22).multiply(0, 5).equals(0, 110)); + assertTrue(tp(11, 22).multiply(1, 0).equals(11, 0)); + + assertTrue(tp(11, 22).multiply(1, 2).equals(11, 44)); + assertTrue(tp(11, 22).multiply(-3, -2).equals(-33, -44)); + assertTrue(tp(11, 22).multiply(0, 5).equals(0, 110)); + assertTrue(tp(11, 22).multiply(1, 0).equals(11, 0)); + } + @Test + public void test_divide() { + assertTrue(tp(11, 22).divide(1, 2).equals(11, 11)); + assertTrue(tp(11, 22).divide(1, 5).equals(11, 4)); + assertTrue(tp(20, 22).divide(4, 1).equals(5, 22)); + assertTrue(tp(20, 30).divide(1, 4).equals(20, 7)); + } + @Test + public void test_abs() { + assertTrue(tp(-5, 7).abs().equals(5, 7)); + assertTrue(tp(-7, -9).abs().equals(7, 9)); + assertTrue(tp(11, -11).abs().equals(11, 11)); + } + @Test + public void test_min() { + assertTrue(tp(5, 8).min(tp(9, 7)).equals(5, 7)); + assertTrue(tp(5, 8).min(tp(4, 9)).equals(4, 8)); + assertTrue(tp(0, 0).min(tp(-4, 9)).equals(-4, 0)); + } + @Test + public void test_max() { + assertTrue(tp(5, 8).min(tp(9, 7)).equals(5, 7)); + assertTrue(tp(5, 8).min(tp(4, 9)).equals(4, 8)); + assertTrue(tp(0, 0).min(tp(4, 9)).equals(0, 0)); + } + @Test + public void test_compareTo() { + assertTrue(tp(5, 6).compareTo(tp(5, 7)) < 0); + assertTrue(tp(5, 6).compareTo(tp(5, 6)) == 0); + assertTrue(tp(5, 6).compareTo(tp(5, 5)) > 0); + + assertTrue(tp(5, 6).compareTo(tp(6, 6)) < 0); + assertTrue(tp(5, 6).compareTo(tp(5, 6)) == 0); + assertTrue(tp(5, 6).compareTo(tp(4, 6)) > 0); + } + @Test + public void test_hashCode() { + TerminalPosition a = tp(7, 7); + TerminalPosition b = tp(7, 7); + assertNotSameSystemIdentityHashCode(a, b); + assertTrue(a.hashCode() == b.hashCode()); + assertFalse(tp(7, 7).hashCode() == tp(3, 7).hashCode()); + } + @Test + public void test_equals() { + TerminalPosition a = tp(8, 9); + TerminalPosition b = tp(8, 9); + assertNotSameSystemIdentityHashCode(a, b); + assertTrue(a.equals(b)); + assertTrue(a.equals(8, 9)); + TerminalPosition c = tp(4, 9); + assertFalse(c.equals(a)); + assertFalse(c.equals(5, 9)); + } } From 94eebe9bdc045fcab39fbff8f82529793a8d8ef7 Mon Sep 17 00:00:00 2001 From: levi yourchuck Date: Fri, 8 Mar 2024 18:42:21 -0600 Subject: [PATCH 05/11] LANTERNA-add TestTerminalSize --- .../googlecode/lanterna/TerminalPosition.java | 45 ++-- .../com/googlecode/lanterna/TerminalSize.java | 166 ++++++------ .../lanterna/gui2/AbsoluteLayout.java | 2 +- .../lanterna/gui2/AbstractBasePane.java | 2 +- .../lanterna/gui2/AbstractComponent.java | 2 +- .../lanterna/gui2/AnimatedLabel.java | 2 +- .../lanterna/gui2/BorderLayout.java | 2 +- .../com/googlecode/lanterna/gui2/Borders.java | 2 +- .../googlecode/lanterna/gui2/ComboBox.java | 2 +- .../googlecode/lanterna/gui2/EmptySpace.java | 4 +- .../googlecode/lanterna/gui2/GUIBackdrop.java | 2 +- .../googlecode/lanterna/gui2/GridLayout.java | 4 +- .../lanterna/gui2/InteractableLookupMap.java | 2 +- .../com/googlecode/lanterna/gui2/Label.java | 4 +- .../lanterna/gui2/LinearLayout.java | 4 +- .../lanterna/gui2/MultiWindowTextGUI.java | 4 +- .../googlecode/lanterna/gui2/ScrollBar.java | 2 +- .../googlecode/lanterna/gui2/Separator.java | 2 +- .../gui2/dialogs/ActionListDialog.java | 4 +- .../lanterna/gui2/dialogs/FileDialog.java | 2 +- .../gui2/dialogs/ListSelectDialog.java | 4 +- .../lanterna/gui2/dialogs/MessageDialog.java | 2 +- .../gui2/dialogs/TextInputDialog.java | 4 +- .../lanterna/gui2/menu/MenuItem.java | 4 +- .../table/DefaultTableHeaderRenderer.java | 2 +- .../gui2/table/DefaultTableRenderer.java | 2 +- .../googlecode/lanterna/TestTerminalSize.java | 241 ++++++++++++++++++ .../lanterna/gui2/ComboBoxTest.java | 8 +- .../gui2/DialogsTextGUIBasicTest.java | 2 +- .../lanterna/gui2/DynamicGridLayoutTest.java | 14 +- .../lanterna/gui2/GridLayoutTest.java | 4 +- .../lanterna/gui2/MultiWindowManagerTest.java | 8 +- .../lanterna/gui2/ScrollBarTest.java | 4 +- .../lanterna/gui2/WelcomeSplashTest.java | 2 +- .../lanterna/gui2/WindowManagerTest.java | 2 +- .../lanterna/screen/DrawImageTest.java | 2 +- 36 files changed, 395 insertions(+), 169 deletions(-) create mode 100644 src/test/java/com/googlecode/lanterna/TestTerminalSize.java diff --git a/src/main/java/com/googlecode/lanterna/TerminalPosition.java b/src/main/java/com/googlecode/lanterna/TerminalPosition.java index 550e85af7..ec4f3cb3a 100644 --- a/src/main/java/com/googlecode/lanterna/TerminalPosition.java +++ b/src/main/java/com/googlecode/lanterna/TerminalPosition.java @@ -38,7 +38,7 @@ public class TerminalPosition implements Comparable { public final int column; public final int row; /** - * @return a new TerminalPosition instance with the supplied column and row + * @return a TerminalPosition instance with the supplied column and row */ public static final TerminalPosition of(int column, int row) { if(column == 0 && row == 0) { @@ -59,7 +59,7 @@ public static final TerminalPosition of(int column, int row) { * @return Either this instance, or a new instance if column/row are different than this instance's column/row. */ public TerminalPosition as(int column, int row) { - return (column != this.column || row != this.row) ? of(column, row) : this; + return (column == this.column && row == this.row) ? this : of(column, row); } /** * Returns itself if it is equal to the supplied position, otherwise the supplied position. You can use this if you @@ -98,60 +98,59 @@ public int getRow() { return row; } /** - * Creates a new TerminalPosition object representing a position with the same row index as this but with a - * supplied column index. - * @param column Index of the column for the new position - * @return A TerminalPosition object with the same row as this but with a specified column index + * Obtain a TerminalPosition with the supplied column and the same row as this instance. + * @param column Index of the column for the resulting TerminalPosition + * @return a TerminalPosition object with the same row as this but with a specified column index */ public TerminalPosition withColumn(int column) { return as(column, row); } /** - * Creates a new TerminalPosition object representing a position with the same column index as this but with a - * supplied row index. + * Obtain a TerminalPosition object with this instance's column and the supplied row. * @param row Index of the row for the new position - * @return A TerminalPosition object with the same column as this but with a specified row index + * @return a TerminalPosition object with the same column as this but with a specified row index */ public TerminalPosition withRow(int row) { return as(column, row); } /** - * Creates a new TerminalPosition object representing a position on the same row, but with a column offset by a - * supplied value. Calling this method with delta 0 will return this, calling it with a positive delta will return - * a terminal position delta number of columns to the right and for negative numbers the same to the left. + * Obtain a TerminalPosition with a column offset by the supplied delta and the same row as this instance. + * Calling this method with delta 0 will return this, calling it with a positive delta will return + * a TerminalPosition delta number of columns to the right and for negative numbers the same to the left. * @param delta Column offset - * @return New terminal position based off this one but with an applied offset + * @return a TerminalPosition based off this one but with an applied offset */ public TerminalPosition withRelativeColumn(int delta) { return plus(delta, 0); } /** - * Creates a new TerminalPosition object representing a position on the same column, but with a row offset by a - * supplied value. Calling this method with delta 0 will return this, calling it with a positive delta will return - * a terminal position delta number of rows to the down and for negative numbers the same up. + * Obtain a TerminalPosition with the same column as this instance and a row which is this instance's row offset + * by the supplied delta. + * Calling this method with delta 0 will return this, calling it with a positive delta will return + * a TerminalPosition delta number of rows to the down and for negative numbers the same up. * @param delta Row offset - * @return New terminal position based off this one but with an applied offset + * @return a TerminalPosition based off this one but with an applied offset */ public TerminalPosition withRelativeRow(int delta) { return plus(0, delta); } /** - * Creates a new TerminalPosition object that is 'translated' by an amount of rows and columns specified by another + * Obtain a TerminalPosition that is 'translated' by an amount of rows and columns specified by another * TerminalPosition. Same as calling * withRelativeRow(translate.getRow()).withRelativeColumn(translate.getColumn()) * @param translate How many columns and rows to translate - * @return New TerminalPosition that is the result of the original with added translation + * @return a TerminalPosition that is the result of the original with added translation */ public TerminalPosition withRelative(TerminalPosition translate) { return plus(translate); } /** - * Creates a new TerminalPosition object that is 'translated' by an amount of rows and columns specified by the two + * Obtain a TerminalPosition that is 'translated' by an amount of rows and columns specified by the two * parameters. Same as calling * withRelativeRow(deltaRow).withRelativeColumn(deltaColumn) - * @param deltaColumn How many columns to move from the current position in the new TerminalPosition - * @param deltaRow How many rows to move from the current position in the new TerminalPosition - * @return New TerminalPosition that is the result of the original position with added translation + * @param deltaColumn How many columns to move from the current position in the resulting TerminalPosition + * @param deltaRow How many rows to move from the current position in the resulting TerminalPosition + * @return a TerminalPosition that is the result of the original position with added translation */ public TerminalPosition withRelative(int deltaColumn, int deltaRow) { return plus(deltaColumn, deltaRow); diff --git a/src/main/java/com/googlecode/lanterna/TerminalSize.java b/src/main/java/com/googlecode/lanterna/TerminalSize.java index 1d905613c..2eb570f53 100644 --- a/src/main/java/com/googlecode/lanterna/TerminalSize.java +++ b/src/main/java/com/googlecode/lanterna/TerminalSize.java @@ -24,149 +24,134 @@ * * @author Martin */ -public class TerminalSize { - public static final TerminalSize ZERO = new TerminalSize(0, 0); - public static final TerminalSize ONE = new TerminalSize(1, 1); +public class TerminalSize implements Comparable { + + public static final TerminalSize OF_0x0 = new TerminalSize(0, 0); + public static final TerminalSize OF_0x1 = new TerminalSize(0, 1); + public static final TerminalSize OF_1x0 = new TerminalSize(1, 0); + public static final TerminalSize OF_1x1 = new TerminalSize(1, 1); public final int columns; public final int rows; public static final TerminalSize of(int columns, int rows) { + if(columns == 0 && rows == 0) { + return OF_0x0; + } else if(columns == 0 && rows == 1) { + return OF_0x1; + } else if(columns == 1 && rows == 0) { + return OF_1x0; + } else if(columns == 1 && rows == 1) { + return OF_1x1; + } return new TerminalSize(columns, rows); } - + public TerminalSize as(int columns, int rows) { + return (columns == this.columns && rows == this.rows) ? this : of(columns, rows); + } + public TerminalSize as(TerminalSize size) { + return size == null ? null : as(size.columns, size.rows); + } /** * Creates a new terminal size representation with a given width (columns) and height (rows) - * @param columns Width, in number of columns - * @param rows Height, in number of columns + * @param columns Width as number of columns + * @param rows Height as number or rows */ public TerminalSize(int columns, int rows) { if (columns < 0 || rows < 0) { throw new IllegalArgumentException("TerminalSize dimensions cannot be less than 0: [columns: " + columns + ", rows: " + rows + "]"); } - this.columns = columns; this.rows = rows; } - /** - * @return Returns the width of this size representation, in number of columns + * @return Width, number of columns, of this size representation */ public int getColumns() { return columns; } - /** - * Creates a new size based on this size, but with a different width - * @param columns Width of the new size, in columns - * @return New size based on this one, but with a new width + * @return Height, number of rows, of this size representation */ - public TerminalSize withColumns(int columns) { - if(this.columns == columns) { - return this; - } - if(columns == 0 && this.rows == 0) { - return ZERO; - } - return new TerminalSize(columns, this.rows); + public int getRows() { + return rows; } - - /** - * @return Returns the height of this size representation, in number of rows + * Obtain a TerminalSize with the supplied number of columns and this instance's number of rows + * @param columns Width as number of columns for the resulting TerminalSize + * @return a TerminalSize with the supplied number of columns and this instance's number of rows */ - public int getRows() { - return rows; + public TerminalSize withColumns(int columns) { + return as(columns, rows); } - /** - * Creates a new size based on this size, but with a different height - * @param rows Height of the new size, in rows - * @return New size based on this one, but with a new height + * Obtain a TerminalSize with this instance's number of columns and the supplied number of rows + * @param rows Height as number of rows for the resulting TerminalSize + * @return a TerminalSize with this instance's number of columns and the supplied number of rows */ public TerminalSize withRows(int rows) { - if(this.rows == rows) { - return this; - } - if(rows == 0 && this.columns == 0) { - return ZERO; - } - return new TerminalSize(this.columns, rows); + return as(columns, rows); } - /** - * Creates a new TerminalSize object representing a size with the same number of rows, but with a column size offset by a + * Obtain a TerminalSize with the same number of rows, but with a columns size offset by a * supplied value. Calling this method with delta 0 will return this, calling it with a positive delta will return * a terminal size delta number of columns wider and for negative numbers shorter. * @param delta Column offset - * @return New terminal size based off this one but with an applied transformation + * @return a TerminalSize based off this one but with an applied transformation */ public TerminalSize withRelativeColumns(int delta) { - if(delta == 0) { - return this; - } // Prevent going below 0 (which would throw an exception) return withColumns(Math.max(0, columns + delta)); } - /** - * Creates a new TerminalSize object representing a size with the same number of columns, but with a row size offset by a + * Obtain a TerminalSize with the same number of columns, but with a row size offset by a * supplied value. Calling this method with delta 0 will return this, calling it with a positive delta will return * a terminal size delta number of rows longer and for negative numbers shorter. * @param delta Row offset - * @return New terminal size based off this one but with an applied transformation + * @return a TerminalSize based off this one but with an applied transformation */ public TerminalSize withRelativeRows(int delta) { - if(delta == 0) { - return this; - } // Prevent going below 0 (which would throw an exception) return withRows(Math.max(0, rows + delta)); } - /** - * Creates a new TerminalSize object representing a size based on this object's size but with a delta applied. + * Obtain a TerminalSize based on this object's size but with a delta applied. * This is the same as calling * withRelativeColumns(delta.getColumns()).withRelativeRows(delta.getRows()) * @param delta Column and row offset - * @return New terminal size based off this one but with an applied resize + * @return a TerminalSize based off this one but with an applied resize */ public TerminalSize withRelative(TerminalSize delta) { - return withRelative(delta.getColumns(), delta.getRows()); + return plus(delta); } - /** - * Creates a new TerminalSize object representing a size based on this object's size but with a delta applied. + * Obtain a TerminalSize based on this object's size but with a delta applied. * This is the same as calling * withRelativeColumns(deltaColumns).withRelativeRows(deltaRows) - * @param deltaColumns How many extra columns the new TerminalSize will have (negative values are allowed) - * @param deltaRows How many extra rows the new TerminalSize will have (negative values are allowed) + * @param deltaColumns How many extra columns the new TerminalSize will have (negative delta values are allowed) + * @param deltaRows How many extra rows the new TerminalSize will have (negative delta values are allowed) * @return New terminal size based off this one but with an applied resize */ public TerminalSize withRelative(int deltaColumns, int deltaRows) { - return withRelativeRows(deltaRows).withRelativeColumns(deltaColumns); + return plus(deltaColumns, deltaRows); } - /** - * Takes a different TerminalSize and returns a new TerminalSize that has the largest dimensions of the two, - * measured separately. So calling 3x5 on a 5x3 will return 5x5. - * @param other Other TerminalSize to compare with - * @return TerminalSize that combines the maximum width between the two and the maximum height + * Obtain a TerminalSize having the max columns and max rows of this instance and the supplied one. + * Example: calling 3x5 on a 5x3 will return 5x5. + * @param other TerminalSize to compare with + * @return a TerminalSize that combines the maximum width and maximum height between the two */ public TerminalSize max(TerminalSize other) { - return withColumns(Math.max(columns, other.columns)) - .withRows(Math.max(rows, other.rows)); + return as(Math.max(columns, other.columns), Math.max(rows, other.rows)); } - /** - * Takes a different TerminalSize and returns a new TerminalSize that has the smallest dimensions of the two, - * measured separately. So calling 3x5 on a 5x3 will return 3x3. - * @param other Other TerminalSize to compare with - * @return TerminalSize that combines the minimum width between the two and the minimum height + * Obtain a TerminalSize having the min columns and min rows of this instance and the supplied one. + * Example: calling 3x5 on a 5x3 will return 3x3. + * @param other TerminalSize to compare with + * @return a TerminalSize that combines the minimum width and minimum height between the two */ public TerminalSize min(TerminalSize other) { - return withColumns(Math.min(columns, other.columns)) - .withRows(Math.min(rows, other.rows)); + return as(Math.min(columns, other.columns), Math.min(rows, other.rows)); } public TerminalSize plus(TerminalSize other) { @@ -182,16 +167,16 @@ public TerminalSize divide(TerminalSize denominator) { return divide(denominator.columns, denominator.rows); } public TerminalSize plus(int columns, int rows) { - return of(this.columns + columns, this.rows + rows); + return as(this.columns + columns, this.rows + rows); } public TerminalSize minus(int columns, int rows) { - return of(this.columns - columns, this.rows - rows); + return as(this.columns - columns, this.rows - rows); } public TerminalSize multiply(int columns, int rows) { - return of(this.columns * columns, this.rows * rows); + return as(this.columns * columns, this.rows * rows); } public TerminalSize divide(int columnsDenominator, int rowsDenominator) { - return of(columns / columnsDenominator, rows / rowsDenominator); + return as(columns / columnsDenominator, rows / rowsDenominator); } public TerminalSize plus(int amount) { return plus(amount, amount); } public TerminalSize minus(int amount) { return minus(amount, amount); } @@ -206,10 +191,7 @@ public TerminalSize divide(int columnsDenominator, int rowsDenominator) { * @return Itself if this size equals the size passed in, otherwise the size passed in */ public TerminalSize with(TerminalSize size) { - if(equals(size)) { - return this; - } - return size; + return as(size); } /** @@ -221,6 +203,15 @@ public TerminalSize with(TerminalSize size) { public int getDimension(int d) { return d == 0 ? getColumns() : getRows(); } + + @Override + public int compareTo(TerminalSize other) { + return Integer.compare(columns * rows, other.columns * other.rows); + } + + public boolean equals(int columns, int rows) { + return this.columns == columns && this.rows == rows; + } @Override public String toString() { @@ -229,16 +220,11 @@ public String toString() { @Override public boolean equals(Object obj) { - if(this == obj) { - return true; - } - if (!(obj instanceof TerminalSize)) { - return false; - } - - TerminalSize other = (TerminalSize) obj; - return columns == other.columns - && rows == other.rows; + return obj != null + && obj.getClass() == getClass() + && ((TerminalSize) obj).columns == columns + && ((TerminalSize) obj).rows == rows + ; } @Override diff --git a/src/main/java/com/googlecode/lanterna/gui2/AbsoluteLayout.java b/src/main/java/com/googlecode/lanterna/gui2/AbsoluteLayout.java index a4a87b414..590669179 100644 --- a/src/main/java/com/googlecode/lanterna/gui2/AbsoluteLayout.java +++ b/src/main/java/com/googlecode/lanterna/gui2/AbsoluteLayout.java @@ -32,7 +32,7 @@ public class AbsoluteLayout implements LayoutManager { @Override public TerminalSize getPreferredSize(List components) { - TerminalSize size = TerminalSize.ZERO; + TerminalSize size = TerminalSize.OF_0x0; for(Component component: components) { size = size.max( new TerminalSize( diff --git a/src/main/java/com/googlecode/lanterna/gui2/AbstractBasePane.java b/src/main/java/com/googlecode/lanterna/gui2/AbstractBasePane.java index 32b3630e9..1373ea6c5 100644 --- a/src/main/java/com/googlecode/lanterna/gui2/AbstractBasePane.java +++ b/src/main/java/com/googlecode/lanterna/gui2/AbstractBasePane.java @@ -452,7 +452,7 @@ protected ComponentRenderer createDefaultRenderer() { public TerminalSize getPreferredSize(Container component) { Component subComponent = getComponent(); if(subComponent == null) { - return TerminalSize.ZERO; + return TerminalSize.OF_0x0; } return subComponent.getPreferredSize(); } diff --git a/src/main/java/com/googlecode/lanterna/gui2/AbstractComponent.java b/src/main/java/com/googlecode/lanterna/gui2/AbstractComponent.java index c74f4c878..33283d70b 100644 --- a/src/main/java/com/googlecode/lanterna/gui2/AbstractComponent.java +++ b/src/main/java/com/googlecode/lanterna/gui2/AbstractComponent.java @@ -76,7 +76,7 @@ public abstract class AbstractComponent implements Componen * Default constructor */ public AbstractComponent() { - size = TerminalSize.ZERO; + size = TerminalSize.OF_0x0; position = TerminalPosition.OF_0x0; explicitPreferredSize = null; layoutData = null; diff --git a/src/main/java/com/googlecode/lanterna/gui2/AnimatedLabel.java b/src/main/java/com/googlecode/lanterna/gui2/AnimatedLabel.java index 31bbdd37b..7eef79726 100644 --- a/src/main/java/com/googlecode/lanterna/gui2/AnimatedLabel.java +++ b/src/main/java/com/googlecode/lanterna/gui2/AnimatedLabel.java @@ -68,7 +68,7 @@ public AnimatedLabel(String firstFrameText) { super(firstFrameText); frames = new ArrayList<>(); currentFrame = 0; - combinedMaximumPreferredSize = TerminalSize.ZERO; + combinedMaximumPreferredSize = TerminalSize.OF_0x0; String[] lines = splitIntoMultipleLines(firstFrameText); frames.add(lines); diff --git a/src/main/java/com/googlecode/lanterna/gui2/BorderLayout.java b/src/main/java/com/googlecode/lanterna/gui2/BorderLayout.java index 29ef2ee20..2be6287b5 100644 --- a/src/main/java/com/googlecode/lanterna/gui2/BorderLayout.java +++ b/src/main/java/com/googlecode/lanterna/gui2/BorderLayout.java @@ -154,7 +154,7 @@ public void doLayout(TerminalSize area, List components) { for(Component component: components) { if(component.isVisible() && !layout.containsValue(component)) { component.setPosition(TerminalPosition.OF_0x0); - component.setSize(TerminalSize.ZERO); + component.setSize(TerminalSize.OF_0x0); } } } diff --git a/src/main/java/com/googlecode/lanterna/gui2/Borders.java b/src/main/java/com/googlecode/lanterna/gui2/Borders.java index b8d298373..54e1daa34 100644 --- a/src/main/java/com/googlecode/lanterna/gui2/Borders.java +++ b/src/main/java/com/googlecode/lanterna/gui2/Borders.java @@ -186,7 +186,7 @@ public TerminalSize getPreferredSize(Border component) { Component wrappedComponent = border.getComponent(); TerminalSize preferredSize; if (wrappedComponent == null) { - preferredSize = TerminalSize.ZERO; + preferredSize = TerminalSize.OF_0x0; } else { preferredSize = wrappedComponent.getPreferredSize(); } diff --git a/src/main/java/com/googlecode/lanterna/gui2/ComboBox.java b/src/main/java/com/googlecode/lanterna/gui2/ComboBox.java index 495f2fb04..83356cdd9 100644 --- a/src/main/java/com/googlecode/lanterna/gui2/ComboBox.java +++ b/src/main/java/com/googlecode/lanterna/gui2/ComboBox.java @@ -642,7 +642,7 @@ public TerminalPosition getCursorLocation(ComboBox comboBox) { @Override public TerminalSize getPreferredSize(final ComboBox comboBox) { - TerminalSize size = TerminalSize.ONE.withColumns( + TerminalSize size = TerminalSize.OF_1x1.withColumns( (comboBox.getItemCount() == 0 ? TerminalTextUtils.getColumnWidth(comboBox.getText()) : 0) + 2); //noinspection SynchronizationOnLocalVariableOrMethodParameter synchronized(comboBox) { diff --git a/src/main/java/com/googlecode/lanterna/gui2/EmptySpace.java b/src/main/java/com/googlecode/lanterna/gui2/EmptySpace.java index f13694b94..5cfaaa617 100644 --- a/src/main/java/com/googlecode/lanterna/gui2/EmptySpace.java +++ b/src/main/java/com/googlecode/lanterna/gui2/EmptySpace.java @@ -35,7 +35,7 @@ public class EmptySpace extends AbstractComponent { * Creates an EmptySpace with size 1x1 and a default color chosen from the theme */ public EmptySpace() { - this(null, TerminalSize.ONE); + this(null, TerminalSize.OF_1x1); } /** @@ -43,7 +43,7 @@ public EmptySpace() { * @param color Color to use (null will make it use the theme) */ public EmptySpace(TextColor color) { - this(color, TerminalSize.ONE); + this(color, TerminalSize.OF_1x1); } /** diff --git a/src/main/java/com/googlecode/lanterna/gui2/GUIBackdrop.java b/src/main/java/com/googlecode/lanterna/gui2/GUIBackdrop.java index cbf12f1e2..d66bd7e5f 100644 --- a/src/main/java/com/googlecode/lanterna/gui2/GUIBackdrop.java +++ b/src/main/java/com/googlecode/lanterna/gui2/GUIBackdrop.java @@ -32,7 +32,7 @@ protected ComponentRenderer createDefaultRenderer() { @Override public TerminalSize getPreferredSize(EmptySpace component) { - return TerminalSize.ONE; + return TerminalSize.OF_1x1; } @Override diff --git a/src/main/java/com/googlecode/lanterna/gui2/GridLayout.java b/src/main/java/com/googlecode/lanterna/gui2/GridLayout.java index 725237b5c..8f524537b 100644 --- a/src/main/java/com/googlecode/lanterna/gui2/GridLayout.java +++ b/src/main/java/com/googlecode/lanterna/gui2/GridLayout.java @@ -386,7 +386,7 @@ public boolean hasChanged() { @Override public TerminalSize getPreferredSize(List components) { - TerminalSize preferredSize = TerminalSize.ZERO; + TerminalSize preferredSize = TerminalSize.OF_0x0; if(components.isEmpty()) { return preferredSize.withRelative( leftMarginSize + rightMarginSize, @@ -417,7 +417,7 @@ public void doLayout(TerminalSize area, List components) { Component[][] table = buildTable(components); table = eliminateUnusedRowsAndColumns(table); - if(area.equals(TerminalSize.ZERO) || + if(area.equals(TerminalSize.OF_0x0) || table.length == 0 || area.getColumns() <= leftMarginSize + rightMarginSize + ((table[0].length - 1) * horizontalSpacing) || area.getRows() <= bottomMarginSize + topMarginSize + ((table.length - 1) * verticalSpacing)) { diff --git a/src/main/java/com/googlecode/lanterna/gui2/InteractableLookupMap.java b/src/main/java/com/googlecode/lanterna/gui2/InteractableLookupMap.java index d2df9da8d..3aa254d3a 100644 --- a/src/main/java/com/googlecode/lanterna/gui2/InteractableLookupMap.java +++ b/src/main/java/com/googlecode/lanterna/gui2/InteractableLookupMap.java @@ -48,7 +48,7 @@ void reset() { } TerminalSize getSize() { - if (lookupMap.length==0) { return TerminalSize.ZERO; } + if (lookupMap.length==0) { return TerminalSize.OF_0x0; } return new TerminalSize(lookupMap[0].length, lookupMap.length); } diff --git a/src/main/java/com/googlecode/lanterna/gui2/Label.java b/src/main/java/com/googlecode/lanterna/gui2/Label.java index 1a0450407..ae461d219 100644 --- a/src/main/java/com/googlecode/lanterna/gui2/Label.java +++ b/src/main/java/com/googlecode/lanterna/gui2/Label.java @@ -45,7 +45,7 @@ public class Label extends AbstractComponent