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 singleHeaderWidth = MathHelper.roundUpToMultiple(headerWidth / categories.size(), 2);
int singleTextWidth = singleHeaderWidth - 2;
TextRenderer tr = MinecraftClient.getInstance().textRenderer;
for (ConfigCategory category : categories) {
if (tr.getWidth(getTitle(category.getTranslationPrefix())) > singleTextWidth) return true;
if (textRenderer.getWidth(getTitle(category.getTranslationPrefix())) > singleTextWidth) return true;
}
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) {
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) {
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) {
@ -43,7 +43,7 @@ public class EntryListWidget extends ElementListWidget<EntryListWidget.ConfigEnt
}
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
@ -100,27 +100,22 @@ public class EntryListWidget extends ElementListWidget<EntryListWidget.ConfigEnt
private int width;
private final OrderedText text;
private final TextRenderer renderer;
private final ConfigTextEntry next;
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.text = text;
this.renderer = renderer;
this.next = next;
}
public static List<ConfigTextEntry> create(EntryListWidget parent, StringVisitable text, int width) {
TextRenderer renderer = MinecraftClient.getInstance().textRenderer;
public static List<ConfigTextEntry> create(TextRenderer renderer, EntryListWidget parent, StringVisitable text, int width) {
List<ConfigTextEntry> entries = new ArrayList<>();
ConfigTextEntry next = null;
List<OrderedText> wrappedLines = new ArrayList<>(renderer.wrapLines(text, width));
Collections.reverse(wrappedLines);
for (OrderedText line : wrappedLines) {
ConfigTextEntry[] tmp = new ConfigTextEntry[1];
entries.add(next = tmp[0] = parent.new ConfigTextEntry(width, line, renderer, next));
entries.add(parent.new ConfigTextEntry(width, line, renderer));
}
if (!entries.isEmpty()) entries.get(entries.size() - 1).originalText = text;
if (!entries.isEmpty()) entries.getLast().originalText = text;
Collections.reverse(entries);
return entries;
}
@ -150,7 +145,7 @@ public class EntryListWidget extends ElementListWidget<EntryListWidget.ConfigEnt
List<ConfigEntry> children = EntryListWidget.this.children();
int i = children.indexOf(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);
}
} else {
@ -194,19 +189,20 @@ public class EntryListWidget extends ElementListWidget<EntryListWidget.ConfigEnt
@Environment(EnvType.CLIENT)
public static class ConfigScreenEntry extends ConfigEntry {
private static final TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer;
public final ClickableWidget button;
private final BooleanSupplier resetVisible;
private final ClickableWidget resetButton;
private final Text text;
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.resetVisible = resetVisible;
this.resetButton = resetButton;
this.text = text;
this.reflow = reflow;
this.renderer = renderer;
}
@Override
@ -214,7 +210,7 @@ public class EntryListWidget extends ElementListWidget<EntryListWidget.ConfigEnt
super.render(context, index, y, x, entryWidth, entryHeight, mouseX, mouseY, hovered, tickDelta);
button.setY(y);
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()) {
resetButton.setY(y);
resetButton.render(context, mouseX, mouseY, tickDelta);
@ -243,23 +239,24 @@ public class EntryListWidget extends ElementListWidget<EntryListWidget.ConfigEnt
@Environment(EnvType.CLIENT)
public static class ConfigUnknownEntry extends ConfigEntry {
private static final TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer;
private final BooleanSupplier resetVisible;
private final ClickableWidget resetButton;
private final Text text;
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.resetButton = resetButton;
this.text = text;
this.reflow = reflow;
this.renderer = renderer;
}
@Override
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);
context.drawTextWithShadow(textRenderer, text, 12, y + 5, 0xFFFFFF);
context.drawTextWithShadow(renderer, text, 12, y + 5, 0xFFFFFF);
if (resetVisible.getAsBoolean()) {
resetButton.setY(y);
resetButton.render(context, mouseX, mouseY, tickDelta);