From 472aa169673760e6687791abb304e53421564292 Mon Sep 17 00:00:00 2001 From: Frank Date: Fri, 15 Jul 2022 13:36:00 +0200 Subject: [PATCH] Simple Text Component --- .../bclib/client/gui/modmenu/TestScreen.java | 6 +++ .../AbstractVanillaComponentRenderer.java | 17 +------ .../betterx/ui/layout/components/Text.java | 45 ++++++++++++++++--- .../components/render/TextProvider.java | 22 +++++++++ 4 files changed, 69 insertions(+), 21 deletions(-) create mode 100644 src/main/java/org/betterx/ui/layout/components/render/TextProvider.java diff --git a/src/main/java/org/betterx/bclib/client/gui/modmenu/TestScreen.java b/src/main/java/org/betterx/bclib/client/gui/modmenu/TestScreen.java index b13b7801..48e1b225 100644 --- a/src/main/java/org/betterx/bclib/client/gui/modmenu/TestScreen.java +++ b/src/main/java/org/betterx/bclib/client/gui/modmenu/TestScreen.java @@ -25,6 +25,12 @@ public class TestScreen extends Screen { VerticalStack rows = new VerticalStack(DynamicSize.fit(), DynamicSize.relative(1)); rows.addFiller(); + rows.add(new Text( + DynamicSize.fitOrFill(), DynamicSize.fit(), + Component.literal("Some Text") + ).centerHorizontal() + ); + rows.addSpacer(16); rows.add(new Range<>( DynamicSize.fill(), DynamicSize.fit(), Component.literal("Integer"), diff --git a/src/main/java/org/betterx/ui/layout/components/AbstractVanillaComponentRenderer.java b/src/main/java/org/betterx/ui/layout/components/AbstractVanillaComponentRenderer.java index d693f2f0..25adbaf7 100644 --- a/src/main/java/org/betterx/ui/layout/components/AbstractVanillaComponentRenderer.java +++ b/src/main/java/org/betterx/ui/layout/components/AbstractVanillaComponentRenderer.java @@ -1,32 +1,19 @@ package org.betterx.ui.layout.components; import org.betterx.ui.layout.components.render.ComponentRenderer; +import org.betterx.ui.layout.components.render.TextProvider; import org.betterx.ui.layout.values.Rectangle; import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Font; import net.minecraft.client.gui.components.AbstractWidget; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @Environment(EnvType.CLIENT) -public class AbstractVanillaComponentRenderer> implements ComponentRenderer { +public class AbstractVanillaComponentRenderer> implements ComponentRenderer, TextProvider { V linkedComponent; - public Font getFont() { - return Minecraft.getInstance().font; - } - - public int getWidth(net.minecraft.network.chat.Component c) { - return getFont().width(c.getVisualOrderText()) + 24; - } - - public int getHeight(net.minecraft.network.chat.Component c) { - return getFont().lineHeight + 11; - } - protected V getLinkedComponent() { return linkedComponent; } diff --git a/src/main/java/org/betterx/ui/layout/components/Text.java b/src/main/java/org/betterx/ui/layout/components/Text.java index 65cafc80..e76a4078 100644 --- a/src/main/java/org/betterx/ui/layout/components/Text.java +++ b/src/main/java/org/betterx/ui/layout/components/Text.java @@ -1,36 +1,69 @@ package org.betterx.ui.layout.components; import org.betterx.ui.layout.components.render.ComponentRenderer; +import org.betterx.ui.layout.components.render.TextProvider; +import org.betterx.ui.layout.values.Alignment; import org.betterx.ui.layout.values.DynamicSize; import org.betterx.ui.layout.values.Rectangle; import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.gui.GuiComponent; public class Text extends Component { + final net.minecraft.network.chat.Component text; + int color = 0xA0A0A0; + public Text( DynamicSize width, - DynamicSize height + DynamicSize height, + net.minecraft.network.chat.Component text + ) { super(width, height, new TextRenderer()); + vAlign = Alignment.CENTER; renderer.linkedComponent = this; + this.text = text; + } + + public Text setColor(int cl) { + this.color = cl; + return this; } @Override public int getContentWidth() { - return 0; + return renderer.getWidth(text); } @Override public int getContentHeight() { - return 0; + return renderer.getHeight(text); } - public static class TextRenderer implements ComponentRenderer { + public static class TextRenderer implements ComponentRenderer, TextProvider { Text linkedComponent; @Override - public void renderInBounds(PoseStack stack, int x, int y, float a, Rectangle bounds, Rectangle clipRect) { - + public int getWidth(net.minecraft.network.chat.Component c) { + return getFont().width(c.getVisualOrderText()); } + + + @Override + public void renderInBounds(PoseStack stack, int x, int y, float a, Rectangle bounds, Rectangle clipRect) { + if (linkedComponent != null) { + int left = bounds.width - getWidth(linkedComponent.text); + if (linkedComponent.hAlign == Alignment.MIN) left = 0; + if (linkedComponent.hAlign == Alignment.CENTER) left /= 2; + + int top = bounds.height - getLineHeight(linkedComponent.text); + if (linkedComponent.vAlign == Alignment.MIN) top = 0; + if (linkedComponent.vAlign == Alignment.CENTER) top /= 2; + + GuiComponent.drawString(stack, getFont(), linkedComponent.text, left, top, linkedComponent.color); + } + } + + } } diff --git a/src/main/java/org/betterx/ui/layout/components/render/TextProvider.java b/src/main/java/org/betterx/ui/layout/components/render/TextProvider.java new file mode 100644 index 00000000..95a22c93 --- /dev/null +++ b/src/main/java/org/betterx/ui/layout/components/render/TextProvider.java @@ -0,0 +1,22 @@ +package org.betterx.ui.layout.components.render; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; + +public interface TextProvider { + default Font getFont() { + return Minecraft.getInstance().font; + } + + default int getWidth(net.minecraft.network.chat.Component c) { + return getFont().width(c.getVisualOrderText()) + 24; + } + + default int getLineHeight(net.minecraft.network.chat.Component c) { + return getFont().lineHeight; + } + + default int getHeight(net.minecraft.network.chat.Component c) { + return getLineHeight(c) + 11; + } +}