aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2022-05-27 20:22:53 +0800
committershedaniel <daniel@shedaniel.me>2022-05-27 20:22:53 +0800
commit1d0a4480f881350cef45f0f1f76f48cd293a7db8 (patch)
tree738e981e5ed1eee28754660aed4b23269898959c
parent87e9a9de92ee0b4d8045be497f72a79fc0a0c4c6 (diff)
downloadRoughlyEnoughItems-1d0a4480f881350cef45f0f1f76f48cd293a7db8.tar.gz
RoughlyEnoughItems-1d0a4480f881350cef45f0f1f76f48cd293a7db8.tar.bz2
RoughlyEnoughItems-1d0a4480f881350cef45f0f1f76f48cd293a7db8.zip
Fix clicking pinned JEI slots
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Widget.java33
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DelegateWidgetWithTranslate.java31
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DisplayCompositeWidget.java2
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java6
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/basewidgets/TextFieldWidget.java2
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/EntryListWidget.java4
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/FavoritesListWidget.java4
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayEntry.java13
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/region/EntryStacksRegionWidget.java5
9 files changed, 80 insertions, 20 deletions
diff --git a/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Widget.java b/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Widget.java
index 1e88199b4..3c753e747 100644
--- a/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Widget.java
+++ b/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Widget.java
@@ -24,8 +24,11 @@
package me.shedaniel.rei.api.client.gui.widgets;
import com.mojang.blaze3d.vertex.PoseStack;
+import com.mojang.math.Matrix4f;
+import com.mojang.math.Vector4f;
import me.shedaniel.math.Point;
import me.shedaniel.math.Rectangle;
+import me.shedaniel.math.impl.PointHelper;
import me.shedaniel.rei.api.client.gui.AbstractContainerEventHandler;
import me.shedaniel.rei.api.client.gui.Renderer;
import net.fabricmc.api.EnvType;
@@ -33,6 +36,8 @@ import net.fabricmc.api.Environment;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Font;
+import java.util.Stack;
+
/**
* The base class for a screen widget
*
@@ -49,6 +54,34 @@ public abstract class Widget extends AbstractContainerEventHandler implements ne
* The font for rendering text
*/
protected final Font font = minecraft.font;
+ private static final Stack<Point> mouseStack = new Stack<>();
+
+ public static Point mouse() {
+ return mouseStack.empty() ? PointHelper.ofMouse() : mouseStack.peek();
+ }
+
+ public static Point pushMouse(Point mouse) {
+ return mouseStack.push(mouse);
+ }
+
+ public static Point popMouse() {
+ return mouseStack.pop();
+ }
+
+ public static Point translateMouse(PoseStack poses) {
+ return translateMouse(poses.last().pose());
+ }
+
+ public static Point translateMouse(double x, double y, double z) {
+ return translateMouse(Matrix4f.createTranslateMatrix((float) x, (float) y, (float) z));
+ }
+
+ public static Point translateMouse(Matrix4f pose) {
+ Point mouse = mouse();
+ Vector4f mouseVec = new Vector4f(mouse.x, mouse.y, 0, 1);
+ mouseVec.transform(pose);
+ return pushMouse(mouse);
+ }
public int getZ() {
return this.getBlitOffset();
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DelegateWidgetWithTranslate.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DelegateWidgetWithTranslate.java
index 5867f4232..c03cd3fb3 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DelegateWidgetWithTranslate.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DelegateWidgetWithTranslate.java
@@ -27,6 +27,7 @@ import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.math.Matrix4f;
import com.mojang.math.Vector4f;
import me.shedaniel.rei.api.client.gui.widgets.DelegateWidget;
+import me.shedaniel.rei.api.client.gui.widgets.Widget;
import me.shedaniel.rei.api.client.gui.widgets.WidgetWithBounds;
import java.util.function.Supplier;
@@ -83,4 +84,34 @@ public class DelegateWidgetWithTranslate extends DelegateWidget {
Vector4f mouse = transformMouse(d, e);
return super.mouseScrolled(mouse.x(), mouse.y(), f);
}
+
+ @Override
+ public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
+ try {
+ Widget.translateMouse(translate.get());
+ return super.keyPressed(keyCode, scanCode, modifiers);
+ } finally {
+ Widget.popMouse();
+ }
+ }
+
+ @Override
+ public boolean keyReleased(int keyCode, int scanCode, int modifiers) {
+ try {
+ Widget.translateMouse(translate.get());
+ return super.keyReleased(keyCode, scanCode, modifiers);
+ } finally {
+ Widget.popMouse();
+ }
+ }
+
+ @Override
+ public boolean charTyped(char character, int modifiers) {
+ try {
+ Widget.translateMouse(translate.get());
+ return super.charTyped(character, modifiers);
+ } finally {
+ Widget.popMouse();
+ }
+ }
} \ No newline at end of file
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DisplayCompositeWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DisplayCompositeWidget.java
index 1a02fbae3..6f65bc525 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DisplayCompositeWidget.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DisplayCompositeWidget.java
@@ -83,7 +83,7 @@ public class DisplayCompositeWidget extends DelegateWidgetWithBounds implements
return true;
}
- if (ConfigObject.getInstance().isFavoritesEnabled() && containsMouse(PointHelper.ofMouse())) {
+ if (ConfigObject.getInstance().isFavoritesEnabled() && containsMouse(mouse())) {
if (ConfigObject.getInstance().getFavoriteKeyCode().matchesKey(keyCode, scanCode)) {
FavoritesListWidget favoritesListWidget = ScreenOverlayImpl.getFavoritesListWidget();
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java
index 746324a33..ebb2a87b8 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java
@@ -487,7 +487,7 @@ public class EntryWidget extends Slot implements DraggableStackProviderWidget {
}
protected boolean doAction(double mouseX, double mouseY, int button) {
- if (interactableFavorites && ConfigObject.getInstance().isFavoritesEnabled() && containsMouse(PointHelper.ofMouse()) && !getCurrentEntry().isEmpty()) {
+ if (interactableFavorites && ConfigObject.getInstance().isFavoritesEnabled() && !getCurrentEntry().isEmpty()) {
ModifierKeyCode keyCode = ConfigObject.getInstance().getFavoriteKeyCode();
if (keyCode.matchesMouse(button)) {
FavoriteEntry favoriteEntry = asFavoriteEntry();
@@ -561,7 +561,7 @@ public class EntryWidget extends Slot implements DraggableStackProviderWidget {
@Override
public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
- if (containsMouse(PointHelper.ofMouse())) {
+ if (containsMouse(mouse())) {
return keyPressedIgnoreContains(keyCode, scanCode, modifiers);
}
@@ -571,7 +571,7 @@ public class EntryWidget extends Slot implements DraggableStackProviderWidget {
public boolean keyPressedIgnoreContains(int keyCode, int scanCode, int modifiers) {
if (!interactable) return false;
- if (interactableFavorites && ConfigObject.getInstance().isFavoritesEnabled() && containsMouse(PointHelper.ofMouse()) && !getCurrentEntry().isEmpty()) {
+ if (interactableFavorites && ConfigObject.getInstance().isFavoritesEnabled() && !getCurrentEntry().isEmpty()) {
if (ConfigObject.getInstance().getFavoriteKeyCode().matchesKey(keyCode, scanCode)) {
FavoriteEntry favoriteEntry = asFavoriteEntry();
if (favoriteEntry != null) {
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/basewidgets/TextFieldWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/basewidgets/TextFieldWidget.java
index aa9656cc0..8f3d79114 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/basewidgets/TextFieldWidget.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/basewidgets/TextFieldWidget.java
@@ -407,7 +407,7 @@ public class TextFieldWidget extends WidgetWithBounds implements TickableWidget,
public void renderBorder(PoseStack matrices) {
if (this.hasBorder()) {
- if (containsMouse(PointHelper.ofMouse()) || focused)
+ if (containsMouse(mouse()) || focused)
fill(matrices, this.bounds.x - 1, this.bounds.y - 1, this.bounds.x + this.bounds.width + 1, this.bounds.y + this.bounds.height + 1, -1);
else
fill(matrices, this.bounds.x - 1, this.bounds.y - 1, this.bounds.x + this.bounds.width + 1, this.bounds.y + this.bounds.height + 1, -6250336);
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/EntryListWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/EntryListWidget.java
index ce35d9c07..ff338307b 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/EntryListWidget.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/EntryListWidget.java
@@ -354,7 +354,7 @@ public class EntryListWidget extends WidgetWithBounds implements OverlayListWidg
@Override
public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
- if (containsChecked(PointHelper.ofMouse(), false))
+ if (containsChecked(mouse(), false))
for (Widget widget : children)
if (widget.keyPressed(keyCode, scanCode, modifiers))
return true;
@@ -498,7 +498,7 @@ public class EntryListWidget extends WidgetWithBounds implements OverlayListWidg
@Override
public EntryStack<?> getFocusedStack() {
- Point mouse = PointHelper.ofMouse();
+ Point mouse = mouse();
if (containsChecked(mouse, false)) {
for (EntryListStackEntry entry : entries) {
EntryStack<?> currentEntry = entry.getCurrentEntry();
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/FavoritesListWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/FavoritesListWidget.java
index 0c19e7bff..dc486b3ac 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/FavoritesListWidget.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/FavoritesListWidget.java
@@ -155,7 +155,7 @@ public class FavoritesListWidget extends WidgetWithBounds implements DraggableCo
@Override
public EntryStack<?> getFocusedStack() {
- Point mouse = PointHelper.ofMouse();
+ Point mouse = mouse();
EntryStack<?> stack = region.getFocusedStack();
if (stack != null && !stack.isEmpty()) return stack;
stack = systemRegion.getFocusedStack();
@@ -264,7 +264,7 @@ public class FavoritesListWidget extends WidgetWithBounds implements DraggableCo
@Override
public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
- if (containsMouse(PointHelper.ofMouse()))
+ if (containsMouse(mouse()))
for (Widget widget : children())
if (widget.keyPressed(keyCode, scanCode, modifiers))
return true;
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayEntry.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayEntry.java
index 35beb1432..e21d81e3f 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayEntry.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayEntry.java
@@ -210,18 +210,15 @@ public class DisplayEntry extends WidgetWithBounds {
@Override
public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
- for (Widget widget : widgets.get()) {
- if (widget instanceof EntryWidget) {
- double mouseX = PointHelper.getMouseFloatingX(), mouseY = PointHelper.getMouseFloatingY();
- if (widget.containsMouse(transformMouseX(mouseX), transformMouseY(mouseY))
- && ((EntryWidget) widget).keyPressedIgnoreContains(keyCode, scanCode, modifiers)) {
- return true;
- }
- } else {
+ try {
+ Widget.translateMouse(xOffset, 0, 0);
+ for (Widget widget : widgets.get()) {
if (widget.keyPressed(keyCode, scanCode, modifiers)) {
return true;
}
}
+ } finally {
+ Widget.popMouse();
}
return super.keyPressed(keyCode, scanCode, modifiers);
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/region/EntryStacksRegionWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/region/EntryStacksRegionWidget.java
index 6fecb94c3..57c80090c 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/region/EntryStacksRegionWidget.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/region/EntryStacksRegionWidget.java
@@ -34,7 +34,6 @@ import me.shedaniel.clothconfig2.api.scroll.ScrollingContainer;
import me.shedaniel.math.FloatingPoint;
import me.shedaniel.math.Point;
import me.shedaniel.math.Rectangle;
-import me.shedaniel.math.impl.PointHelper;
import me.shedaniel.rei.api.client.REIRuntime;
import me.shedaniel.rei.api.client.config.ConfigObject;
import me.shedaniel.rei.api.client.entry.region.RegionEntry;
@@ -170,7 +169,7 @@ public class EntryStacksRegionWidget<T extends RegionEntry<T>> extends WidgetWit
@Override
public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
- if (containsMouse(PointHelper.ofMouse()))
+ if (containsMouse(mouse()))
for (Widget widget : children())
if (widget.keyPressed(keyCode, scanCode, modifiers))
return true;
@@ -191,7 +190,7 @@ public class EntryStacksRegionWidget<T extends RegionEntry<T>> extends WidgetWit
}
public EntryStack<?> getFocusedStack() {
- Point mouse = PointHelper.ofMouse();
+ Point mouse = mouse();
if (innerBounds.contains(mouse)) {
for (RealRegionEntry<T> entry : entries.values()) {
if (entry.getWidget().containsMouse(mouse)) {