Skip to content

Commit fb97732

Browse files
X-C-0Wide-Cat
authored andcommitted
Fix: View widget passing click events and rendering dropdown and tooltips outside the view
1 parent babbd40 commit fb97732

File tree

3 files changed

+18
-2
lines changed

3 files changed

+18
-2
lines changed

src/main/java/meteordevelopment/meteorclient/gui/widgets/WWidget.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import meteordevelopment.meteorclient.gui.GuiTheme;
99
import meteordevelopment.meteorclient.gui.renderer.GuiRenderer;
1010
import meteordevelopment.meteorclient.gui.utils.BaseWidget;
11+
import meteordevelopment.meteorclient.gui.widgets.containers.WView;
1112
import net.minecraft.client.gui.Click;
1213
import net.minecraft.client.input.CharInput;
1314
import net.minecraft.client.input.KeyInput;
@@ -77,7 +78,11 @@ public boolean render(GuiRenderer renderer, double mouseX, double mouseY, double
7778

7879
if (isOver(mouseX, mouseY)) {
7980
mouseOverTimer += delta;
80-
if ((instantTooltips || mouseOverTimer >= 1) && tooltip != null) renderer.tooltip(tooltip);
81+
82+
if ((instantTooltips || mouseOverTimer >= 1) && tooltip != null) {
83+
WView view = getView();
84+
if (view == null || view.mouseOver) renderer.tooltip(tooltip);
85+
}
8186
}
8287
else {
8388
mouseOverTimer = 0;
@@ -138,6 +143,10 @@ protected WWidget getRoot() {
138143
return parent != null ? parent.getRoot() : (this instanceof WRoot ? this : null);
139144
}
140145

146+
protected WView getView() {
147+
return this instanceof WView ? (WView) this : (parent != null ? parent.getView() : null);
148+
}
149+
141150
public boolean isOver(double x, double y) {
142151
return x >= this.x && x <= this.x + width && y >= this.y && y <= this.y + height;
143152
}

src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WContainer.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,12 @@ protected void onCalculateWidgetPositions() {
106106
public boolean render(GuiRenderer renderer, double mouseX, double mouseY, double delta) {
107107
if (super.render(renderer, mouseX, mouseY, delta)) return true;
108108

109+
WView view = getView();
110+
109111
for (Cell<?> cell : cells) {
110112
double y = cell.widget().y;
111113
if (y > getWindowHeight()) break;
114+
if (view != null && !view.isWidgetInView(cell.widget())) continue;
112115

113116
if (y + cell.widget().height > 0) renderWidget(cell.widget(), renderer, mouseX, mouseY, delta);
114117
}

src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WView.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,11 @@ else if (targetScroll < scroll) {
164164

165165
@Override
166166
protected boolean propagateEvents(WWidget widget) {
167-
return ((widget.y >= y && widget.y <= y + height) || (widget.y + widget.height >= y && widget.y + widget.height <= y + height)) || ((y >= widget.y && y <= widget.y + widget.height) || (y + height >= widget.y && y + height <= widget.y + widget.height));
167+
return mouseOver && isWidgetInView(widget);
168+
}
169+
170+
protected boolean isWidgetInView(WWidget widget) {
171+
return widget.y < y + height && widget.y + widget.height > y;
168172
}
169173

170174
protected double handleWidth() {

0 commit comments

Comments
 (0)