DraggableWidget.java 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package me.shedaniel.rei.gui.widget;
  2. import me.shedaniel.rei.client.ClientHelper;
  3. import net.minecraft.client.MinecraftClient;
  4. import net.minecraft.client.util.Window;
  5. import java.awt.*;
  6. public abstract class DraggableWidget implements HighlightableWidget {
  7. protected boolean dragged = false;
  8. private Point midPoint, startPoint;
  9. private int relateX, relateY;
  10. public DraggableWidget(Point startingPoint) {
  11. initWidgets(midPoint = startingPoint);
  12. }
  13. public DraggableWidget() {
  14. this(new Point(MinecraftClient.getInstance().window.getScaledWidth() / 2, MinecraftClient.getInstance().window.getScaledHeight() / 2));
  15. }
  16. protected abstract void initWidgets(Point midPoint);
  17. public abstract void updateWidgets(Point midPoint);
  18. public abstract Rectangle getGrabBounds();
  19. public abstract Rectangle getDragBounds();
  20. public final Point getMidPoint() {
  21. return midPoint;
  22. }
  23. @Override
  24. public boolean mouseDragged(double double_1, double double_2, int int_1, double double_3, double double_4) {
  25. Point mouse = ClientHelper.getMouseLocation();
  26. if (int_1 == 0) {
  27. if (!dragged) {
  28. if (getGrabBounds().contains(mouse)) {
  29. startPoint = new Point(midPoint.x, midPoint.y);
  30. relateX = mouse.x - midPoint.x;
  31. relateY = mouse.y - midPoint.y;
  32. dragged = true;
  33. }
  34. } else {
  35. Window window = MinecraftClient.getInstance().window;
  36. midPoint = processMidPoint(midPoint, mouse, startPoint, window, relateX, relateY);
  37. updateWidgets(midPoint);
  38. }
  39. return true;
  40. }
  41. for(IWidget widget : getListeners())
  42. if (widget.mouseDragged(double_1, double_2, int_1, double_3, double_4))
  43. return true;
  44. return false;
  45. }
  46. public abstract Point processMidPoint(Point midPoint, Point mouse, Point startPoint, Window window, int relateX, int relateY);
  47. @Override
  48. public boolean mouseReleased(double double_1, double double_2, int int_1) {
  49. if (int_1 == 0)
  50. if (dragged) {
  51. dragged = false;
  52. onMouseReleaseMidPoint(getMidPoint());
  53. return true;
  54. }
  55. for(IWidget widget : getListeners())
  56. if (widget.mouseReleased(double_1, double_2, int_1))
  57. return true;
  58. return false;
  59. }
  60. public void onMouseReleaseMidPoint(Point midPoint) {}
  61. }