diff --git a/src/main/java/io/wispforest/owo/ui/base/BaseComponent.java b/src/main/java/io/wispforest/owo/ui/base/BaseComponent.java index bd820ef5..436b1715 100644 --- a/src/main/java/io/wispforest/owo/ui/base/BaseComponent.java +++ b/src/main/java/io/wispforest/owo/ui/base/BaseComponent.java @@ -149,7 +149,7 @@ protected void updateHoveredState(int mouseX, int mouseY, boolean nowHovered) { this.hovered = nowHovered; if (nowHovered) { - if (this.root() == null || this.root().childAt(mouseX, mouseY) != this) { + if (this.root() != null && this.root().childAt(mouseX, mouseY) != this) { this.hovered = false; return; } diff --git a/src/main/java/io/wispforest/owo/ui/base/BaseParentComponent.java b/src/main/java/io/wispforest/owo/ui/base/BaseParentComponent.java index c44a5f8a..3662a7e3 100644 --- a/src/main/java/io/wispforest/owo/ui/base/BaseParentComponent.java +++ b/src/main/java/io/wispforest/owo/ui/base/BaseParentComponent.java @@ -4,7 +4,6 @@ import io.wispforest.owo.ui.util.FocusHandler; import io.wispforest.owo.ui.util.ScissorStack; import io.wispforest.owo.util.Observable; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.math.MathHelper; import org.jetbrains.annotations.Nullable; import org.lwjgl.glfw.GLFW; @@ -51,6 +50,23 @@ public final void update(float delta, int mouseX, int mouseY) { } } + @Override + protected void updateHoveredState(int mouseX, int mouseY, boolean nowHovered) { + this.hovered = nowHovered; + + if (nowHovered) { + ParentComponent root = this.root(); + if ((root != null && root.childAt(mouseX, mouseY) != this) || (root == null && this.childAt(mouseX, mouseY) != this)) { + this.hovered = false; + return; + } + + this.mouseEnterEvents.sink().onMouseEnter(); + } else { + this.mouseLeaveEvents.sink().onMouseLeave(); + } + } + /** * Update the state of this component before drawing * the next frame. This method is separated from @@ -61,7 +77,8 @@ public final void update(float delta, int mouseX, int mouseY) { * @param mouseX The mouse pointer's x-coordinate * @param mouseY The mouse pointer's y-coordinate */ - protected void parentUpdate(float delta, int mouseX, int mouseY) {} + protected void parentUpdate(float delta, int mouseX, int mouseY) { + } @Override public void draw(OwoUIDrawContext context, int mouseX, int mouseY, float partialTicks, float delta) {