diff --git a/src/main/java/org/betterx/ui/layout/components/AbstractVanillaComponent.java b/src/main/java/org/betterx/ui/layout/components/AbstractVanillaComponent.java index df93dba4..633bd7be 100644 --- a/src/main/java/org/betterx/ui/layout/components/AbstractVanillaComponent.java +++ b/src/main/java/org/betterx/ui/layout/components/AbstractVanillaComponent.java @@ -1,4 +1,153 @@ package org.betterx.ui.layout.components; -public class AbstractVanillaComponent { +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; +import net.minecraft.client.gui.components.AbstractWidget; + +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; + +@Environment(EnvType.CLIENT) +class AbstractVanillaComponentRenderer> implements ComponentRenderer { + 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; + } + + @Override + public void renderInBounds(PoseStack poseStack, int x, int y, float a, Rectangle bounds, Rectangle clipRect) { + if (linkedComponent != null) { + if (linkedComponent.vanillaComponent != null) { + linkedComponent.vanillaComponent.render(poseStack, x, y, a); + } + + } + } +} + +public abstract class AbstractVanillaComponent> extends Component> { + protected C vanillaComponent; + protected final net.minecraft.network.chat.Component component; + + public AbstractVanillaComponent( + DynamicSize width, + DynamicSize height, + AbstractVanillaComponentRenderer renderer, + net.minecraft.network.chat.Component component + ) { + super(width, height, renderer); + this.component = component; + renderer.linkedComponent = (V) this; + } + + protected abstract C createVanillaComponent(); + + @Override + protected void onBoundsChanged() { + vanillaComponent = createVanillaComponent(); + } + + @Override + public int getContentWidth() { + return renderer.getWidth(component); + } + + @Override + public int getContentHeight() { + return renderer.getHeight(component); + } + + @Override + public void mouseMoved(double x, double y) { + if (vanillaComponent != null) + vanillaComponent.mouseMoved(x - relativeBounds.left, y - relativeBounds.top); + } + + @Override + public boolean mouseClicked(double x, double y, int button) { + if (vanillaComponent != null) + return vanillaComponent.mouseClicked(x - relativeBounds.left, y - relativeBounds.top, button); + return false; + } + + @Override + public boolean mouseReleased(double x, double y, int button) { + if (vanillaComponent != null) + return vanillaComponent.mouseReleased(x - relativeBounds.left, y - relativeBounds.top, button); + return false; + } + + @Override + public boolean mouseDragged(double x, double y, int button, double x2, double y2) { + if (vanillaComponent != null) + return vanillaComponent.mouseDragged( + x - relativeBounds.left, + y - relativeBounds.top, + button, + x2 - relativeBounds.left, + y2 - relativeBounds.top + ); + return false; + } + + @Override + public boolean mouseScrolled(double x, double y, double f) { + if (vanillaComponent != null) + return vanillaComponent.mouseScrolled(x - relativeBounds.left, y - relativeBounds.top, f); + return false; + } + + @Override + public boolean keyPressed(int i, int j, int k) { + if (vanillaComponent != null) + return vanillaComponent.keyPressed(i, j, k); + return false; + } + + @Override + public boolean keyReleased(int i, int j, int k) { + if (vanillaComponent != null) + return vanillaComponent.keyReleased(i, j, k); + return false; + } + + @Override + public boolean charTyped(char c, int i) { + if (vanillaComponent != null) + return vanillaComponent.charTyped(c, i); + return false; + } + + @Override + public boolean changeFocus(boolean bl) { + if (vanillaComponent != null) + return vanillaComponent.changeFocus(bl); + return false; + } + + @Override + public boolean isMouseOver(double x, double y) { + if (vanillaComponent != null) + return vanillaComponent.isMouseOver(x, y); + return false; + } + } diff --git a/src/main/java/org/betterx/ui/layout/components/Button.java b/src/main/java/org/betterx/ui/layout/components/Button.java index 0cf99049..98f7a7ca 100644 --- a/src/main/java/org/betterx/ui/layout/components/Button.java +++ b/src/main/java/org/betterx/ui/layout/components/Button.java @@ -1,50 +1,18 @@ package org.betterx.ui.layout.components; -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; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @Environment(EnvType.CLIENT) -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 + 11; - } - - @Override - public void renderInBounds(PoseStack poseStack, int x, int y, float a, Rectangle bounds, Rectangle clipRect) { - if (linkedButton != null) { - if (linkedButton.vanillaButton != null) { - linkedButton.vanillaButton.render(poseStack, x, y, a); - } - - } - } +class ButtonRenderer extends AbstractVanillaComponentRenderer { } @Environment(EnvType.CLIENT) -public class Button extends Component { - int mouseX, mouseY; - final net.minecraft.network.chat.Component component; +public class Button extends AbstractVanillaComponent { 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, @@ -53,17 +21,14 @@ public class Button extends 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; + super(width, height, new ButtonRenderer(), component); this.onPress = onPress; this.onTooltip = onTooltip; } @Override - protected void onBoundsChanged() { - vanillaButton = new net.minecraft.client.gui.components.Button( + protected net.minecraft.client.gui.components.Button createVanillaComponent() { + return new net.minecraft.client.gui.components.Button( 0, 0, relativeBounds.width, @@ -73,92 +38,4 @@ public class Button extends Component { onTooltip ); } - - @Override - public int getContentWidth() { - return renderer.getWidth(component); - } - - @Override - public int getContentHeight() { - return renderer.getHeight(component); - } - - @Override - public void mouseMoved(double x, double y) { - mouseX = (int) x; - mouseY = (int) y; - if (vanillaButton != null) - vanillaButton.mouseMoved(x - relativeBounds.left, y - relativeBounds.top); - } - - @Override - public boolean mouseClicked(double x, double y, int button) { - if (vanillaButton != null) - return vanillaButton.mouseClicked(x - relativeBounds.left, y - relativeBounds.top, button); - return false; - } - - @Override - public boolean mouseReleased(double x, double y, int button) { - if (vanillaButton != null) - return vanillaButton.mouseReleased(x - relativeBounds.left, y - relativeBounds.top, button); - return false; - } - - @Override - public boolean mouseDragged(double x, double y, int button, double x2, double y2) { - if (vanillaButton != null) - return vanillaButton.mouseDragged( - x - relativeBounds.left, - y - relativeBounds.top, - button, - x2 - relativeBounds.left, - y2 - relativeBounds.top - ); - return false; - } - - @Override - public boolean mouseScrolled(double x, double y, double f) { - if (vanillaButton != null) - return vanillaButton.mouseScrolled(x - relativeBounds.left, y - relativeBounds.top, f); - return false; - } - - @Override - public boolean keyPressed(int i, int j, int k) { - if (vanillaButton != null) - return vanillaButton.keyPressed(i, j, k); - return false; - } - - @Override - public boolean keyReleased(int i, int j, int k) { - if (vanillaButton != null) - return vanillaButton.keyReleased(i, j, k); - return false; - } - - @Override - public boolean charTyped(char c, int i) { - if (vanillaButton != null) - return vanillaButton.charTyped(c, i); - return false; - } - - @Override - public boolean changeFocus(boolean bl) { - if (vanillaButton != null) - return vanillaButton.changeFocus(bl); - return false; - } - - @Override - public boolean isMouseOver(double x, double y) { - if (vanillaButton != null) - return vanillaButton.isMouseOver(x, y); - return false; - } - }