Updated Event Handling

This commit is contained in:
Frank 2022-07-15 02:03:18 +02:00
parent 20c19444f2
commit 399d9820d4
4 changed files with 343 additions and 265 deletions

View file

@ -50,54 +50,13 @@ public class TestScreen extends Screen {
rows.addFiller(); rows.addFiller();
main.setChild(HorizontalStack.centered(rows)); main.setChild(HorizontalStack.centered(rows));
main.calculateLayout(); main.calculateLayout();
addRenderableWidget(main);
} }
@Override @Override
public void render(PoseStack poseStack, int i, int j, float f) { public void render(PoseStack poseStack, int i, int j, float f) {
renderDirtBackground(i); renderDirtBackground(i);
main.render(poseStack);
super.render(poseStack, i, j, f); 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;
}
} }

View file

@ -7,11 +7,14 @@ import org.betterx.ui.layout.values.DynamicSize;
import org.betterx.ui.layout.values.Rectangle; import org.betterx.ui.layout.values.Rectangle;
import com.mojang.blaze3d.vertex.PoseStack; 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.LinkedList;
import java.util.List; import java.util.List;
import org.jetbrains.annotations.Nullable;
public class HorizontalStack<R extends ComponentRenderer> extends Component<R> { public class HorizontalStack<R extends ComponentRenderer> extends Component<R> implements ContainerEventHandler {
protected final List<Component<?>> components = new LinkedList<>(); protected final List<Component<?>> components = new LinkedList<>();
public HorizontalStack(DynamicSize width, DynamicSize height) { public HorizontalStack(DynamicSize width, DynamicSize height) {
@ -146,96 +149,126 @@ public class HorizontalStack<R extends ComponentRenderer> extends Component<R> {
} }
@Override @Override
public void mouseMoved(double x, double y) { public List<? extends GuiEventListener> children() {
for (Component<?> c : components) { return components;
c.mouseMoved(x - relativeBounds.left, y - relativeBounds.top); }
}
boolean dragging;
@Override
public boolean isDragging() {
return dragging;
} }
@Override @Override
public boolean mouseClicked(double x, double y, int button) { public void setDragging(boolean bl) {
for (Component<?> c : components) { dragging = bl;
if (c.mouseClicked(x - relativeBounds.left, y - relativeBounds.top, button)) }
return true;
} GuiEventListener focused;
return false;
@Nullable
@Override
public GuiEventListener getFocused() {
return focused;
} }
@Override @Override
public boolean mouseReleased(double x, double y, int button) { public void setFocused(@Nullable GuiEventListener guiEventListener) {
for (Component<?> c : components) { focused = guiEventListener;
if (c.mouseReleased(x - relativeBounds.left, y - relativeBounds.top, button))
return true;
}
return false;
} }
@Override // @Override
public boolean mouseDragged(double x, double y, int button, double x2, double y2) { // public void mouseMoved(double x, double y) {
for (Component<?> c : components) { // for (Component<?> c : components) {
if (c.mouseDragged( // c.mouseMoved(x - relativeBounds.left, y - relativeBounds.top);
x - relativeBounds.left, // }
y - relativeBounds.top, // }
button, //
x2 - relativeBounds.left, // @Override
y2 - relativeBounds.top // public boolean mouseClicked(double x, double y, int button) {
)) // for (Component<?> c : components) {
return true; // if (c.mouseClicked(x - relativeBounds.left, y - relativeBounds.top, button))
} // return true;
return false; // }
} // return false;
// }
@Override //
public boolean mouseScrolled(double x, double y, double f) { // @Override
for (Component<?> c : components) { // public boolean mouseReleased(double x, double y, int button) {
if (c.mouseScrolled(x - relativeBounds.left, y - relativeBounds.top, f)) // for (Component<?> c : components) {
return true; // if (c.mouseReleased(x - relativeBounds.left, y - relativeBounds.top, button))
} // return true;
return false; // }
} // return false;
// }
@Override //
public boolean keyPressed(int i, int j, int k) { // @Override
for (Component<?> c : components) { // public boolean mouseDragged(double x, double y, int button, double x2, double y2) {
if (c.keyPressed(i, j, k)) // for (Component<?> c : components) {
return true; // if (c.mouseDragged(
} // x - relativeBounds.left,
return false; // y - relativeBounds.top,
} // button,
// x2 - relativeBounds.left,
@Override // y2 - relativeBounds.top
public boolean keyReleased(int i, int j, int k) { // ))
for (Component<?> c : components) { // return true;
if (c.keyReleased(i, j, k)) // }
return true; // return false;
} // }
return false; //
} // @Override
// public boolean mouseScrolled(double x, double y, double f) {
@Override // for (Component<?> c : components) {
public boolean charTyped(char cc, int i) { // if (c.mouseScrolled(x - relativeBounds.left, y - relativeBounds.top, f))
for (Component<?> c : components) { // return true;
if (c.charTyped(cc, i)) // }
return true; // return false;
} // }
return false; //
} // @Override
// public boolean keyPressed(int i, int j, int k) {
@Override // for (Component<?> c : components) {
public boolean changeFocus(boolean bl) { // if (c.keyPressed(i, j, k))
for (Component<?> c : components) { // return true;
if (c.changeFocus(bl)) // }
return true; // return false;
} // }
return false; //
} // @Override
// public boolean keyReleased(int i, int j, int k) {
@Override // for (Component<?> c : components) {
public boolean isMouseOver(double x, double y) { // if (c.keyReleased(i, j, k))
for (Component<?> c : components) { // return true;
if (c.isMouseOver(x, y)) // }
return true; // return false;
} // }
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;
// }
} }

View file

@ -5,10 +5,18 @@ import org.betterx.ui.layout.components.input.MouseEvent;
import org.betterx.ui.layout.values.Rectangle; import org.betterx.ui.layout.values.Rectangle;
import com.mojang.blaze3d.vertex.PoseStack; 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.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; protected Component<?> child;
List<? extends GuiEventListener> listeners = List.of();
public final Rectangle bounds; public final Rectangle bounds;
public Panel(int width, int height) { public Panel(int width, int height) {
@ -17,6 +25,7 @@ public class Panel implements ComponentWithBounds, GuiEventListener {
public void setChild(Component<?> c) { public void setChild(Component<?> c) {
this.child = c; this.child = c;
listeners = List.of(c);
} }
public boolean mouseEvent(MouseEvent event, int x, int y) { public boolean mouseEvent(MouseEvent event, int x, int y) {
@ -46,71 +55,115 @@ public class Panel implements ComponentWithBounds, GuiEventListener {
} }
@Override @Override
public void mouseMoved(double x, double y) { public List<? extends GuiEventListener> children() {
if (child != null) return listeners;
child.mouseMoved(x - bounds.left, y - bounds.top); }
boolean dragging = false;
@Override
public boolean isDragging() {
return dragging;
} }
@Override @Override
public boolean mouseClicked(double x, double y, int button) { public void setDragging(boolean bl) {
if (child != null) dragging = bl;
return child.mouseClicked(x - bounds.left, y - bounds.top, button); }
return false;
GuiEventListener focused;
@Nullable
@Override
public GuiEventListener getFocused() {
return focused;
} }
@Override @Override
public boolean mouseReleased(double x, double y, int button) { public void setFocused(@Nullable GuiEventListener guiEventListener) {
if (child != null) focused = guiEventListener;
return child.mouseReleased(x - bounds.left, y - bounds.top, button);
return false;
} }
@Override @Override
public boolean mouseDragged(double x, double y, int button, double x2, double y2) { public NarrationPriority narrationPriority() {
if (child != null) return NarrationPriority.NONE;
return child.mouseDragged(x - bounds.left, y - bounds.top, button, x2 - bounds.left, y2 - bounds.top);
return false;
} }
@Override @Override
public boolean mouseScrolled(double x, double y, double f) { public void updateNarration(NarrationElementOutput narrationElementOutput) {
if (child != null)
return child.mouseScrolled(x - bounds.left, y - bounds.top, f);
return false;
} }
@Override @Override
public boolean keyPressed(int i, int j, int k) { public void render(PoseStack poseStack, int i, int j, float f) {
if (child != null) render(poseStack);
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;
} }
// @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;
// }
} }

View file

@ -8,11 +8,14 @@ import org.betterx.ui.layout.values.DynamicSize;
import org.betterx.ui.layout.values.Rectangle; import org.betterx.ui.layout.values.Rectangle;
import com.mojang.blaze3d.vertex.PoseStack; 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.LinkedList;
import java.util.List; import java.util.List;
import org.jetbrains.annotations.Nullable;
public class VerticalStack<R extends ComponentRenderer> extends Component<R> { public class VerticalStack<R extends ComponentRenderer> extends Component<R> implements ContainerEventHandler {
protected final List<Component<?>> components = new LinkedList<>(); protected final List<Component<?>> components = new LinkedList<>();
public VerticalStack(DynamicSize width, DynamicSize height) { public VerticalStack(DynamicSize width, DynamicSize height) {
@ -145,96 +148,126 @@ public class VerticalStack<R extends ComponentRenderer> extends Component<R> {
} }
@Override @Override
public void mouseMoved(double x, double y) { public List<? extends GuiEventListener> children() {
for (Component<?> c : components) { return components;
c.mouseMoved(x - relativeBounds.left, y - relativeBounds.top); }
}
boolean dragging;
@Override
public boolean isDragging() {
return dragging;
} }
@Override @Override
public boolean mouseClicked(double x, double y, int button) { public void setDragging(boolean bl) {
for (Component<?> c : components) { dragging = bl;
if (c.mouseClicked(x - relativeBounds.left, y - relativeBounds.top, button)) }
return true;
} GuiEventListener focused;
return false;
@Nullable
@Override
public GuiEventListener getFocused() {
return focused;
} }
@Override @Override
public boolean mouseReleased(double x, double y, int button) { public void setFocused(@Nullable GuiEventListener guiEventListener) {
for (Component<?> c : components) { focused = guiEventListener;
if (c.mouseReleased(x - relativeBounds.left, y - relativeBounds.top, button))
return true;
}
return false;
} }
@Override // @Override
public boolean mouseDragged(double x, double y, int button, double x2, double y2) { // public void mouseMoved(double x, double y) {
for (Component<?> c : components) { // for (Component<?> c : components) {
if (c.mouseDragged( // c.mouseMoved(x - relativeBounds.left, y - relativeBounds.top);
x - relativeBounds.left, // }
y - relativeBounds.top, // }
button, //
x2 - relativeBounds.left, // @Override
y2 - relativeBounds.top // public boolean mouseClicked(double x, double y, int button) {
)) // for (Component<?> c : components) {
return true; // if (c.mouseClicked(x - relativeBounds.left, y - relativeBounds.top, button))
} // return true;
return false; // }
} // return false;
// }
@Override //
public boolean mouseScrolled(double x, double y, double f) { // @Override
for (Component<?> c : components) { // public boolean mouseReleased(double x, double y, int button) {
if (c.mouseScrolled(x - relativeBounds.left, y - relativeBounds.top, f)) // for (Component<?> c : components) {
return true; // if (c.mouseReleased(x - relativeBounds.left, y - relativeBounds.top, button))
} // return true;
return false; // }
} // return false;
// }
@Override //
public boolean keyPressed(int i, int j, int k) { // @Override
for (Component<?> c : components) { // public boolean mouseDragged(double x, double y, int button, double x2, double y2) {
if (c.keyPressed(i, j, k)) // for (Component<?> c : components) {
return true; // if (c.mouseDragged(
} // x - relativeBounds.left,
return false; // y - relativeBounds.top,
} // button,
// x2 - relativeBounds.left,
@Override // y2 - relativeBounds.top
public boolean keyReleased(int i, int j, int k) { // ))
for (Component<?> c : components) { // return true;
if (c.keyReleased(i, j, k)) // }
return true; // return false;
} // }
return false; //
} // @Override
// public boolean mouseScrolled(double x, double y, double f) {
@Override // for (Component<?> c : components) {
public boolean charTyped(char cc, int i) { // if (c.mouseScrolled(x - relativeBounds.left, y - relativeBounds.top, f))
for (Component<?> c : components) { // return true;
if (c.charTyped(cc, i)) // }
return true; // return false;
} // }
return false; //
} // @Override
// public boolean keyPressed(int i, int j, int k) {
@Override // for (Component<?> c : components) {
public boolean changeFocus(boolean bl) { // if (c.keyPressed(i, j, k))
for (Component<?> c : components) { // return true;
if (c.changeFocus(bl)) // }
return true; // return false;
} // }
return false; //
} // @Override
// public boolean keyReleased(int i, int j, int k) {
@Override // for (Component<?> c : components) {
public boolean isMouseOver(double x, double y) { // if (c.keyReleased(i, j, k))
for (Component<?> c : components) { // return true;
if (c.isMouseOver(x, y)) // }
return true; // return false;
} // }
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;
// }
} }