From 399d9820d496aa51bbff46669fbcd9cbccb40553 Mon Sep 17 00:00:00 2001 From: Frank Date: Fri, 15 Jul 2022 02:03:18 +0200 Subject: [PATCH] Updated Event Handling --- .../bclib/client/gui/modmenu/TestScreen.java | 45 +--- .../ui/layout/components/HorizontalStack.java | 203 ++++++++++-------- .../betterx/ui/layout/components/Panel.java | 157 +++++++++----- .../ui/layout/components/VerticalStack.java | 203 ++++++++++-------- 4 files changed, 343 insertions(+), 265 deletions(-) diff --git a/src/main/java/org/betterx/bclib/client/gui/modmenu/TestScreen.java b/src/main/java/org/betterx/bclib/client/gui/modmenu/TestScreen.java index 6faf3462..54b15deb 100644 --- a/src/main/java/org/betterx/bclib/client/gui/modmenu/TestScreen.java +++ b/src/main/java/org/betterx/bclib/client/gui/modmenu/TestScreen.java @@ -50,54 +50,13 @@ public class TestScreen extends Screen { rows.addFiller(); main.setChild(HorizontalStack.centered(rows)); main.calculateLayout(); + + addRenderableWidget(main); } @Override public void render(PoseStack poseStack, int i, int j, float f) { renderDirtBackground(i); - main.render(poseStack); super.render(poseStack, i, j, f); } - - @Override - public boolean mouseClicked(double x, double y, int button) { - boolean res = super.mouseClicked(x, y, button); - if (!res) { - res = main.mouseClicked(x, y, button); - } - return res; - } - - @Override - public boolean mouseReleased(double d, double e, int i) { - boolean res = super.mouseReleased(d, e, i); - if (!res) { - res = main.mouseReleased(d, e, i); - } - return res; - } - - @Override - public void mouseMoved(double d, double e) { - super.mouseMoved(d, e); - main.mouseMoved(d, e); - } - - @Override - public boolean mouseDragged(double d, double e, int i, double f, double g) { - boolean res = super.mouseDragged(d, e, i, f, g); - if (!res) { - res = main.mouseDragged(d, e, i, f, g); - } - return res; - } - - @Override - public boolean mouseScrolled(double d, double e, double f) { - boolean res = super.mouseScrolled(d, e, f); - if (!res) { - res = main.mouseScrolled(d, e, f); - } - return res; - } } diff --git a/src/main/java/org/betterx/ui/layout/components/HorizontalStack.java b/src/main/java/org/betterx/ui/layout/components/HorizontalStack.java index 12060d87..26ff84ef 100644 --- a/src/main/java/org/betterx/ui/layout/components/HorizontalStack.java +++ b/src/main/java/org/betterx/ui/layout/components/HorizontalStack.java @@ -7,11 +7,14 @@ import org.betterx.ui.layout.values.DynamicSize; import org.betterx.ui.layout.values.Rectangle; import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.gui.components.events.ContainerEventHandler; +import net.minecraft.client.gui.components.events.GuiEventListener; import java.util.LinkedList; import java.util.List; +import org.jetbrains.annotations.Nullable; -public class HorizontalStack extends Component { +public class HorizontalStack extends Component implements ContainerEventHandler { protected final List> components = new LinkedList<>(); public HorizontalStack(DynamicSize width, DynamicSize height) { @@ -146,96 +149,126 @@ public class HorizontalStack extends Component { } @Override - public void mouseMoved(double x, double y) { - for (Component c : components) { - c.mouseMoved(x - relativeBounds.left, y - relativeBounds.top); - } + public List children() { + return components; + } + + boolean dragging; + + @Override + public boolean isDragging() { + return dragging; } @Override - public boolean mouseClicked(double x, double y, int button) { - for (Component c : components) { - if (c.mouseClicked(x - relativeBounds.left, y - relativeBounds.top, button)) - return true; - } - return false; + public void setDragging(boolean bl) { + dragging = bl; + } + + GuiEventListener focused; + + @Nullable + @Override + public GuiEventListener getFocused() { + return focused; } @Override - public boolean mouseReleased(double x, double y, int button) { - for (Component c : components) { - if (c.mouseReleased(x - relativeBounds.left, y - relativeBounds.top, button)) - return true; - } - return false; + public void setFocused(@Nullable GuiEventListener guiEventListener) { + focused = guiEventListener; } - @Override - public boolean mouseDragged(double x, double y, int button, double x2, double y2) { - for (Component c : components) { - if (c.mouseDragged( - x - relativeBounds.left, - y - relativeBounds.top, - button, - x2 - relativeBounds.left, - y2 - relativeBounds.top - )) - return true; - } - return false; - } - - @Override - public boolean mouseScrolled(double x, double y, double f) { - for (Component c : components) { - if (c.mouseScrolled(x - relativeBounds.left, y - relativeBounds.top, f)) - return true; - } - return false; - } - - @Override - public boolean keyPressed(int i, int j, int k) { - for (Component c : components) { - if (c.keyPressed(i, j, k)) - return true; - } - return false; - } - - @Override - public boolean keyReleased(int i, int j, int k) { - for (Component c : components) { - if (c.keyReleased(i, j, k)) - return true; - } - return false; - } - - @Override - public boolean charTyped(char cc, int i) { - for (Component c : components) { - if (c.charTyped(cc, i)) - return true; - } - return false; - } - - @Override - public boolean changeFocus(boolean bl) { - for (Component c : components) { - if (c.changeFocus(bl)) - return true; - } - return false; - } - - @Override - public boolean isMouseOver(double x, double y) { - for (Component c : components) { - if (c.isMouseOver(x, y)) - return true; - } - return false; - } +// @Override +// public void mouseMoved(double x, double y) { +// for (Component c : components) { +// c.mouseMoved(x - relativeBounds.left, y - relativeBounds.top); +// } +// } +// +// @Override +// public boolean mouseClicked(double x, double y, int button) { +// for (Component c : components) { +// if (c.mouseClicked(x - relativeBounds.left, y - relativeBounds.top, button)) +// return true; +// } +// return false; +// } +// +// @Override +// public boolean mouseReleased(double x, double y, int button) { +// for (Component c : components) { +// if (c.mouseReleased(x - relativeBounds.left, y - relativeBounds.top, button)) +// return true; +// } +// return false; +// } +// +// @Override +// public boolean mouseDragged(double x, double y, int button, double x2, double y2) { +// for (Component c : components) { +// if (c.mouseDragged( +// x - relativeBounds.left, +// y - relativeBounds.top, +// button, +// x2 - relativeBounds.left, +// y2 - relativeBounds.top +// )) +// return true; +// } +// return false; +// } +// +// @Override +// public boolean mouseScrolled(double x, double y, double f) { +// for (Component c : components) { +// if (c.mouseScrolled(x - relativeBounds.left, y - relativeBounds.top, f)) +// return true; +// } +// return false; +// } +// +// @Override +// public boolean keyPressed(int i, int j, int k) { +// for (Component c : components) { +// if (c.keyPressed(i, j, k)) +// return true; +// } +// return false; +// } +// +// @Override +// public boolean keyReleased(int i, int j, int k) { +// for (Component c : components) { +// if (c.keyReleased(i, j, k)) +// return true; +// } +// return false; +// } +// +// @Override +// public boolean charTyped(char cc, int i) { +// for (Component c : components) { +// if (c.charTyped(cc, i)) +// return true; +// } +// return false; +// } +// +// @Override +// public boolean changeFocus(boolean bl) { +// for (Component c : components) { +// if (c.changeFocus(bl)) +// return true; +// } +// return false; +// } +// +// @Override +// public boolean isMouseOver(double x, double y) { +// for (Component c : components) { +// if (c.isMouseOver(x, y)) +// return true; +// } +// return false; +// } } diff --git a/src/main/java/org/betterx/ui/layout/components/Panel.java b/src/main/java/org/betterx/ui/layout/components/Panel.java index 35363d7b..305e3720 100644 --- a/src/main/java/org/betterx/ui/layout/components/Panel.java +++ b/src/main/java/org/betterx/ui/layout/components/Panel.java @@ -5,10 +5,18 @@ import org.betterx.ui.layout.components.input.MouseEvent; import org.betterx.ui.layout.values.Rectangle; import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.gui.components.Widget; +import net.minecraft.client.gui.components.events.ContainerEventHandler; import net.minecraft.client.gui.components.events.GuiEventListener; +import net.minecraft.client.gui.narration.NarratableEntry; +import net.minecraft.client.gui.narration.NarrationElementOutput; -public class Panel implements ComponentWithBounds, GuiEventListener { +import java.util.List; +import org.jetbrains.annotations.Nullable; + +public class Panel implements ComponentWithBounds, ContainerEventHandler, NarratableEntry, Widget { protected Component child; + List listeners = List.of(); public final Rectangle bounds; public Panel(int width, int height) { @@ -17,6 +25,7 @@ public class Panel implements ComponentWithBounds, GuiEventListener { public void setChild(Component c) { this.child = c; + listeners = List.of(c); } public boolean mouseEvent(MouseEvent event, int x, int y) { @@ -46,71 +55,115 @@ public class Panel implements ComponentWithBounds, GuiEventListener { } @Override - public void mouseMoved(double x, double y) { - if (child != null) - child.mouseMoved(x - bounds.left, y - bounds.top); + public List children() { + return listeners; + } + + boolean dragging = false; + + @Override + public boolean isDragging() { + return dragging; } @Override - public boolean mouseClicked(double x, double y, int button) { - if (child != null) - return child.mouseClicked(x - bounds.left, y - bounds.top, button); - return false; + public void setDragging(boolean bl) { + dragging = bl; + } + + GuiEventListener focused; + + @Nullable + @Override + public GuiEventListener getFocused() { + return focused; } @Override - public boolean mouseReleased(double x, double y, int button) { - if (child != null) - return child.mouseReleased(x - bounds.left, y - bounds.top, button); - return false; + public void setFocused(@Nullable GuiEventListener guiEventListener) { + focused = guiEventListener; } @Override - public boolean mouseDragged(double x, double y, int button, double x2, double y2) { - if (child != null) - return child.mouseDragged(x - bounds.left, y - bounds.top, button, x2 - bounds.left, y2 - bounds.top); - return false; + public NarrationPriority narrationPriority() { + return NarrationPriority.NONE; } @Override - public boolean mouseScrolled(double x, double y, double f) { - if (child != null) - return child.mouseScrolled(x - bounds.left, y - bounds.top, f); - return false; + public void updateNarration(NarrationElementOutput narrationElementOutput) { + } @Override - public boolean keyPressed(int i, int j, int k) { - if (child != null) - return child.keyPressed(i, j, k); - return false; - } - - @Override - public boolean keyReleased(int i, int j, int k) { - if (child != null) - return child.keyReleased(i, j, k); - return false; - } - - @Override - public boolean charTyped(char c, int i) { - if (child != null) - return child.charTyped(c, i); - return false; - } - - @Override - public boolean changeFocus(boolean bl) { - if (child != null) - return child.changeFocus(bl); - return false; - } - - @Override - public boolean isMouseOver(double x, double y) { - if (child != null) - return child.isMouseOver(x, y); - return false; + public void render(PoseStack poseStack, int i, int j, float f) { + render(poseStack); } + // @Override +// public void mouseMoved(double x, double y) { +// if (child != null) +// child.mouseMoved(x - bounds.left, y - bounds.top); +// } +// +// @Override +// public boolean mouseClicked(double x, double y, int button) { +// if (child != null) +// return child.mouseClicked(x - bounds.left, y - bounds.top, button); +// return false; +// } +// +// @Override +// public boolean mouseReleased(double x, double y, int button) { +// if (child != null) +// return child.mouseReleased(x - bounds.left, y - bounds.top, button); +// return false; +// } +// +// @Override +// public boolean mouseDragged(double x, double y, int button, double x2, double y2) { +// if (child != null) +// return child.mouseDragged(x - bounds.left, y - bounds.top, button, x2 - bounds.left, y2 - bounds.top); +// return false; +// } +// +// @Override +// public boolean mouseScrolled(double x, double y, double f) { +// if (child != null) +// return child.mouseScrolled(x - bounds.left, y - bounds.top, f); +// return false; +// } +// +// @Override +// public boolean keyPressed(int i, int j, int k) { +// if (child != null) +// return child.keyPressed(i, j, k); +// return false; +// } +// +// @Override +// public boolean keyReleased(int i, int j, int k) { +// if (child != null) +// return child.keyReleased(i, j, k); +// return false; +// } +// +// @Override +// public boolean charTyped(char c, int i) { +// if (child != null) +// return child.charTyped(c, i); +// return false; +// } +// +// @Override +// public boolean changeFocus(boolean bl) { +// if (child != null) +// return child.changeFocus(bl); +// return false; +// } +// +// @Override +// public boolean isMouseOver(double x, double y) { +// if (child != null) +// return child.isMouseOver(x, y); +// return false; +// } } diff --git a/src/main/java/org/betterx/ui/layout/components/VerticalStack.java b/src/main/java/org/betterx/ui/layout/components/VerticalStack.java index d6ad2980..925de631 100644 --- a/src/main/java/org/betterx/ui/layout/components/VerticalStack.java +++ b/src/main/java/org/betterx/ui/layout/components/VerticalStack.java @@ -8,11 +8,14 @@ import org.betterx.ui.layout.values.DynamicSize; import org.betterx.ui.layout.values.Rectangle; import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.gui.components.events.ContainerEventHandler; +import net.minecraft.client.gui.components.events.GuiEventListener; import java.util.LinkedList; import java.util.List; +import org.jetbrains.annotations.Nullable; -public class VerticalStack extends Component { +public class VerticalStack extends Component implements ContainerEventHandler { protected final List> components = new LinkedList<>(); public VerticalStack(DynamicSize width, DynamicSize height) { @@ -145,96 +148,126 @@ public class VerticalStack extends Component { } @Override - public void mouseMoved(double x, double y) { - for (Component c : components) { - c.mouseMoved(x - relativeBounds.left, y - relativeBounds.top); - } + public List children() { + return components; + } + + boolean dragging; + + @Override + public boolean isDragging() { + return dragging; } @Override - public boolean mouseClicked(double x, double y, int button) { - for (Component c : components) { - if (c.mouseClicked(x - relativeBounds.left, y - relativeBounds.top, button)) - return true; - } - return false; + public void setDragging(boolean bl) { + dragging = bl; + } + + GuiEventListener focused; + + @Nullable + @Override + public GuiEventListener getFocused() { + return focused; } @Override - public boolean mouseReleased(double x, double y, int button) { - for (Component c : components) { - if (c.mouseReleased(x - relativeBounds.left, y - relativeBounds.top, button)) - return true; - } - return false; + public void setFocused(@Nullable GuiEventListener guiEventListener) { + focused = guiEventListener; } - @Override - public boolean mouseDragged(double x, double y, int button, double x2, double y2) { - for (Component c : components) { - if (c.mouseDragged( - x - relativeBounds.left, - y - relativeBounds.top, - button, - x2 - relativeBounds.left, - y2 - relativeBounds.top - )) - return true; - } - return false; - } - - @Override - public boolean mouseScrolled(double x, double y, double f) { - for (Component c : components) { - if (c.mouseScrolled(x - relativeBounds.left, y - relativeBounds.top, f)) - return true; - } - return false; - } - - @Override - public boolean keyPressed(int i, int j, int k) { - for (Component c : components) { - if (c.keyPressed(i, j, k)) - return true; - } - return false; - } - - @Override - public boolean keyReleased(int i, int j, int k) { - for (Component c : components) { - if (c.keyReleased(i, j, k)) - return true; - } - return false; - } - - @Override - public boolean charTyped(char cc, int i) { - for (Component c : components) { - if (c.charTyped(cc, i)) - return true; - } - return false; - } - - @Override - public boolean changeFocus(boolean bl) { - for (Component c : components) { - if (c.changeFocus(bl)) - return true; - } - return false; - } - - @Override - public boolean isMouseOver(double x, double y) { - for (Component c : components) { - if (c.isMouseOver(x, y)) - return true; - } - return false; - } +// @Override +// public void mouseMoved(double x, double y) { +// for (Component c : components) { +// c.mouseMoved(x - relativeBounds.left, y - relativeBounds.top); +// } +// } +// +// @Override +// public boolean mouseClicked(double x, double y, int button) { +// for (Component c : components) { +// if (c.mouseClicked(x - relativeBounds.left, y - relativeBounds.top, button)) +// return true; +// } +// return false; +// } +// +// @Override +// public boolean mouseReleased(double x, double y, int button) { +// for (Component c : components) { +// if (c.mouseReleased(x - relativeBounds.left, y - relativeBounds.top, button)) +// return true; +// } +// return false; +// } +// +// @Override +// public boolean mouseDragged(double x, double y, int button, double x2, double y2) { +// for (Component c : components) { +// if (c.mouseDragged( +// x - relativeBounds.left, +// y - relativeBounds.top, +// button, +// x2 - relativeBounds.left, +// y2 - relativeBounds.top +// )) +// return true; +// } +// return false; +// } +// +// @Override +// public boolean mouseScrolled(double x, double y, double f) { +// for (Component c : components) { +// if (c.mouseScrolled(x - relativeBounds.left, y - relativeBounds.top, f)) +// return true; +// } +// return false; +// } +// +// @Override +// public boolean keyPressed(int i, int j, int k) { +// for (Component c : components) { +// if (c.keyPressed(i, j, k)) +// return true; +// } +// return false; +// } +// +// @Override +// public boolean keyReleased(int i, int j, int k) { +// for (Component c : components) { +// if (c.keyReleased(i, j, k)) +// return true; +// } +// return false; +// } +// +// @Override +// public boolean charTyped(char cc, int i) { +// for (Component c : components) { +// if (c.charTyped(cc, i)) +// return true; +// } +// return false; +// } +// +// @Override +// public boolean changeFocus(boolean bl) { +// for (Component c : components) { +// if (c.changeFocus(bl)) +// return true; +// } +// return false; +// } +// +// @Override +// public boolean isMouseOver(double x, double y) { +// for (Component c : components) { +// if (c.isMouseOver(x, y)) +// return true; +// } +// return false; +// } }