DraggableWidget.java 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. /*
  2. * Roughly Enough Items by Danielshe.
  3. * Licensed under the MIT License.
  4. */
  5. package me.shedaniel.rei.gui.widget;
  6. import me.shedaniel.math.api.Point;
  7. import me.shedaniel.math.api.Rectangle;
  8. import me.shedaniel.math.impl.PointHelper;
  9. import me.shedaniel.rei.api.annotations.Internal;
  10. import net.minecraft.client.MinecraftClient;
  11. import net.minecraft.client.gui.Element;
  12. import net.minecraft.client.util.Window;
  13. @Deprecated
  14. @Internal
  15. public abstract class DraggableWidget extends WidgetWithBounds {
  16. public boolean dragged = false;
  17. private Point midPoint, startPoint;
  18. private int relateX, relateY;
  19. public DraggableWidget(Point startingPoint) {
  20. initWidgets(midPoint = startingPoint);
  21. }
  22. public DraggableWidget() {
  23. this(new Point(MinecraftClient.getInstance().getWindow().getScaledWidth() / 2, MinecraftClient.getInstance().getWindow().getScaledHeight() / 2));
  24. }
  25. protected abstract void initWidgets(Point midPoint);
  26. public abstract void updateWidgets(Point midPoint);
  27. public abstract Rectangle getGrabBounds();
  28. public abstract Rectangle getDragBounds();
  29. public final Point getMidPoint() {
  30. return midPoint;
  31. }
  32. @Override
  33. public boolean mouseDragged(double double_1, double double_2, int int_1, double double_3, double double_4) {
  34. Point mouse = PointHelper.fromMouse();
  35. if (int_1 == 0) {
  36. if (!dragged) {
  37. if (getGrabBounds().contains(mouse)) {
  38. startPoint = new Point(midPoint.x, midPoint.y);
  39. relateX = mouse.x - midPoint.x;
  40. relateY = mouse.y - midPoint.y;
  41. dragged = true;
  42. }
  43. } else {
  44. Window window = minecraft.getWindow();
  45. midPoint = processMidPoint(midPoint, mouse, startPoint, window, relateX, relateY);
  46. updateWidgets(midPoint);
  47. }
  48. return true;
  49. }
  50. for (Element listener : children())
  51. if (listener.mouseDragged(double_1, double_2, int_1, double_3, double_4))
  52. return true;
  53. return false;
  54. }
  55. public abstract Point processMidPoint(Point midPoint, Point mouse, Point startPoint, Window window, int relateX, int relateY);
  56. @Override
  57. public boolean mouseReleased(double double_1, double double_2, int int_1) {
  58. if (int_1 == 0)
  59. if (dragged) {
  60. dragged = false;
  61. onMouseReleaseMidPoint(getMidPoint());
  62. return true;
  63. }
  64. for (Element listener : children())
  65. if (listener.mouseReleased(double_1, double_2, int_1))
  66. return true;
  67. return false;
  68. }
  69. public void onMouseReleaseMidPoint(Point midPoint) {
  70. }
  71. }