[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;
|
||||
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);
|
||||
}
|
||||
}
|
||||
// @Override
|
||||
|
||||
@Override
|
||||
public boolean isMouseOver(double x, double y) {
|
||||
return bounds.contains(x, y);
|
||||
}
|
||||
|
||||
// @Override
|
||||
// public void mouseMoved(double x, double y) {
|
||||
// if (child != null)
|
||||
// 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>> {
|
||||
protected LayoutComponent<?, ?> child;
|
||||
protected final RS scrollerRenderer;
|
||||
protected Rectangle viewBounds;
|
||||
|
||||
protected int dist;
|
||||
protected int scrollerY;
|
||||
|
@ -176,7 +177,7 @@ public class VerticalScroll<R extends ComponentRenderer, RS extends ScrollerRend
|
|||
@Override
|
||||
public void mouseMoved(double x, double y) {
|
||||
if (child != null && relativeBounds.contains(x, y))
|
||||
child.mouseMoved(x, y);
|
||||
child.mouseMoved(x - relativeBounds.left, y - relativeBounds.top - scrollerOffset());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -191,7 +192,7 @@ public class VerticalScroll<R extends ComponentRenderer, RS extends ScrollerRend
|
|||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -199,7 +200,7 @@ public class VerticalScroll<R extends ComponentRenderer, RS extends ScrollerRend
|
|||
public boolean mouseReleased(double x, double y, int button) {
|
||||
mouseDown = false;
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -211,14 +212,20 @@ public class VerticalScroll<R extends ComponentRenderer, RS extends ScrollerRend
|
|||
return true;
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseScrolled(double x, double y, double f) {
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -252,8 +259,6 @@ public class VerticalScroll<R extends ComponentRenderer, RS extends ScrollerRend
|
|||
|
||||
@Override
|
||||
public boolean isMouseOver(double x, double y) {
|
||||
if (child != null)
|
||||
return child.isMouseOver(x, y);
|
||||
return false;
|
||||
return relativeBounds.contains(x, y);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue