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)); VerticalStack rows = new VerticalStack(DynamicSize.fit(), DynamicSize.relative(1));
rows.addFiller(); rows.addFiller();
rows.add(new Text(
DynamicSize.fitOrFill(), DynamicSize.fit(),
Component.literal("Some Text")
).centerHorizontal()
);
rows.addSpacer(16);
rows.add(new Range<>( rows.add(new Range<>(
DynamicSize.fill(), DynamicSize.fit(), DynamicSize.fill(), DynamicSize.fit(),
Component.literal("Integer"), Component.literal("Integer"),

View file

@ -1,32 +1,19 @@
package org.betterx.ui.layout.components; package org.betterx.ui.layout.components;
import org.betterx.ui.layout.components.render.ComponentRenderer; import org.betterx.ui.layout.components.render.ComponentRenderer;
import org.betterx.ui.layout.components.render.TextProvider;
import org.betterx.ui.layout.values.Rectangle; import org.betterx.ui.layout.values.Rectangle;
import com.mojang.blaze3d.vertex.PoseStack; 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.minecraft.client.gui.components.AbstractWidget;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment; import net.fabricmc.api.Environment;
@Environment(EnvType.CLIENT) @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; 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() { protected V getLinkedComponent() {
return linkedComponent; return linkedComponent;
} }

View file

@ -1,36 +1,69 @@
package org.betterx.ui.layout.components; package org.betterx.ui.layout.components;
import org.betterx.ui.layout.components.render.ComponentRenderer; 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.DynamicSize;
import org.betterx.ui.layout.values.Rectangle; import org.betterx.ui.layout.values.Rectangle;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.gui.GuiComponent;
public class Text extends Component<Text.TextRenderer> { public class Text extends Component<Text.TextRenderer> {
final net.minecraft.network.chat.Component text;
int color = 0xA0A0A0;
public Text( public Text(
DynamicSize width, DynamicSize width,
DynamicSize height DynamicSize height,
net.minecraft.network.chat.Component text
) { ) {
super(width, height, new TextRenderer()); super(width, height, new TextRenderer());
vAlign = Alignment.CENTER;
renderer.linkedComponent = this; renderer.linkedComponent = this;
this.text = text;
}
public Text setColor(int cl) {
this.color = cl;
return this;
} }
@Override @Override
public int getContentWidth() { public int getContentWidth() {
return 0; return renderer.getWidth(text);
} }
@Override @Override
public int getContentHeight() { public int getContentHeight() {
return 0; return renderer.getHeight(text);
} }
public static class TextRenderer implements ComponentRenderer { public static class TextRenderer implements ComponentRenderer, TextProvider {
Text linkedComponent; Text linkedComponent;
@Override @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;
}
}