48 this.stage = stage; 49 } 50 51 @Override 52 public Void run() { 53 if (stage == null || stage.stageListener == null) { 54 return null; 55 } 56 switch (type) { 57 case WindowEvent.MINIMIZE: 58 stage.stageListener.changedIconified(true); 59 break; 60 case WindowEvent.MAXIMIZE: 61 stage.stageListener.changedMaximized(true); 62 break; 63 case WindowEvent.RESTORE: 64 stage.stageListener.changedIconified(false); 65 stage.stageListener.changedMaximized(false); 66 break; 67 case WindowEvent.MOVE: { 68 float pScale = window.getPlatformScale(); 69 Screen screen = window.getScreen(); 70 float sx = screen == null ? 0 : screen.getX(); 71 float sy = screen == null ? 0 : screen.getY(); 72 float wx = window.getX(); 73 float wy = window.getY(); 74 float newx = sx + (wx - sx) / pScale; 75 float newy = sy + (wy - sy) / pScale; 76 stage.stageListener.changedLocation(newx, newy); 77 //We need to sync the new x,y for painting 78 if (!Application.GetApplication().hasWindowManager()) { 79 QuantumToolkit.runWithRenderLock(() -> { 80 GlassScene scene = stage.getScene(); 81 if (scene != null) { 82 scene.updateSceneState(); 83 } 84 return null; 85 }); 86 } 87 break; 88 } 89 case WindowEvent.RESIZE: { 90 float pScale = window.getPlatformScale(); 91 stage.stageListener.changedSize(window.getWidth() / pScale, 92 window.getHeight() / pScale); 93 break; 94 } 95 case WindowEvent.FOCUS_GAINED: 96 WindowStage.addActiveWindow(stage); 97 stage.stageListener.changedFocused(true, FocusCause.ACTIVATED); 98 break; 99 case WindowEvent.FOCUS_LOST: 100 stage.stageListener.changedFocused(false, FocusCause.DEACTIVATED); 101 break; 102 case WindowEvent.FOCUS_UNGRAB: 103 stage.stageListener.focusUngrab(); 104 break; 105 case WindowEvent.FOCUS_GAINED_FORWARD: 106 WindowStage.addActiveWindow(stage); 107 stage.stageListener.changedFocused(true, FocusCause.TRAVERSED_FORWARD); 108 break; 109 case WindowEvent.FOCUS_GAINED_BACKWARD: 110 WindowStage.addActiveWindow(stage); 111 stage.stageListener.changedFocused(true, FocusCause.TRAVERSED_BACKWARD); 112 break; | 48 this.stage = stage; 49 } 50 51 @Override 52 public Void run() { 53 if (stage == null || stage.stageListener == null) { 54 return null; 55 } 56 switch (type) { 57 case WindowEvent.MINIMIZE: 58 stage.stageListener.changedIconified(true); 59 break; 60 case WindowEvent.MAXIMIZE: 61 stage.stageListener.changedMaximized(true); 62 break; 63 case WindowEvent.RESTORE: 64 stage.stageListener.changedIconified(false); 65 stage.stageListener.changedMaximized(false); 66 break; 67 case WindowEvent.MOVE: { 68 float wx = window.getX(); 69 float wy = window.getY(); 70 Screen screen = window.getScreen(); 71 float newx, newy; 72 if (screen != null) { 73 float pScaleX = screen.getPlatformScaleX(); 74 float pScaleY = screen.getPlatformScaleY(); 75 float sx = screen.getX(); 76 float sy = screen.getY(); 77 float px = screen.getPlatformX(); 78 float py = screen.getPlatformY(); 79 newx = sx + (wx - px) / pScaleX; 80 newy = sy + (wy - py) / pScaleY; 81 } else { 82 newx = wx; 83 newy = wy; 84 } 85 stage.stageListener.changedLocation(newx, newy); 86 //We need to sync the new x,y for painting 87 if (!Application.GetApplication().hasWindowManager()) { 88 QuantumToolkit.runWithRenderLock(() -> { 89 GlassScene scene = stage.getScene(); 90 if (scene != null) { 91 scene.updateSceneState(); 92 } 93 return null; 94 }); 95 } 96 break; 97 } 98 case WindowEvent.RESIZE: { 99 float pScaleX = window.getPlatformScaleX(); 100 float pScaleY = window.getPlatformScaleY(); 101 stage.stageListener.changedSize(window.getWidth() / pScaleX, 102 window.getHeight() / pScaleY); 103 break; 104 } 105 case WindowEvent.RESCALE: { 106 float outScaleX = window.getOutputScaleX(); 107 float outScaleY = window.getOutputScaleY(); 108 stage.stageListener.changedScale(outScaleX, outScaleY); 109 // We need to sync the new scales for painting 110 QuantumToolkit.runWithRenderLock(() -> { 111 GlassScene scene = stage.getScene(); 112 if (scene != null) { 113 scene.entireSceneNeedsRepaint(); 114 scene.updateSceneState(); 115 } 116 return null; 117 }); 118 break; 119 } 120 case WindowEvent.FOCUS_GAINED: 121 WindowStage.addActiveWindow(stage); 122 stage.stageListener.changedFocused(true, FocusCause.ACTIVATED); 123 break; 124 case WindowEvent.FOCUS_LOST: 125 stage.stageListener.changedFocused(false, FocusCause.DEACTIVATED); 126 break; 127 case WindowEvent.FOCUS_UNGRAB: 128 stage.stageListener.focusUngrab(); 129 break; 130 case WindowEvent.FOCUS_GAINED_FORWARD: 131 WindowStage.addActiveWindow(stage); 132 stage.stageListener.changedFocused(true, FocusCause.TRAVERSED_FORWARD); 133 break; 134 case WindowEvent.FOCUS_GAINED_BACKWARD: 135 WindowStage.addActiveWindow(stage); 136 stage.stageListener.changedFocused(true, FocusCause.TRAVERSED_BACKWARD); 137 break; |