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);
|
||||
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"),
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
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