Skip to content

Commit ebb55a2

Browse files
committed
convert screen renderer to java
1 parent 9ce0ba4 commit ebb55a2

File tree

13 files changed

+275
-392
lines changed

13 files changed

+275
-392
lines changed

common/src/main/java/io/github/notenoughupdates/moulconfig/common/IMinecraft.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import io.github.notenoughupdates.moulconfig.gui.GuiComponent;
55
import io.github.notenoughupdates.moulconfig.gui.GuiContext;
66
import io.github.notenoughupdates.moulconfig.gui.GuiElement;
7+
import io.github.notenoughupdates.moulconfig.gui.GuiElementComponent;
78
import io.github.notenoughupdates.moulconfig.internal.InitUtil;
89
import io.github.notenoughupdates.moulconfig.internal.MCLogger;
910
import io.github.notenoughupdates.moulconfig.internal.Warnings;
@@ -36,6 +37,13 @@ public interface IMinecraft {
3637

3738
Pair<Double, Double> getMousePositionHF();
3839

40+
default Pair<Integer, Integer> getMousePosition() {
41+
var mousePositionHF = getMousePositionHF();
42+
return new Pair<>(
43+
mousePositionHF.getFirst().intValue(),
44+
mousePositionHF.getSecond().intValue());
45+
}
46+
3947
default int getMouseX() {
4048
return (int) getMouseXHF();
4149
}
@@ -102,7 +110,9 @@ default void sendChatMessage(StructuredText message) {
102110
@Deprecated
103111
RenderContext provideTopLevelRenderContext();
104112

105-
void openWrappedScreen(GuiElement guiElement);
113+
default void openWrappedScreen(GuiElement guiElement) {
114+
openWrappedScreen(new GuiElementComponent(guiElement));
115+
}
106116

107117
void openWrappedScreen(GuiContext guiContext);
108118

common/src/main/java/io/github/notenoughupdates/moulconfig/gui/GuiContext.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import lombok.Getter;
2424
import lombok.Setter;
2525
import lombok.ToString;
26+
import org.jspecify.annotations.Nullable;
2627

2728
import java.util.ArrayList;
2829
import java.util.List;
@@ -38,11 +39,11 @@ public class GuiContext {
3839
* The root element of this GuiContext
3940
*/
4041
public final GuiComponent root;
41-
public GuiComponent focusedElement;
42+
private @Nullable GuiComponent focusedElement;
4243
public List<FloatingGuiElement> floatingWindows = new ArrayList<>();
4344
public Runnable closeRequestHandler;
4445

45-
public void setFocusedElement(GuiComponent focusedElement) {
46+
public void setFocusedElement(@Nullable GuiComponent focusedElement) {
4647
if (this.focusedElement == focusedElement) return;
4748
GuiComponent oldElement = this.focusedElement;
4849
if (oldElement != null)

common/src/main/java/io/github/notenoughupdates/moulconfig/gui/GuiElement.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@
2020

2121
package io.github.notenoughupdates.moulconfig.gui;
2222

23-
23+
/**
24+
* Can be adapted as a {@link GuiComponent} using {@link GuiElementComponent}
25+
*/
2426
public abstract class GuiElement {
2527
public abstract void render();
2628

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package io.github.notenoughupdates.moulconfig.gui;
2+
3+
import io.github.notenoughupdates.moulconfig.internal.Warnings;
4+
import lombok.EqualsAndHashCode;
5+
import lombok.Value;
6+
import org.jetbrains.annotations.NotNull;
7+
8+
/**
9+
* Adapts a {@link GuiElement} as a {@link GuiComponent} that renders on the entire screen. Not applicable to be used in transformed situations.
10+
*/
11+
@EqualsAndHashCode(callSuper = true)
12+
@Value
13+
public class GuiElementComponent extends GuiComponent {
14+
GuiElement element;
15+
16+
@Override
17+
public void setContext(GuiContext context) {
18+
super.setContext(context);
19+
if (context.getRoot() != this)
20+
Warnings.warn("Mounting GuiElementComponent at location other than root. This can cause issues.");
21+
}
22+
23+
@Override
24+
public int getWidth() {
25+
return mc.getScaledWidth();
26+
}
27+
28+
@Override
29+
public int getHeight() {
30+
return mc.getScaledHeight();
31+
}
32+
33+
@Override
34+
public void render(@NotNull GuiImmediateContext context) {
35+
if (context.getRenderOffsetX() != 0 || context.getRenderOffsetY() != 0) {
36+
Warnings.warn("Cannot render GuiElement with a pretransformed matrix stack");
37+
}
38+
element.render();
39+
}
40+
41+
@Override
42+
public boolean mouseEvent(@NotNull MouseEvent mouseEvent, @NotNull GuiImmediateContext context) {
43+
return element.mouseInput(context.getMouseX(), context.getMouseY(), mouseEvent);
44+
}
45+
46+
@Override
47+
public boolean keyboardEvent(@NotNull KeyboardEvent event, @NotNull GuiImmediateContext context) {
48+
return element.keyboardInput(event);
49+
}
50+
}

common/src/main/java/io/github/notenoughupdates/moulconfig/gui/KeyboardEvent.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ package io.github.notenoughupdates.moulconfig.gui
22

33
sealed interface KeyboardEvent {
44
data class CharTyped(val char: Char) : KeyboardEvent
5-
data class KeyPressed(val keycode: Int, val pressed: Boolean) : KeyboardEvent
5+
data class KeyPressed(val keycode: Int, val scancode: Int, val pressed: Boolean) : KeyboardEvent
66
}

legacy/src/main/java/io/github/notenoughupdates/moulconfig/gui/elements/GuiElementBoolean.java

Lines changed: 0 additions & 160 deletions
This file was deleted.

modern/1.21.7/src/main/java/io/github/notenoughupdates/moulconfig/gui/GuiComponentWrapper.kt

Lines changed: 0 additions & 106 deletions
This file was deleted.

0 commit comments

Comments
 (0)