bobmarley12345

tunnel and bubble routed event system

Feb 9th, 2022 (edited)
231
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.34 KB | None | 0 0
  1.     public static void doHandleMouseMovement(Control topControl, Vector2d oldPos, Vector2d newPos) {
  2.         List<TunnelHitPair> tunnelList = new ArrayList<TunnelHitPair>();
  3.         TunnelHitPair top = new TunnelHitPair(topControl);
  4.         top.hitNewPos = topControl.getScreenRegion().intersects(newPos);
  5.         top.hitOldPos = topControl.getScreenRegion().intersects(oldPos);
  6.         tunnelList.add(top);
  7.         doDoubleMouseHitScan(topControl, oldPos, newPos, tunnelList);
  8.         MouseMoveEvent event = new MouseMoveEvent(oldPos.copy(), newPos.copy());
  9.         for(int i = 0, len = tunnelList.size(); i < len; i++) {
  10.             if (event.isCancelled()) {
  11.                 GuiGLEngine.getInstance().getMouse().setPosition(oldPos.x, oldPos.y);
  12.                 return;
  13.             }
  14.  
  15.             TunnelHitPair hit = tunnelList.get(i);
  16.             Control control = hit.control;
  17.             if (hit.hitNewPos && hit.hitOldPos) {
  18.                 if (control.isMouseOver) {
  19.                     control.onPreviewMouseMove(event);
  20.                     control.eventPreviewOnMouseMove.raise(event);
  21.                 }
  22.                 else {
  23.                     control.isPreviewMouseOver = true;
  24.                     control.onPreviewMouseEnter(event);
  25.                     control.eventPreviewOnMouseEnter.raise(event);
  26.                 }
  27.             }
  28.             else if (hit.hitNewPos) {
  29.                 control.isPreviewMouseOver = true;
  30.                 control.onPreviewMouseEnter(event);
  31.                 control.eventPreviewOnMouseEnter.raise(event);
  32.             }
  33.             else if (hit.hitOldPos) {
  34.                 control.isPreviewMouseOver = false;
  35.                 control.onPreviewMouseLeave(event);
  36.                 control.eventPreviewOnMouseLeave.raise(event);
  37.             }
  38.         }
  39.  
  40.         for (int i = tunnelList.size() - 1; i >= 0; i--) {
  41.             if (event.isHandled()) {
  42.                 break;
  43.             }
  44.  
  45.             TunnelHitPair hit = tunnelList.get(i);
  46.             Control control = hit.control;
  47.             control.isPreviewMouseOver = false;
  48.             if (hit.hitNewPos && hit.hitOldPos) {
  49.                 if (control.isMouseOver) {
  50.                     control.onMouseMove(event);
  51.                     control.eventOnMouseMove.raise(event);
  52.                 }
  53.                 else {
  54.                     control.isMouseOver = true;
  55.                     control.onMouseEnter(event);
  56.                     control.eventOnMouseEnter.raise(event);
  57.                 }
  58.  
  59.                 if (control.isHittable(event.getNewRelativeTo(control), newPos)) {
  60.                     event.setHandled(true);
  61.                 }
  62.             }
  63.             else if (hit.hitNewPos) {
  64.                 control.isMouseOver = true;
  65.                 control.onMouseEnter(event);
  66.                 control.eventOnMouseEnter.raise(event);
  67.                 if (control.isHittable(event.getNewRelativeTo(control), newPos)) {
  68.                     event.setHandled(true);
  69.                 }
  70.             }
  71.             else if (hit.hitOldPos) {
  72.                 control.isMouseOver = false;
  73.                 control.onMouseLeave(event);
  74.                 control.eventOnMouseLeave.raise(event);
  75.                 if (control.isHittable(event.getNewRelativeTo(control), newPos)) {
  76.                     event.setHandled(true);
  77.                 }
  78.             }
  79.         }
  80.     }
Add Comment
Please, Sign In to add comment