Simple Text Component

This commit is contained in:
Frank 2022-07-15 13:36:00 +02:00
parent c5ecd19823
commit 472aa16967
4 changed files with 69 additions and 21 deletions

View file

@ -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"),

View file

@ -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<C extends AbstractWidget, V extends AbstractVanillaComponent<C, V>> implements ComponentRenderer {
public class AbstractVanillaComponentRenderer<C extends AbstractWidget, V extends AbstractVanillaComponent<C, V>> 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;
}

View file

@ -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<Text.TextRenderer> {
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);
}
}
}
}

View file

@ -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;
}
}