Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static void doHandleMouseMovement(Control topControl, Vector2d oldPos, Vector2d newPos) {
- List<TunnelHitPair> tunnelList = new ArrayList<TunnelHitPair>();
- TunnelHitPair top = new TunnelHitPair(topControl);
- top.hitNewPos = topControl.getScreenRegion().intersects(newPos);
- top.hitOldPos = topControl.getScreenRegion().intersects(oldPos);
- tunnelList.add(top);
- doDoubleMouseHitScan(topControl, oldPos, newPos, tunnelList);
- MouseMoveEvent event = new MouseMoveEvent(oldPos.copy(), newPos.copy());
- for(int i = 0, len = tunnelList.size(); i < len; i++) {
- if (event.isCancelled()) {
- GuiGLEngine.getInstance().getMouse().setPosition(oldPos.x, oldPos.y);
- return;
- }
- TunnelHitPair hit = tunnelList.get(i);
- Control control = hit.control;
- if (hit.hitNewPos && hit.hitOldPos) {
- if (control.isMouseOver) {
- control.onPreviewMouseMove(event);
- control.eventPreviewOnMouseMove.raise(event);
- }
- else {
- control.isPreviewMouseOver = true;
- control.onPreviewMouseEnter(event);
- control.eventPreviewOnMouseEnter.raise(event);
- }
- }
- else if (hit.hitNewPos) {
- control.isPreviewMouseOver = true;
- control.onPreviewMouseEnter(event);
- control.eventPreviewOnMouseEnter.raise(event);
- }
- else if (hit.hitOldPos) {
- control.isPreviewMouseOver = false;
- control.onPreviewMouseLeave(event);
- control.eventPreviewOnMouseLeave.raise(event);
- }
- }
- for (int i = tunnelList.size() - 1; i >= 0; i--) {
- if (event.isHandled()) {
- break;
- }
- TunnelHitPair hit = tunnelList.get(i);
- Control control = hit.control;
- control.isPreviewMouseOver = false;
- if (hit.hitNewPos && hit.hitOldPos) {
- if (control.isMouseOver) {
- control.onMouseMove(event);
- control.eventOnMouseMove.raise(event);
- }
- else {
- control.isMouseOver = true;
- control.onMouseEnter(event);
- control.eventOnMouseEnter.raise(event);
- }
- if (control.isHittable(event.getNewRelativeTo(control), newPos)) {
- event.setHandled(true);
- }
- }
- else if (hit.hitNewPos) {
- control.isMouseOver = true;
- control.onMouseEnter(event);
- control.eventOnMouseEnter.raise(event);
- if (control.isHittable(event.getNewRelativeTo(control), newPos)) {
- event.setHandled(true);
- }
- }
- else if (hit.hitOldPos) {
- control.isMouseOver = false;
- control.onMouseLeave(event);
- control.eventOnMouseLeave.raise(event);
- if (control.isHittable(event.getNewRelativeTo(control), newPos)) {
- event.setHandled(true);
- }
- }
- }
- }
Add Comment
Please, Sign In to add comment