chore(config-ui-tiny): plumb text renderers through entry list
All checks were successful
ci/woodpecker/push/docs Pipeline was successful
ci/woodpecker/push/jfmod Pipeline was successful

This commit is contained in:
Johannes Frohnmeyer 2024-08-13 14:29:43 +02:00
parent 8c4e3bb9dc
commit 33f2bb4c13
Signed by: Johannes
GPG Key ID: E76429612C2929F4
2 changed files with 17 additions and 21 deletions

View File

@ -144,9 +144,8 @@ public class TinyConfigScreen extends ScreenWithSaveHook {
int headerWidth = Math.min(400, tabNavWidth) - 28; int headerWidth = Math.min(400, tabNavWidth) - 28;
int singleHeaderWidth = MathHelper.roundUpToMultiple(headerWidth / categories.size(), 2); int singleHeaderWidth = MathHelper.roundUpToMultiple(headerWidth / categories.size(), 2);
int singleTextWidth = singleHeaderWidth - 2; int singleTextWidth = singleHeaderWidth - 2;
TextRenderer tr = MinecraftClient.getInstance().textRenderer;
for (ConfigCategory category : categories) { for (ConfigCategory category : categories) {
if (tr.getWidth(getTitle(category.getTranslationPrefix())) > singleTextWidth) return true; if (textRenderer.getWidth(getTitle(category.getTranslationPrefix())) > singleTextWidth) return true;
} }
return false; return false;
} }

View File

@ -31,11 +31,11 @@ public class EntryListWidget extends ElementListWidget<EntryListWidget.ConfigEnt
} }
public void addUnknown(ClickableWidget resetButton, BooleanSupplier resetVisible, Text text, Reflowable reflow) { public void addUnknown(ClickableWidget resetButton, BooleanSupplier resetVisible, Text text, Reflowable reflow) {
this.addEntry(new ConfigUnknownEntry(text, resetVisible, resetButton, reflow)); this.addEntry(new ConfigUnknownEntry(text, resetVisible, resetButton, reflow, textRenderer));
} }
public void addButton(@Nullable ClickableWidget button, ClickableWidget resetButton, BooleanSupplier resetVisible, Text text, Reflowable reflow) { public void addButton(@Nullable ClickableWidget button, ClickableWidget resetButton, BooleanSupplier resetVisible, Text text, Reflowable reflow) {
this.addEntry(new ConfigScreenEntry(button, text, resetVisible, resetButton, reflow)); this.addEntry(new ConfigScreenEntry(button, text, resetVisible, resetButton, reflow, textRenderer));
} }
public void addReference(Text text, Supplier<Screen> targetScreen) { public void addReference(Text text, Supplier<Screen> targetScreen) {
@ -43,7 +43,7 @@ public class EntryListWidget extends ElementListWidget<EntryListWidget.ConfigEnt
} }
public void addText(Text text) { public void addText(Text text) {
for (ConfigEntry entry : ConfigTextEntry.create(this, text, width)) this.addEntry(entry); for (ConfigEntry entry : ConfigTextEntry.create(textRenderer, this, text, width)) this.addEntry(entry);
} }
@Override @Override
@ -100,27 +100,22 @@ public class EntryListWidget extends ElementListWidget<EntryListWidget.ConfigEnt
private int width; private int width;
private final OrderedText text; private final OrderedText text;
private final TextRenderer renderer; private final TextRenderer renderer;
private final ConfigTextEntry next;
public StringVisitable originalText = null; public StringVisitable originalText = null;
public ConfigTextEntry(int width, OrderedText text, TextRenderer renderer, ConfigTextEntry next) { public ConfigTextEntry(int width, OrderedText text, TextRenderer renderer) {
this.width = width; this.width = width;
this.text = text; this.text = text;
this.renderer = renderer; this.renderer = renderer;
this.next = next;
} }
public static List<ConfigTextEntry> create(EntryListWidget parent, StringVisitable text, int width) { public static List<ConfigTextEntry> create(TextRenderer renderer, EntryListWidget parent, StringVisitable text, int width) {
TextRenderer renderer = MinecraftClient.getInstance().textRenderer;
List<ConfigTextEntry> entries = new ArrayList<>(); List<ConfigTextEntry> entries = new ArrayList<>();
ConfigTextEntry next = null;
List<OrderedText> wrappedLines = new ArrayList<>(renderer.wrapLines(text, width)); List<OrderedText> wrappedLines = new ArrayList<>(renderer.wrapLines(text, width));
Collections.reverse(wrappedLines); Collections.reverse(wrappedLines);
for (OrderedText line : wrappedLines) { for (OrderedText line : wrappedLines) {
ConfigTextEntry[] tmp = new ConfigTextEntry[1]; entries.add(parent.new ConfigTextEntry(width, line, renderer));
entries.add(next = tmp[0] = parent.new ConfigTextEntry(width, line, renderer, next));
} }
if (!entries.isEmpty()) entries.get(entries.size() - 1).originalText = text; if (!entries.isEmpty()) entries.getLast().originalText = text;
Collections.reverse(entries); Collections.reverse(entries);
return entries; return entries;
} }
@ -150,7 +145,7 @@ public class EntryListWidget extends ElementListWidget<EntryListWidget.ConfigEnt
List<ConfigEntry> children = EntryListWidget.this.children(); List<ConfigEntry> children = EntryListWidget.this.children();
int i = children.indexOf(this); int i = children.indexOf(this);
EntryListWidget.this.removeEntry(this); EntryListWidget.this.removeEntry(this);
for (ConfigTextEntry entry : create(EntryListWidget.this, originalText, width)) { for (ConfigTextEntry entry : create(renderer, EntryListWidget.this, originalText, width)) {
children.add(i++, entry); children.add(i++, entry);
} }
} else { } else {
@ -194,19 +189,20 @@ public class EntryListWidget extends ElementListWidget<EntryListWidget.ConfigEnt
@Environment(EnvType.CLIENT) @Environment(EnvType.CLIENT)
public static class ConfigScreenEntry extends ConfigEntry { public static class ConfigScreenEntry extends ConfigEntry {
private static final TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer;
public final ClickableWidget button; public final ClickableWidget button;
private final BooleanSupplier resetVisible; private final BooleanSupplier resetVisible;
private final ClickableWidget resetButton; private final ClickableWidget resetButton;
private final Text text; private final Text text;
private final Reflowable reflow; private final Reflowable reflow;
private final TextRenderer renderer;
public ConfigScreenEntry(ClickableWidget button, Text text, BooleanSupplier resetVisible, ClickableWidget resetButton, Reflowable reflow) { public ConfigScreenEntry(ClickableWidget button, Text text, BooleanSupplier resetVisible, ClickableWidget resetButton, Reflowable reflow, TextRenderer renderer) {
this.button = button; this.button = button;
this.resetVisible = resetVisible; this.resetVisible = resetVisible;
this.resetButton = resetButton; this.resetButton = resetButton;
this.text = text; this.text = text;
this.reflow = reflow; this.reflow = reflow;
this.renderer = renderer;
} }
@Override @Override
@ -214,7 +210,7 @@ public class EntryListWidget extends ElementListWidget<EntryListWidget.ConfigEnt
super.render(context, index, y, x, entryWidth, entryHeight, mouseX, mouseY, hovered, tickDelta); super.render(context, index, y, x, entryWidth, entryHeight, mouseX, mouseY, hovered, tickDelta);
button.setY(y); button.setY(y);
button.render(context, mouseX, mouseY, tickDelta); button.render(context, mouseX, mouseY, tickDelta);
context.drawTextWithShadow(textRenderer, text, 12, y + 5, 0xFFFFFF); context.drawTextWithShadow(renderer, text, 12, y + 5, 0xFFFFFF);
if (resetVisible.getAsBoolean()) { if (resetVisible.getAsBoolean()) {
resetButton.setY(y); resetButton.setY(y);
resetButton.render(context, mouseX, mouseY, tickDelta); resetButton.render(context, mouseX, mouseY, tickDelta);
@ -243,23 +239,24 @@ public class EntryListWidget extends ElementListWidget<EntryListWidget.ConfigEnt
@Environment(EnvType.CLIENT) @Environment(EnvType.CLIENT)
public static class ConfigUnknownEntry extends ConfigEntry { public static class ConfigUnknownEntry extends ConfigEntry {
private static final TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer;
private final BooleanSupplier resetVisible; private final BooleanSupplier resetVisible;
private final ClickableWidget resetButton; private final ClickableWidget resetButton;
private final Text text; private final Text text;
private final Reflowable reflow; private final Reflowable reflow;
private final TextRenderer renderer;
public ConfigUnknownEntry(Text text, BooleanSupplier resetVisible, ClickableWidget resetButton, Reflowable reflow) { public ConfigUnknownEntry(Text text, BooleanSupplier resetVisible, ClickableWidget resetButton, Reflowable reflow, TextRenderer renderer) {
this.resetVisible = resetVisible; this.resetVisible = resetVisible;
this.resetButton = resetButton; this.resetButton = resetButton;
this.text = text; this.text = text;
this.reflow = reflow; this.reflow = reflow;
this.renderer = renderer;
} }
@Override @Override
public void render(DrawContext context, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { public void render(DrawContext context, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) {
super.render(context, index, y, x, entryWidth, entryHeight, mouseX, mouseY, hovered, tickDelta); super.render(context, index, y, x, entryWidth, entryHeight, mouseX, mouseY, hovered, tickDelta);
context.drawTextWithShadow(textRenderer, text, 12, y + 5, 0xFFFFFF); context.drawTextWithShadow(renderer, text, 12, y + 5, 0xFFFFFF);
if (resetVisible.getAsBoolean()) { if (resetVisible.getAsBoolean()) {
resetButton.setY(y); resetButton.setY(y);
resetButton.render(context, mouseX, mouseY, tickDelta); resetButton.render(context, mouseX, mouseY, tickDelta);