[Fix] Hover did no longer change

This commit is contained in:
Frank 2022-07-19 18:06:19 +02:00
parent 0a940d3e20
commit 8c0372e4bc
9 changed files with 96 additions and 28 deletions

View file

@ -39,4 +39,9 @@ public class ColorPicker extends HorizontalStack {
public int getContentHeight() {
return Math.max(swatch.getContentHeight(), input.getContentHeight());
}
@Override
public boolean changeFocus(boolean bl) {
return input.changeFocus(bl);
}
}

View file

@ -24,4 +24,9 @@ public class Empty extends LayoutComponent<NullRenderer, Empty> {
public int getContentHeight() {
return 0;
}
@Override
public boolean isMouseOver(double d, double e) {
return false;
}
}

View file

@ -112,4 +112,9 @@ public class Image extends CustomRenderComponent {
size.height()
);
}
@Override
public boolean isMouseOver(double d, double e) {
return false;
}
}

View file

@ -83,4 +83,9 @@ public class Input extends AbstractVanillaComponent<EditBox, Input> {
protected Component contentComponent() {
return Component.literal(initialValue + "..");
}
@Override
public boolean changeFocus(boolean bl) {
return super.changeFocus(bl);
}
}

View file

@ -97,4 +97,9 @@ public class MultiLineText extends LayoutComponent<MultiLineText.MultiLineTextRe
}
}
}
@Override
public boolean isMouseOver(double d, double e) {
return false;
}
}

View file

@ -102,6 +102,10 @@ public class Panel implements ComponentWithBounds, RelativeContainerEventHandler
@Override
public boolean isMouseOver(double x, double y) {
if (child != null) {
if (child.isMouseOver(x - bounds.left, y - bounds.top))
return true;
}
return bounds.contains(x, y);
}

View file

@ -74,7 +74,10 @@ public class Text extends LayoutComponent<Text.TextRenderer, Text> {
GuiComponent.drawString(stack, getFont(), linkedComponent.text, left, top, linkedComponent.color);
}
}
}
@Override
public boolean isMouseOver(double d, double e) {
return false;
}
}

View file

@ -9,12 +9,17 @@ import org.betterx.ui.layout.values.Value;
import org.betterx.ui.vanilla.VanillaScrollerRenderer;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.gui.components.events.ContainerEventHandler;
import net.minecraft.client.gui.components.events.GuiEventListener;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import java.util.List;
import org.jetbrains.annotations.Nullable;
@Environment(EnvType.CLIENT)
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>> implements ContainerEventHandler {
protected LayoutComponent<?, ?> child;
protected final RS scrollerRenderer;
protected Rectangle viewBounds;
@ -53,8 +58,11 @@ public class VerticalScroll<R extends ComponentRenderer, RS extends ScrollerRend
return res;
}
List<LayoutComponent<?, ?>> children = List.of();
public void setChild(LayoutComponent<?, ?> c) {
this.child = c;
children = List.of(child);
}
@Override
@ -132,7 +140,7 @@ public class VerticalScroll<R extends ComponentRenderer, RS extends ScrollerRend
poseStack.translate(0, scrollerOffset(), 0);
setClippingRect(clipRect);
child.render(
poseStack, mouseX, mouseY, deltaTicks,
poseStack, mouseX, mouseY - scrollerOffset(), deltaTicks,
renderBounds.movedBy(0, scrollerOffset(), scrollerWidth(), 0),
clipRect
);
@ -177,7 +185,12 @@ 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 - relativeBounds.left, y - relativeBounds.top - scrollerOffset());
ContainerEventHandler.super.mouseMoved(x - relativeBounds.left, y - relativeBounds.top - scrollerOffset());
}
@Override
public List<? extends GuiEventListener> children() {
return children;
}
@Override
@ -192,7 +205,11 @@ public class VerticalScroll<R extends ComponentRenderer, RS extends ScrollerRend
}
if (child != null && relativeBounds.contains(x, y))
return child.mouseClicked(x - relativeBounds.left, y - relativeBounds.top - scrollerOffset(), button);
return ContainerEventHandler.super.mouseClicked(
x - relativeBounds.left,
y - relativeBounds.top - scrollerOffset(),
button
);
return false;
}
@ -200,7 +217,11 @@ 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 - scrollerOffset(), button);
return ContainerEventHandler.super.mouseReleased(
x - relativeBounds.left,
y - relativeBounds.top - scrollerOffset(),
button
);
return false;
}
@ -212,7 +233,7 @@ public class VerticalScroll<R extends ComponentRenderer, RS extends ScrollerRend
return true;
}
if (child != null && relativeBounds.contains(x, y))
return child.mouseDragged(
return ContainerEventHandler.super.mouseDragged(
x - relativeBounds.left,
y - relativeBounds.top - scrollerOffset(),
button,
@ -227,7 +248,11 @@ public class VerticalScroll<R extends ComponentRenderer, RS extends ScrollerRend
public boolean mouseScrolled(double x, double y, double delta) {
boolean didCapture = false;
if (child != null && relativeBounds.contains(x, y)) {
didCapture = child.mouseScrolled(x - relativeBounds.left, y - relativeBounds.top - scrollerOffset(), delta);
didCapture = ContainerEventHandler.super.mouseScrolled(
x - relativeBounds.left,
y - relativeBounds.top - scrollerOffset(),
delta
);
}
if (!didCapture) {
scrollerY = scrollerY + delta;
@ -236,36 +261,37 @@ public class VerticalScroll<R extends ComponentRenderer, RS extends ScrollerRend
return false;
}
@Override
public boolean keyPressed(int i, int j, int k) {
if (child != null)
return child.keyPressed(i, j, k);
return false;
GuiEventListener focused;
@Nullable
public GuiEventListener getFocused() {
return focused;
}
@Override
public boolean keyReleased(int i, int j, int k) {
if (child != null)
return child.keyReleased(i, j, k);
return false;
public void setFocused(@Nullable GuiEventListener guiEventListener) {
focused = guiEventListener;
}
@Override
public boolean charTyped(char c, int i) {
if (child != null)
return child.charTyped(c, i);
return false;
boolean dragging;
public boolean isDragging() {
return this.dragging;
}
@Override
public boolean changeFocus(boolean bl) {
if (child != null)
return child.changeFocus(bl);
return false;
public void setDragging(boolean bl) {
dragging = bl;
}
@Override
public boolean isMouseOver(double x, double y) {
if (child != null) {
if (child.isMouseOver(x - relativeBounds.left, y - relativeBounds.top - scrollerOffset()))
return true;
}
return relativeBounds.contains(x, y);
}
}

View file

@ -38,5 +38,15 @@ public interface RelativeContainerEventHandler extends ContainerEventHandler {
Rectangle r = getInputBounds();
return ContainerEventHandler.super.mouseScrolled(d - r.left, e - r.top, f);
}
default boolean isMouseOver(double x, double y) {
Rectangle r = getInputBounds();
boolean res = false;
for (GuiEventListener c : children()) {
res |= c.isMouseOver(x - r.left, y - r.top);
}
return res || r.contains(x, y);
}
}