[Fix] Mouse Coordinates did not propagate correct
This commit is contained in:
parent
a30e2ccd21
commit
cee7a6daa5
4 changed files with 106 additions and 9 deletions
81
src/main/java/org/betterx/ui/layout/components/Input.java
Normal file
81
src/main/java/org/betterx/ui/layout/components/Input.java
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
package org.betterx.ui.layout.components;
|
||||||
|
|
||||||
|
import org.betterx.ui.layout.components.render.EditBoxRenderer;
|
||||||
|
import org.betterx.ui.layout.values.Value;
|
||||||
|
|
||||||
|
import net.minecraft.client.gui.components.EditBox;
|
||||||
|
import net.minecraft.network.chat.Component;
|
||||||
|
import net.minecraft.util.FormattedCharSequence;
|
||||||
|
|
||||||
|
import net.fabricmc.api.EnvType;
|
||||||
|
import net.fabricmc.api.Environment;
|
||||||
|
|
||||||
|
import java.util.function.BiFunction;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
|
@Environment(EnvType.CLIENT)
|
||||||
|
public class Input extends AbstractVanillaComponent<EditBox, Input> {
|
||||||
|
private Consumer<String> responder;
|
||||||
|
private BiFunction<String, Integer, FormattedCharSequence> formatter;
|
||||||
|
private Predicate<String> filter;
|
||||||
|
private String initialValue = "";
|
||||||
|
|
||||||
|
public Input(
|
||||||
|
Value width,
|
||||||
|
Value height,
|
||||||
|
Component component,
|
||||||
|
String initialValue
|
||||||
|
) {
|
||||||
|
super(width, height, new EditBoxRenderer(), component);
|
||||||
|
this.initialValue = initialValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected EditBox createVanillaComponent() {
|
||||||
|
EditBox eb = new EditBox(renderer.getFont(),
|
||||||
|
0, 0,
|
||||||
|
relativeBounds.width, relativeBounds.height,
|
||||||
|
null,
|
||||||
|
component
|
||||||
|
);
|
||||||
|
if (responder != null) eb.setResponder(responder);
|
||||||
|
if (filter != null) eb.setFilter(filter);
|
||||||
|
if (formatter != null) eb.setFormatter(formatter);
|
||||||
|
eb.setValue(initialValue);
|
||||||
|
eb.setBordered(true);
|
||||||
|
eb.setEditable(true);
|
||||||
|
|
||||||
|
return eb;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Input setResponder(Consumer<String> consumer) {
|
||||||
|
this.responder = consumer;
|
||||||
|
if (vanillaComponent != null) vanillaComponent.setResponder(responder);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Input setFormatter(BiFunction<String, Integer, FormattedCharSequence> formatter) {
|
||||||
|
this.formatter = formatter;
|
||||||
|
if (vanillaComponent != null) vanillaComponent.setFormatter(formatter);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Input setFilter(Predicate<String> filter) {
|
||||||
|
this.filter = filter;
|
||||||
|
if (vanillaComponent != null) vanillaComponent.setFilter(filter);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getValue() {
|
||||||
|
if (vanillaComponent != null) return vanillaComponent.getValue();
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
public Input setValue(String value) {
|
||||||
|
if (vanillaComponent != null) vanillaComponent.setValue(value);
|
||||||
|
else initialValue = value;
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
|
@ -160,4 +160,9 @@ public abstract class LayoutComponent<R extends ComponentRenderer, L extends Lay
|
||||||
debugName = d;
|
debugName = d;
|
||||||
return (L) this;
|
return (L) this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isMouseOver(double d, double e) {
|
||||||
|
return relativeBounds.contains(d, e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -99,7 +99,13 @@ public class Panel implements ComponentWithBounds, RelativeContainerEventHandler
|
||||||
child.render(poseStack, mouseX - bounds.left, mouseY - bounds.top, deltaTicks, bounds, bounds);
|
child.render(poseStack, mouseX - bounds.left, mouseY - bounds.top, deltaTicks, bounds, bounds);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// @Override
|
|
||||||
|
@Override
|
||||||
|
public boolean isMouseOver(double x, double y) {
|
||||||
|
return bounds.contains(x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
// @Override
|
||||||
// public void mouseMoved(double x, double y) {
|
// public void mouseMoved(double x, double y) {
|
||||||
// if (child != null)
|
// if (child != null)
|
||||||
// child.mouseMoved(x - bounds.left, y - bounds.top);
|
// child.mouseMoved(x - bounds.left, y - bounds.top);
|
||||||
|
|
|
@ -17,6 +17,7 @@ import net.fabricmc.api.Environment;
|
||||||
public class VerticalScroll<R extends ComponentRenderer, RS extends ScrollerRenderer> extends LayoutComponent<R, VerticalScroll<R, RS>> {
|
public class VerticalScroll<R extends ComponentRenderer, RS extends ScrollerRenderer> extends LayoutComponent<R, VerticalScroll<R, RS>> {
|
||||||
protected LayoutComponent<?, ?> child;
|
protected LayoutComponent<?, ?> child;
|
||||||
protected final RS scrollerRenderer;
|
protected final RS scrollerRenderer;
|
||||||
|
protected Rectangle viewBounds;
|
||||||
|
|
||||||
protected int dist;
|
protected int dist;
|
||||||
protected int scrollerY;
|
protected int scrollerY;
|
||||||
|
@ -176,7 +177,7 @@ public class VerticalScroll<R extends ComponentRenderer, RS extends ScrollerRend
|
||||||
@Override
|
@Override
|
||||||
public void mouseMoved(double x, double y) {
|
public void mouseMoved(double x, double y) {
|
||||||
if (child != null && relativeBounds.contains(x, y))
|
if (child != null && relativeBounds.contains(x, y))
|
||||||
child.mouseMoved(x, y);
|
child.mouseMoved(x - relativeBounds.left, y - relativeBounds.top - scrollerOffset());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -191,7 +192,7 @@ public class VerticalScroll<R extends ComponentRenderer, RS extends ScrollerRend
|
||||||
}
|
}
|
||||||
|
|
||||||
if (child != null && relativeBounds.contains(x, y))
|
if (child != null && relativeBounds.contains(x, y))
|
||||||
return child.mouseClicked(x, y, button);
|
return child.mouseClicked(x - relativeBounds.left, y - relativeBounds.top - scrollerOffset(), button);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -199,7 +200,7 @@ public class VerticalScroll<R extends ComponentRenderer, RS extends ScrollerRend
|
||||||
public boolean mouseReleased(double x, double y, int button) {
|
public boolean mouseReleased(double x, double y, int button) {
|
||||||
mouseDown = false;
|
mouseDown = false;
|
||||||
if (child != null && relativeBounds.contains(x, y))
|
if (child != null && relativeBounds.contains(x, y))
|
||||||
return child.mouseReleased(x - relativeBounds.left, y - relativeBounds.top, button);
|
return child.mouseReleased(x - relativeBounds.left, y - relativeBounds.top - scrollerOffset(), button);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -211,14 +212,20 @@ public class VerticalScroll<R extends ComponentRenderer, RS extends ScrollerRend
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (child != null && relativeBounds.contains(x, y))
|
if (child != null && relativeBounds.contains(x, y))
|
||||||
return child.mouseDragged(x, y, button, x2, y2);
|
return child.mouseDragged(
|
||||||
|
x - relativeBounds.left,
|
||||||
|
y - relativeBounds.top - scrollerOffset(),
|
||||||
|
button,
|
||||||
|
x2,
|
||||||
|
y2
|
||||||
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean mouseScrolled(double x, double y, double f) {
|
public boolean mouseScrolled(double x, double y, double f) {
|
||||||
if (child != null && relativeBounds.contains(x, y))
|
if (child != null && relativeBounds.contains(x, y))
|
||||||
return child.mouseScrolled(x, y, f);
|
return child.mouseScrolled(x - relativeBounds.left, y - relativeBounds.top - scrollerOffset(), f);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -252,8 +259,6 @@ public class VerticalScroll<R extends ComponentRenderer, RS extends ScrollerRend
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isMouseOver(double x, double y) {
|
public boolean isMouseOver(double x, double y) {
|
||||||
if (child != null)
|
return relativeBounds.contains(x, y);
|
||||||
return child.isMouseOver(x, y);
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue