feat(ui): Implemented different text colors and bg
This commit is contained in:
parent
6028b54d10
commit
aced312df1
@ -29,14 +29,15 @@ public class Font {
|
|||||||
private int width;
|
private int width;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String get(int startY, int startX, int height, int width, String color) {
|
private String get(int startY, int startX, int height, int width, String color, String background) {
|
||||||
StringBuilder stringBuilder = new StringBuilder();
|
StringBuilder stringBuilder = new StringBuilder();
|
||||||
|
|
||||||
for (int y = startY; y < startY + height; y++) {
|
for (int y = startY; y < startY + height; y++) {
|
||||||
String[] line = lines[y].split("\033");
|
String[] line = lines[y].split("\033");
|
||||||
|
|
||||||
for (int x = startX; x < startX + width - 1; x++) {
|
for (int x = startX; x < startX + width - 1; x++) {
|
||||||
stringBuilder.append("\033").append(line[x].replaceAll("\\[(?!49m)[0-9;]+m", color));
|
stringBuilder.append("\033")
|
||||||
|
.append(line[x].replaceAll("\\[(?!49m)[0-9;]+m", color).replaceAll("\\[49m", background));
|
||||||
}
|
}
|
||||||
stringBuilder.append("\033[0m\n");
|
stringBuilder.append("\033[0m\n");
|
||||||
}
|
}
|
||||||
@ -44,7 +45,7 @@ public class Font {
|
|||||||
return stringBuilder.toString();
|
return stringBuilder.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
private CharDTO getDigit(char digit, String color) {
|
private CharDTO getDigit(char digit, String color, String background) {
|
||||||
int num = Integer.valueOf(digit);
|
int num = Integer.valueOf(digit);
|
||||||
int width = 12;
|
int width = 12;
|
||||||
int startY = HEIGHT;
|
int startY = HEIGHT;
|
||||||
@ -55,16 +56,16 @@ public class Font {
|
|||||||
startX = (26 + 9) * width;
|
startX = (26 + 9) * width;
|
||||||
}
|
}
|
||||||
|
|
||||||
return new CharDTO(get(startY, startX, HEIGHT, width, color), width);
|
return new CharDTO(get(startY, startX, HEIGHT, width, color, background), width);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CharDTO getChar(char character, String color) {
|
public CharDTO getChar(char character, String color, String background) {
|
||||||
if (character == ' ') {
|
if (character == ' ') {
|
||||||
return new CharDTO(("\033[49m ".repeat(12) + "\n").repeat(HEIGHT), 12);
|
return new CharDTO(("\033[49m ".repeat(12) + "\n").repeat(HEIGHT), 12);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Character.isDigit(character)) {
|
if (Character.isDigit(character)) {
|
||||||
return getDigit(character, color);
|
return getDigit(character, color, background);
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean upper = Character.isUpperCase(character);
|
boolean upper = Character.isUpperCase(character);
|
||||||
@ -72,17 +73,17 @@ public class Font {
|
|||||||
int startY = (upper ? 0 : 1) * HEIGHT;
|
int startY = (upper ? 0 : 1) * HEIGHT;
|
||||||
int startX = (upper ? character - 'A' : character - 'a') * width;
|
int startX = (upper ? character - 'A' : character - 'a') * width;
|
||||||
|
|
||||||
return new CharDTO(get(startY, startX, HEIGHT, width, color), width);
|
return new CharDTO(get(startY, startX, HEIGHT, width, color, background), width);
|
||||||
}
|
}
|
||||||
|
|
||||||
public FontDTO getLine(String text) {
|
public FontDTO getLine(String text, String color, String background) {
|
||||||
char[] chars = text.toCharArray();
|
char[] chars = text.toCharArray();
|
||||||
|
|
||||||
String[][] letters = new String[chars.length][];
|
String[][] letters = new String[chars.length][];
|
||||||
int width = 0;
|
int width = 0;
|
||||||
|
|
||||||
for (int i = 0; i < chars.length; i++) {
|
for (int i = 0; i < chars.length; i++) {
|
||||||
var charDto = getChar(chars[i], "[47m");
|
var charDto = getChar(chars[i], color, background);
|
||||||
letters[i] = charDto.getCharacter().split("\n");
|
letters[i] = charDto.getCharacter().split("\n");
|
||||||
width += charDto.getWidth();
|
width += charDto.getWidth();
|
||||||
}
|
}
|
||||||
@ -129,8 +130,8 @@ public class Font {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public FontDTO getScaledLine(String text, Size size, int termWidth) {
|
public FontDTO getScaledLine(String text, Size size, int termWidth, String color, String background) {
|
||||||
return scale(getLine(text), size.getFunc().apply(termWidth));
|
return scale(getLine(text, color, background), size.getFunc().apply(termWidth));
|
||||||
}
|
}
|
||||||
|
|
||||||
// This will probably need little more work
|
// This will probably need little more work
|
||||||
@ -171,6 +172,13 @@ public class Font {
|
|||||||
CENTER
|
CENTER
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public record Background(String bg) {
|
||||||
|
|
||||||
|
}
|
||||||
|
public record Color(String color) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private FontDTO applyAlignment(FontDTO data, Align alignment, int termWidth) {
|
private FontDTO applyAlignment(FontDTO data, Align alignment, int termWidth) {
|
||||||
return switch (alignment) {
|
return switch (alignment) {
|
||||||
case LEFT -> data;
|
case LEFT -> data;
|
||||||
@ -209,11 +217,14 @@ public class Font {
|
|||||||
|
|
||||||
public FontDTO line(Terminal terminal, String text, Object... attributes) {
|
public FontDTO line(Terminal terminal, String text, Object... attributes) {
|
||||||
int termWidth = terminal.getWidth();
|
int termWidth = terminal.getWidth();
|
||||||
//int termHeight = terminal.getHeight();
|
// int termHeight = terminal.getHeight();
|
||||||
|
|
||||||
Size fontSize = Size.MEDIUM;
|
Size fontSize = Size.MEDIUM;
|
||||||
Align alignment = Align.LEFT;
|
Align alignment = Align.LEFT;
|
||||||
|
|
||||||
|
String color = "[47m";
|
||||||
|
String background = "[49m";
|
||||||
|
|
||||||
for (Object attribute : attributes) {
|
for (Object attribute : attributes) {
|
||||||
if (Size.class.isAssignableFrom(attribute.getClass())) {
|
if (Size.class.isAssignableFrom(attribute.getClass())) {
|
||||||
fontSize = (Size) attribute;
|
fontSize = (Size) attribute;
|
||||||
@ -225,9 +236,19 @@ public class Font {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Color.class.isAssignableFrom(attribute.getClass())) {
|
||||||
|
color = ((Color) attribute).color();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Background.class.isAssignableFrom(attribute.getClass())) {
|
||||||
|
background = ((Background) attribute).bg();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
log.error("Invalid attribute class {}. Skipping", attribute.getClass().getSimpleName());
|
log.error("Invalid attribute class {}. Skipping", attribute.getClass().getSimpleName());
|
||||||
}
|
}
|
||||||
|
|
||||||
return applyAlignment(getScaledLine(text, fontSize, termWidth), alignment, termWidth);
|
return applyAlignment(getScaledLine(text, fontSize, termWidth, color, background), alignment, termWidth);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ public class Escape {
|
|||||||
log.debug("Terminal width: {}", width);
|
log.debug("Terminal width: {}", width);
|
||||||
log.debug("Terminal height: {}", height);
|
log.debug("Terminal height: {}", height);
|
||||||
|
|
||||||
var twodcraft = font.line(terminal, "2DCraft", Size.LARGE, Align.LEFT);
|
var twodcraft = font.line(terminal, "2DCraft", Size.LARGE, Align.CENTER);
|
||||||
buffer.append(twodcraft.getData());
|
buffer.append(twodcraft.getData());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user