Added Checkbox
This commit is contained in:
parent
5637de6ac6
commit
5b4ecbfa3b
5 changed files with 122 additions and 10 deletions
|
@ -44,6 +44,25 @@ public class TestScreen extends Screen {
|
||||||
}
|
}
|
||||||
));
|
));
|
||||||
rows.addSpacer(16);
|
rows.addSpacer(16);
|
||||||
|
Checkbox cb1 = new Checkbox(
|
||||||
|
DynamicSize.fit(), DynamicSize.fit(),
|
||||||
|
Component.literal("Some Sub-State"),
|
||||||
|
false, true,
|
||||||
|
(checkbox, value) -> {
|
||||||
|
System.out.println(value);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
rows.add(new Checkbox(
|
||||||
|
DynamicSize.fit(), DynamicSize.fit(),
|
||||||
|
Component.literal("Some Selectable State"),
|
||||||
|
false, true,
|
||||||
|
(checkbox, value) -> {
|
||||||
|
System.out.println(value);
|
||||||
|
cb1.setEnabled(value);
|
||||||
|
}
|
||||||
|
));
|
||||||
|
rows.add(cb1);
|
||||||
|
rows.addSpacer(16);
|
||||||
rows.add(new Button(
|
rows.add(new Button(
|
||||||
DynamicSize.fit(), DynamicSize.fit(),
|
DynamicSize.fit(), DynamicSize.fit(),
|
||||||
Component.literal("test"),
|
Component.literal("test"),
|
||||||
|
|
|
@ -7,6 +7,8 @@ import net.minecraft.client.gui.components.AbstractWidget;
|
||||||
public abstract class AbstractVanillaComponent<C extends AbstractWidget, V extends AbstractVanillaComponent<C, V>> extends Component<AbstractVanillaComponentRenderer<C, V>> {
|
public abstract class AbstractVanillaComponent<C extends AbstractWidget, V extends AbstractVanillaComponent<C, V>> extends Component<AbstractVanillaComponentRenderer<C, V>> {
|
||||||
protected C vanillaComponent;
|
protected C vanillaComponent;
|
||||||
protected final net.minecraft.network.chat.Component component;
|
protected final net.minecraft.network.chat.Component component;
|
||||||
|
protected float alpha = 1.0f;
|
||||||
|
protected boolean enabled = true;
|
||||||
|
|
||||||
public AbstractVanillaComponent(
|
public AbstractVanillaComponent(
|
||||||
DynamicSize width,
|
DynamicSize width,
|
||||||
|
@ -24,6 +26,7 @@ public abstract class AbstractVanillaComponent<C extends AbstractWidget, V exten
|
||||||
@Override
|
@Override
|
||||||
protected void onBoundsChanged() {
|
protected void onBoundsChanged() {
|
||||||
vanillaComponent = createVanillaComponent();
|
vanillaComponent = createVanillaComponent();
|
||||||
|
vanillaComponent.setAlpha(this.alpha);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected net.minecraft.network.chat.Component contentComponent() {
|
protected net.minecraft.network.chat.Component contentComponent() {
|
||||||
|
@ -40,29 +43,50 @@ public abstract class AbstractVanillaComponent<C extends AbstractWidget, V exten
|
||||||
return renderer.getHeight(contentComponent());
|
return renderer.getHeight(contentComponent());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public float getAlpha() {
|
||||||
|
return alpha;
|
||||||
|
}
|
||||||
|
|
||||||
|
public V setAlpha(float alpha) {
|
||||||
|
this.alpha = alpha;
|
||||||
|
if (vanillaComponent != null) {
|
||||||
|
vanillaComponent.setAlpha(alpha);
|
||||||
|
}
|
||||||
|
return (V) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isEnabled() {
|
||||||
|
return enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public V setEnabled(boolean enabled) {
|
||||||
|
this.enabled = enabled;
|
||||||
|
return (V) this;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mouseMoved(double x, double y) {
|
public void mouseMoved(double x, double y) {
|
||||||
if (vanillaComponent != null)
|
if (vanillaComponent != null && enabled)
|
||||||
vanillaComponent.mouseMoved(x - relativeBounds.left, y - relativeBounds.top);
|
vanillaComponent.mouseMoved(x - relativeBounds.left, y - relativeBounds.top);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean mouseClicked(double x, double y, int button) {
|
public boolean mouseClicked(double x, double y, int button) {
|
||||||
if (vanillaComponent != null)
|
if (vanillaComponent != null && enabled)
|
||||||
return vanillaComponent.mouseClicked(x - relativeBounds.left, y - relativeBounds.top, button);
|
return vanillaComponent.mouseClicked(x - relativeBounds.left, y - relativeBounds.top, button);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean mouseReleased(double x, double y, int button) {
|
public boolean mouseReleased(double x, double y, int button) {
|
||||||
if (vanillaComponent != null)
|
if (vanillaComponent != null && enabled)
|
||||||
return vanillaComponent.mouseReleased(x - relativeBounds.left, y - relativeBounds.top, button);
|
return vanillaComponent.mouseReleased(x - relativeBounds.left, y - relativeBounds.top, button);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean mouseDragged(double x, double y, int button, double x2, double y2) {
|
public boolean mouseDragged(double x, double y, int button, double x2, double y2) {
|
||||||
if (vanillaComponent != null)
|
if (vanillaComponent != null && enabled)
|
||||||
return vanillaComponent.mouseDragged(
|
return vanillaComponent.mouseDragged(
|
||||||
x - relativeBounds.left,
|
x - relativeBounds.left,
|
||||||
y - relativeBounds.top,
|
y - relativeBounds.top,
|
||||||
|
@ -75,42 +99,42 @@ public abstract class AbstractVanillaComponent<C extends AbstractWidget, V exten
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean mouseScrolled(double x, double y, double f) {
|
public boolean mouseScrolled(double x, double y, double f) {
|
||||||
if (vanillaComponent != null)
|
if (vanillaComponent != null && enabled)
|
||||||
return vanillaComponent.mouseScrolled(x - relativeBounds.left, y - relativeBounds.top, f);
|
return vanillaComponent.mouseScrolled(x - relativeBounds.left, y - relativeBounds.top, f);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean keyPressed(int i, int j, int k) {
|
public boolean keyPressed(int i, int j, int k) {
|
||||||
if (vanillaComponent != null)
|
if (vanillaComponent != null && enabled)
|
||||||
return vanillaComponent.keyPressed(i, j, k);
|
return vanillaComponent.keyPressed(i, j, k);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean keyReleased(int i, int j, int k) {
|
public boolean keyReleased(int i, int j, int k) {
|
||||||
if (vanillaComponent != null)
|
if (vanillaComponent != null && enabled)
|
||||||
return vanillaComponent.keyReleased(i, j, k);
|
return vanillaComponent.keyReleased(i, j, k);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean charTyped(char c, int i) {
|
public boolean charTyped(char c, int i) {
|
||||||
if (vanillaComponent != null)
|
if (vanillaComponent != null && enabled)
|
||||||
return vanillaComponent.charTyped(c, i);
|
return vanillaComponent.charTyped(c, i);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean changeFocus(boolean bl) {
|
public boolean changeFocus(boolean bl) {
|
||||||
if (vanillaComponent != null)
|
if (vanillaComponent != null && enabled)
|
||||||
return vanillaComponent.changeFocus(bl);
|
return vanillaComponent.changeFocus(bl);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isMouseOver(double x, double y) {
|
public boolean isMouseOver(double x, double y) {
|
||||||
if (vanillaComponent != null)
|
if (vanillaComponent != null && enabled)
|
||||||
return vanillaComponent.isMouseOver(x, y);
|
return vanillaComponent.isMouseOver(x, y);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,13 @@ public class AbstractVanillaComponentRenderer<C extends AbstractWidget, V extend
|
||||||
public void renderInBounds(PoseStack poseStack, int x, int y, float a, Rectangle bounds, Rectangle clipRect) {
|
public void renderInBounds(PoseStack poseStack, int x, int y, float a, Rectangle bounds, Rectangle clipRect) {
|
||||||
if (linkedComponent != null) {
|
if (linkedComponent != null) {
|
||||||
if (linkedComponent.vanillaComponent != null) {
|
if (linkedComponent.vanillaComponent != null) {
|
||||||
|
if (!linkedComponent.enabled) {
|
||||||
|
linkedComponent.vanillaComponent.setAlpha(linkedComponent.alpha / 2);
|
||||||
|
}
|
||||||
linkedComponent.vanillaComponent.render(poseStack, x, y, a);
|
linkedComponent.vanillaComponent.render(poseStack, x, y, a);
|
||||||
|
if (!linkedComponent.enabled) {
|
||||||
|
linkedComponent.vanillaComponent.setAlpha(linkedComponent.alpha);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
56
src/main/java/org/betterx/ui/layout/components/Checkbox.java
Normal file
56
src/main/java/org/betterx/ui/layout/components/Checkbox.java
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
package org.betterx.ui.layout.components;
|
||||||
|
|
||||||
|
import org.betterx.ui.layout.components.render.CheckboxRenderer;
|
||||||
|
import org.betterx.ui.layout.values.DynamicSize;
|
||||||
|
|
||||||
|
import net.minecraft.network.chat.Component;
|
||||||
|
|
||||||
|
public class Checkbox extends AbstractVanillaComponent<net.minecraft.client.gui.components.Checkbox, Checkbox> {
|
||||||
|
@FunctionalInterface
|
||||||
|
public interface SelectionChanged {
|
||||||
|
void now(net.minecraft.client.gui.components.Checkbox checkBox, boolean selected);
|
||||||
|
}
|
||||||
|
|
||||||
|
private final boolean selected;
|
||||||
|
private final boolean showLabel;
|
||||||
|
|
||||||
|
private final SelectionChanged onSelectionChange;
|
||||||
|
|
||||||
|
public Checkbox(
|
||||||
|
DynamicSize width,
|
||||||
|
DynamicSize height,
|
||||||
|
Component component,
|
||||||
|
boolean selected, boolean showLabel,
|
||||||
|
SelectionChanged onSelectionChange
|
||||||
|
) {
|
||||||
|
super(width, height, new CheckboxRenderer(), component);
|
||||||
|
this.selected = selected;
|
||||||
|
this.showLabel = showLabel;
|
||||||
|
this.onSelectionChange = onSelectionChange;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean selected() {
|
||||||
|
if (vanillaComponent != null) return vanillaComponent.selected();
|
||||||
|
return selected;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected net.minecraft.client.gui.components.Checkbox createVanillaComponent() {
|
||||||
|
net.minecraft.client.gui.components.Checkbox cb = new net.minecraft.client.gui.components.Checkbox(
|
||||||
|
0, 0,
|
||||||
|
relativeBounds.width, relativeBounds.height,
|
||||||
|
component,
|
||||||
|
selected,
|
||||||
|
showLabel
|
||||||
|
) {
|
||||||
|
@Override
|
||||||
|
public void onPress() {
|
||||||
|
super.onPress();
|
||||||
|
onSelectionChange.now(this, this.selected());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
onSelectionChange.now(cb, cb.selected());
|
||||||
|
return cb;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
package org.betterx.ui.layout.components.render;
|
||||||
|
|
||||||
|
import org.betterx.ui.layout.components.AbstractVanillaComponentRenderer;
|
||||||
|
import org.betterx.ui.layout.components.Checkbox;
|
||||||
|
|
||||||
|
public class CheckboxRenderer extends AbstractVanillaComponentRenderer<net.minecraft.client.gui.components.Checkbox, Checkbox> {
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue