diff --git a/src/main/java/de/shiewk/widgets/Anchor.java b/src/main/java/de/shiewk/widgets/Anchor.java index 2e27e9a..d8fb248 100644 --- a/src/main/java/de/shiewk/widgets/Anchor.java +++ b/src/main/java/de/shiewk/widgets/Anchor.java @@ -56,6 +56,6 @@ public enum Anchor { return anchor; } } - return Anchor.TOP_LEFT; + return null; } } diff --git a/src/main/java/de/shiewk/widgets/ModWidget.java b/src/main/java/de/shiewk/widgets/ModWidget.java index 41f0d82..03b6b86 100644 --- a/src/main/java/de/shiewk/widgets/ModWidget.java +++ b/src/main/java/de/shiewk/widgets/ModWidget.java @@ -59,4 +59,20 @@ public abstract class ModWidget { settings.offsetX += dx; settings.offsetY += dy; } + + public void setPos(Anchor anchor, int offsetX, int offsetY){ + getSettings().setPos(anchor, offsetX, offsetY); + } + + public void setAbsolutePos(int x, int y, int scaledWindowWidth, int scaledWindowHeight) { + Anchor anchor = Anchor.getAnchor(scaledWindowWidth, scaledWindowHeight, x, y); + if (anchor == null) { + throw new IllegalArgumentException("Provided coordinates have no corresponding anchor"); + } + settings.setPos( + anchor, + x - anchor.getAlignStartPosX(scaledWindowWidth), + y - anchor.getAlignStartPosY(scaledWindowHeight) + ); + } } diff --git a/src/main/java/de/shiewk/widgets/client/screen/ContextMenuScreen.java b/src/main/java/de/shiewk/widgets/client/screen/ContextMenuScreen.java new file mode 100644 index 0000000..d05e4f8 --- /dev/null +++ b/src/main/java/de/shiewk/widgets/client/screen/ContextMenuScreen.java @@ -0,0 +1,136 @@ +package de.shiewk.widgets.client.screen; + +import de.shiewk.widgets.utils.WidgetUtils; +import net.minecraft.client.gui.Click; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.cursor.StandardCursors; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.sound.SoundEvents; +import net.minecraft.text.Text; + +import java.util.List; + +public class ContextMenuScreen extends Screen { + + public record Option(Text title, boolean highlighted, Runnable action){ + + public Option(Text title, Runnable action){ + this(title, false, action); + } + + } + + private final Screen parent; + private int menuX; + private int menuY; + private final List