![JAR search and dependency download from the Maven repository](/logo.png)
com.googlecode.lanterna.gui2.Borders Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of lanterna Show documentation
Show all versions of lanterna Show documentation
Java library for creating text-based terminal GUIs
package com.googlecode.lanterna.gui2;
import com.googlecode.lanterna.Symbols;
import com.googlecode.lanterna.TerminalPosition;
import com.googlecode.lanterna.TerminalSize;
/**
* This class containers a couple of border implementation
*/
public class Borders {
private Borders() {
}
public static Border singleLine() {
return new SingleLine("");
}
public static Border singleLine(String title) {
return new SingleLine(title);
}
public static Border doubleLine() {
return new DoubleLine("");
}
public static Border doubleLine(String title) {
return new DoubleLine(title);
}
private static abstract class StandardBorder extends AbstractBorder {
private final String title;
protected StandardBorder(String title) {
if (title == null) {
throw new IllegalArgumentException("Cannot create a border with null title");
}
this.title = title;
}
public String getTitle() {
return title;
}
@Override
public String toString() {
return getClass().getSimpleName() + "{" + title + "}";
}
}
private static abstract class AbstractBorderRenderer implements Border.BorderRenderer {
@Override
public TerminalSize getPreferredSize(Component component) {
StandardBorder border = (StandardBorder)component;
Component wrappedComponent = border.getWrappedComponent();
TerminalSize preferredSize;
if (wrappedComponent == null) {
preferredSize = TerminalSize.ZERO;
} else {
preferredSize = wrappedComponent.getPreferredSize();
}
preferredSize = preferredSize.withRelativeColumns(2).withRelativeRows(2);
String borderTitle = border.getTitle();
return preferredSize.max(new TerminalSize((borderTitle.isEmpty() ? 2 : borderTitle.length() + 4), 2));
}
@Override
public TerminalPosition getWrappedComponentTopLeftOffset() {
return TerminalPosition.OFFSET_1x1;
}
@Override
public TerminalSize getWrappedComponentSize(TerminalSize borderSize) {
return borderSize.withRelativeColumns(-2).withRelativeRows(-2);
}
@Override
public void drawComponent(TextGUIGraphics graphics, Component component) {
StandardBorder border = (StandardBorder)component;
Component wrappedComponent = border.getWrappedComponent();
if(wrappedComponent == null) {
return;
}
TerminalSize drawableArea = graphics.getSize();
graphics.applyThemeStyle(graphics.getThemeDefinition(StandardBorder.class).getNormal());
char horizontalLine = getHorizontalLine(graphics);
char verticalLine = getVerticalLine(graphics);
char bottomLeftCorner = getBottomLeftCorner(graphics);
char topLeftCorner = getTopLeftCorner(graphics);
char bottomRightCorner = getBottomRightCorner(graphics);
char topRightCorner = getTopRightCorner(graphics);
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.setCharacter(0, 0, topLeftCorner);
if(drawableArea.getColumns() > 2) {
graphics.drawLine(new TerminalPosition(1, 0), new TerminalPosition(drawableArea.getColumns() - 2, 0), horizontalLine);
}
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),
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),
horizontalLine);
}
if(drawableArea.getColumns() >= border.getTitle().length() + 4) {
graphics.putString(2, 0, border.getTitle());
}
wrappedComponent.draw(graphics.newTextGraphics(getWrappedComponentTopLeftOffset(), getWrappedComponentSize(drawableArea)));
}
protected abstract char getHorizontalLine(TextGUIGraphics graphics);
protected abstract char getVerticalLine(TextGUIGraphics graphics);
protected abstract char getBottomLeftCorner(TextGUIGraphics graphics);
protected abstract char getTopLeftCorner(TextGUIGraphics graphics);
protected abstract char getBottomRightCorner(TextGUIGraphics graphics);
protected abstract char getTopRightCorner(TextGUIGraphics graphics);
}
private static class SingleLine extends StandardBorder {
private SingleLine(String title) {
super(title);
}
@Override
protected ComponentRenderer createDefaultRenderer() {
return new SingleLineRenderer();
}
}
private static class SingleLineRenderer extends AbstractBorderRenderer {
@Override
protected char getTopRightCorner(TextGUIGraphics graphics) {
return graphics.getThemeDefinition(SingleLineRenderer.class).getCharacter("TOP_RIGHT_CORNER", Symbols.SINGLE_LINE_TOP_RIGHT_CORNER);
}
@Override
protected char getBottomRightCorner(TextGUIGraphics graphics) {
return graphics.getThemeDefinition(SingleLineRenderer.class).getCharacter("BOTTOM_RIGHT_CORNER", Symbols.SINGLE_LINE_BOTTOM_RIGHT_CORNER);
}
@Override
protected char getTopLeftCorner(TextGUIGraphics graphics) {
return graphics.getThemeDefinition(SingleLineRenderer.class).getCharacter("TOP_LEFT_CORNER", Symbols.SINGLE_LINE_TOP_LEFT_CORNER);
}
@Override
protected char getBottomLeftCorner(TextGUIGraphics graphics) {
return graphics.getThemeDefinition(SingleLineRenderer.class).getCharacter("BOTTOM_LEFT_CORNER", Symbols.SINGLE_LINE_BOTTOM_LEFT_CORNER);
}
@Override
protected char getVerticalLine(TextGUIGraphics graphics) {
return graphics.getThemeDefinition(SingleLineRenderer.class).getCharacter("VERTICAL_LINE", Symbols.SINGLE_LINE_VERTICAL);
}
@Override
protected char getHorizontalLine(TextGUIGraphics graphics) {
return graphics.getThemeDefinition(SingleLineRenderer.class).getCharacter("HORIZONTAL_LINE", Symbols.SINGLE_LINE_HORIZONTAL);
}
}
private static class DoubleLine extends StandardBorder {
private DoubleLine(String title) {
super(title);
}
@Override
protected ComponentRenderer createDefaultRenderer() {
return new DoubleLineRenderer();
}
}
private static class DoubleLineRenderer extends AbstractBorderRenderer {
@Override
protected char getTopRightCorner(TextGUIGraphics graphics) {
return graphics.getThemeDefinition(DoubleLine.class).getCharacter("TOP_RIGHT_CORNER", Symbols.DOUBLE_LINE_TOP_RIGHT_CORNER);
}
@Override
protected char getBottomRightCorner(TextGUIGraphics graphics) {
return graphics.getThemeDefinition(DoubleLine.class).getCharacter("BOTTOM_RIGHT_CORNER", Symbols.DOUBLE_LINE_BOTTOM_RIGHT_CORNER);
}
@Override
protected char getTopLeftCorner(TextGUIGraphics graphics) {
return graphics.getThemeDefinition(DoubleLine.class).getCharacter("TOP_LEFT_CORNER", Symbols.DOUBLE_LINE_TOP_LEFT_CORNER);
}
@Override
protected char getBottomLeftCorner(TextGUIGraphics graphics) {
return graphics.getThemeDefinition(DoubleLine.class).getCharacter("BOTTOM_LEFT_CORNER", Symbols.DOUBLE_LINE_BOTTOM_LEFT_CORNER);
}
@Override
protected char getVerticalLine(TextGUIGraphics graphics) {
return graphics.getThemeDefinition(DoubleLine.class).getCharacter("VERTICAL_LINE", Symbols.DOUBLE_LINE_VERTICAL);
}
@Override
protected char getHorizontalLine(TextGUIGraphics graphics) {
return graphics.getThemeDefinition(DoubleLine.class).getCharacter("HORIZONTAL_LINE", Symbols.DOUBLE_LINE_HORIZONTAL);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy