[Fix] Mouse Coordinates did not propagate correct

This commit is contained in:
Frank 2022-07-19 15:03:32 +02:00
parent a30e2ccd21
commit cee7a6daa5
4 changed files with 106 additions and 9 deletions

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

View file

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

View file

@ -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);

View file

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