From 7806fd4209db6ca3dba645db1b189c90d9234dbd Mon Sep 17 00:00:00 2001 From: Frank Date: Fri, 15 Jul 2022 00:57:21 +0200 Subject: [PATCH] Added Button renderer --- .../betterx/ui/layout/components/Button.java | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 src/main/java/org/betterx/ui/layout/components/Button.java diff --git a/src/main/java/org/betterx/ui/layout/components/Button.java b/src/main/java/org/betterx/ui/layout/components/Button.java new file mode 100644 index 00000000..14a7c5a0 --- /dev/null +++ b/src/main/java/org/betterx/ui/layout/components/Button.java @@ -0,0 +1,94 @@ +package org.betterx.ui.layout.components; + +import org.betterx.ui.layout.components.input.MouseEvent; +import org.betterx.ui.layout.components.render.ComponentRenderer; +import org.betterx.ui.layout.values.DynamicSize; +import org.betterx.ui.layout.values.Rectangle; + +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; + +class ButtonRenderer implements ComponentRenderer { + Button linkedButton; + + 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 + 12; + } + + @Override + public void renderInBounds(PoseStack poseStack, Rectangle bounds, Rectangle clipRect) { + if (linkedButton != null) { + if (linkedButton.vanillaButton != null) { + linkedButton.vanillaButton.render(poseStack, linkedButton.mouseX, linkedButton.mouseY, 1); + } + + } + } +} + +public class Button extends Component { + int mouseX, mouseY; + final net.minecraft.network.chat.Component component; + final net.minecraft.client.gui.components.Button.OnPress onPress; + final net.minecraft.client.gui.components.Button.OnTooltip onTooltip; + net.minecraft.client.gui.components.Button vanillaButton; + + public Button( + DynamicSize width, + DynamicSize height, + net.minecraft.network.chat.Component component, + net.minecraft.client.gui.components.Button.OnPress onPress, + net.minecraft.client.gui.components.Button.OnTooltip onTooltip + ) { + super(width, height, new ButtonRenderer()); + renderer.linkedButton = this; + + this.component = component; + this.onPress = onPress; + this.onTooltip = onTooltip; + } + + @Override + public boolean onMouseEvent(MouseEvent event, int x, int y) { + mouseX = x; + mouseY = y; + if (vanillaButton != null && relativeBounds.contains(x, y)) { + + + return true; + } + return super.onMouseEvent(event, x, y); + } + + @Override + protected void onBoundsChanged() { + vanillaButton = new net.minecraft.client.gui.components.Button( + 0, + 0, + relativeBounds.width, + relativeBounds.height, + component, + onPress, + onTooltip + ); + } + + @Override + public int getContentWidth() { + return renderer.getWidth(component); + } + + @Override + public int getContentHeight() { + return renderer.getHeight(component); + } +}