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;
|
||||
|
||||
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;
|
||||
|
||||
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<net.minecraft.client.gui.components.Button, Button> {
|
||||
}
|
||||
|
||||
@Environment(EnvType.CLIENT)
|
||||
public class Button extends Component<ButtonRenderer> {
|
||||
int mouseX, mouseY;
|
||||
final net.minecraft.network.chat.Component component;
|
||||
public class Button extends AbstractVanillaComponent<net.minecraft.client.gui.components.Button, Button> {
|
||||
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<ButtonRenderer> {
|
|||
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<ButtonRenderer> {
|
|||
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