Common class for Vanilla Components
This commit is contained in:
parent
43324ba5e9
commit
170b3e5096
2 changed files with 155 additions and 129 deletions
|
@ -1,4 +1,153 @@
|
||||||
package org.betterx.ui.layout.components;
|
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<C extends AbstractWidget, V extends AbstractVanillaComponent<C, V>> 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<C extends AbstractWidget, V extends AbstractVanillaComponent<C, V>> extends Component<AbstractVanillaComponentRenderer<C, V>> {
|
||||||
|
protected C vanillaComponent;
|
||||||
|
protected final net.minecraft.network.chat.Component component;
|
||||||
|
|
||||||
|
public AbstractVanillaComponent(
|
||||||
|
DynamicSize width,
|
||||||
|
DynamicSize height,
|
||||||
|
AbstractVanillaComponentRenderer<C, V> 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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,50 +1,18 @@
|
||||||
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.values.DynamicSize;
|
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.EnvType;
|
||||||
import net.fabricmc.api.Environment;
|
import net.fabricmc.api.Environment;
|
||||||
|
|
||||||
@Environment(EnvType.CLIENT)
|
@Environment(EnvType.CLIENT)
|
||||||
class ButtonRenderer implements ComponentRenderer {
|
class ButtonRenderer extends AbstractVanillaComponentRenderer<net.minecraft.client.gui.components.Button, Button> {
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Environment(EnvType.CLIENT)
|
@Environment(EnvType.CLIENT)
|
||||||
public class Button extends Component<ButtonRenderer> {
|
public class Button extends AbstractVanillaComponent<net.minecraft.client.gui.components.Button, Button> {
|
||||||
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.OnPress onPress;
|
||||||
final net.minecraft.client.gui.components.Button.OnTooltip onTooltip;
|
final net.minecraft.client.gui.components.Button.OnTooltip onTooltip;
|
||||||
net.minecraft.client.gui.components.Button vanillaButton;
|
|
||||||
|
|
||||||
public Button(
|
public Button(
|
||||||
DynamicSize width,
|
DynamicSize width,
|
||||||
|
@ -53,17 +21,14 @@ public class Button extends Component<ButtonRenderer> {
|
||||||
net.minecraft.client.gui.components.Button.OnPress onPress,
|
net.minecraft.client.gui.components.Button.OnPress onPress,
|
||||||
net.minecraft.client.gui.components.Button.OnTooltip onTooltip
|
net.minecraft.client.gui.components.Button.OnTooltip onTooltip
|
||||||
) {
|
) {
|
||||||
super(width, height, new ButtonRenderer());
|
super(width, height, new ButtonRenderer(), component);
|
||||||
renderer.linkedButton = this;
|
|
||||||
|
|
||||||
this.component = component;
|
|
||||||
this.onPress = onPress;
|
this.onPress = onPress;
|
||||||
this.onTooltip = onTooltip;
|
this.onTooltip = onTooltip;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onBoundsChanged() {
|
protected net.minecraft.client.gui.components.Button createVanillaComponent() {
|
||||||
vanillaButton = new net.minecraft.client.gui.components.Button(
|
return new net.minecraft.client.gui.components.Button(
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
relativeBounds.width,
|
relativeBounds.width,
|
||||||
|
@ -73,92 +38,4 @@ public class Button extends Component<ButtonRenderer> {
|
||||||
onTooltip
|
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue