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

View file

@ -38,5 +38,15 @@ public interface RelativeContainerEventHandler extends ContainerEventHandler {
Rectangle r = getInputBounds(); Rectangle r = getInputBounds();
return ContainerEventHandler.super.mouseScrolled(d - r.left, e - r.top, f); 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);
}
} }