Added Checkbox

This commit is contained in:
Frank 2022-07-15 11:25:35 +02:00
parent 5637de6ac6
commit 5b4ecbfa3b
5 changed files with 122 additions and 10 deletions

View file

@ -44,6 +44,25 @@ public class TestScreen extends Screen {
}
));
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(
DynamicSize.fit(), DynamicSize.fit(),
Component.literal("test"),

View file

@ -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>> {
protected C vanillaComponent;
protected final net.minecraft.network.chat.Component component;
protected float alpha = 1.0f;
protected boolean enabled = true;
public AbstractVanillaComponent(
DynamicSize width,
@ -24,6 +26,7 @@ public abstract class AbstractVanillaComponent<C extends AbstractWidget, V exten
@Override
protected void onBoundsChanged() {
vanillaComponent = createVanillaComponent();
vanillaComponent.setAlpha(this.alpha);
}
protected net.minecraft.network.chat.Component contentComponent() {
@ -40,29 +43,50 @@ public abstract class AbstractVanillaComponent<C extends AbstractWidget, V exten
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
public void mouseMoved(double x, double y) {
if (vanillaComponent != null)
if (vanillaComponent != null && enabled)
vanillaComponent.mouseMoved(x - relativeBounds.left, y - relativeBounds.top);
}
@Override
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 false;
}
@Override
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 false;
}
@Override
public boolean mouseDragged(double x, double y, int button, double x2, double y2) {
if (vanillaComponent != null)
if (vanillaComponent != null && enabled)
return vanillaComponent.mouseDragged(
x - relativeBounds.left,
y - relativeBounds.top,
@ -75,42 +99,42 @@ public abstract class AbstractVanillaComponent<C extends AbstractWidget, V exten
@Override
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 false;
}
@Override
public boolean keyPressed(int i, int j, int k) {
if (vanillaComponent != null)
if (vanillaComponent != null && enabled)
return vanillaComponent.keyPressed(i, j, k);
return false;
}
@Override
public boolean keyReleased(int i, int j, int k) {
if (vanillaComponent != null)
if (vanillaComponent != null && enabled)
return vanillaComponent.keyReleased(i, j, k);
return false;
}
@Override
public boolean charTyped(char c, int i) {
if (vanillaComponent != null)
if (vanillaComponent != null && enabled)
return vanillaComponent.charTyped(c, i);
return false;
}
@Override
public boolean changeFocus(boolean bl) {
if (vanillaComponent != null)
if (vanillaComponent != null && enabled)
return vanillaComponent.changeFocus(bl);
return false;
}
@Override
public boolean isMouseOver(double x, double y) {
if (vanillaComponent != null)
if (vanillaComponent != null && enabled)
return vanillaComponent.isMouseOver(x, y);
return false;
}

View file

@ -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) {
if (linkedComponent != null) {
if (linkedComponent.vanillaComponent != null) {
if (!linkedComponent.enabled) {
linkedComponent.vanillaComponent.setAlpha(linkedComponent.alpha / 2);
}
linkedComponent.vanillaComponent.render(poseStack, x, y, a);
if (!linkedComponent.enabled) {
linkedComponent.vanillaComponent.setAlpha(linkedComponent.alpha);
}
}
}

View 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;
}
}

View file

@ -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> {
}