Simple Text Component
This commit is contained in:
parent
c5ecd19823
commit
472aa16967
4 changed files with 69 additions and 21 deletions
|
@ -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"),
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue