@@ -2075,6 +2075,83 @@ private boolean isPinchZoom(MouseEvent e) {
20752075 private Cursor defaultCursor = Cursor.getDefaultCursor();
20762076 private int currentCursor = 0;
20772077 private java.util.Timer reSize;
2078+ private final Object pendingSizeChangeLock = new Object();
2079+ private int pendingSizeChangeWidth = -1;
2080+ private int pendingSizeChangeHeight = -1;
2081+ private boolean pendingSizeChangeQueued;
2082+ private boolean pendingRevalidateAfterSizeChange;
2083+ private boolean pendingForceRevalidateAfterSizeChange;
2084+ private boolean pendingResetGraphicsAfterSizeChange;
2085+ private boolean pendingDelayedWindowRepaint;
2086+
2087+ private void queueSizeChangeEvent(int w, int h, boolean revalidate, boolean forceRevalidate, boolean resetGraphics, boolean delayedWindowRepaint) {
2088+ synchronized (pendingSizeChangeLock) {
2089+ pendingSizeChangeWidth = w;
2090+ pendingSizeChangeHeight = h;
2091+ pendingRevalidateAfterSizeChange |= revalidate;
2092+ pendingForceRevalidateAfterSizeChange |= forceRevalidate;
2093+ pendingResetGraphicsAfterSizeChange |= resetGraphics;
2094+ pendingDelayedWindowRepaint |= delayedWindowRepaint;
2095+ if (pendingSizeChangeQueued) {
2096+ return;
2097+ }
2098+ pendingSizeChangeQueued = true;
2099+ }
2100+ Display.getInstance().callSerially(new Runnable() {
2101+ public void run() {
2102+ int queuedW;
2103+ int queuedH;
2104+ boolean doRevalidate;
2105+ boolean doForceRevalidate;
2106+ boolean doResetGraphics;
2107+ boolean doDelayedWindowRepaint;
2108+ synchronized (pendingSizeChangeLock) {
2109+ queuedW = pendingSizeChangeWidth;
2110+ queuedH = pendingSizeChangeHeight;
2111+ doRevalidate = pendingRevalidateAfterSizeChange;
2112+ doForceRevalidate = pendingForceRevalidateAfterSizeChange;
2113+ doResetGraphics = pendingResetGraphicsAfterSizeChange;
2114+ doDelayedWindowRepaint = pendingDelayedWindowRepaint;
2115+ pendingRevalidateAfterSizeChange = false;
2116+ pendingForceRevalidateAfterSizeChange = false;
2117+ pendingResetGraphicsAfterSizeChange = false;
2118+ pendingDelayedWindowRepaint = false;
2119+ pendingSizeChangeQueued = false;
2120+ }
2121+
2122+ JavaSEPort.this.sizeChanged(queuedW, queuedH);
2123+
2124+ if (doResetGraphics) {
2125+ g2dInstance = null;
2126+ }
2127+
2128+ Form f = Display.getInstance().getCurrent();
2129+ if (f != null) {
2130+ if (doForceRevalidate) {
2131+ f.forceRevalidate();
2132+ } else if (doRevalidate) {
2133+ f.revalidate();
2134+ }
2135+ }
2136+
2137+ if (doDelayedWindowRepaint) {
2138+ new Thread(new Runnable() {
2139+ @Override
2140+ public void run() {
2141+ try {
2142+ Thread.sleep(1500);
2143+ } catch (Exception e) {
2144+ }
2145+ if (window != null) {
2146+ window.repaint();
2147+ }
2148+ }
2149+ }).start();
2150+ reSize = null;
2151+ }
2152+ }
2153+ });
2154+ }
20782155
20792156 public void mouseMoved(MouseEvent e) {
20802157 e.consume();
@@ -2138,11 +2215,7 @@ public void setBounds(int x, int y, int w, int h) {
21382215 Preferences pref = Preferences.userNodeForPackage(JavaSEPort.class);
21392216 boolean desktopSkin = pref.getBoolean("desktopSkin", false);
21402217 if (getSkin() == null && !desktopSkin) {
2141- Display.getInstance().callSerially(new Runnable() {
2142- public void run() {
2143- JavaSEPort.this.sizeChanged((int)(getWidth() * retinaScale), (int)(getHeight() * retinaScale));
2144- }
2145- });
2218+ queueSizeChangeEvent((int)(getWidth() * retinaScale), (int)(getHeight() * retinaScale), false, false, false, false);
21462219 }
21472220
21482221 }
@@ -2186,17 +2259,7 @@ public void run() {
21862259 setSize((int)topSize.getWidth(), (int)topSize.getHeight());
21872260 canvas.setForcedSize(new Dimension(getWidth(), getHeight()));
21882261
2189- Display.getInstance().callSerially(new Runnable() {
2190- public void run() {
2191-
2192- JavaSEPort.this.sizeChanged((int)(getWidth() * retinaScale), (int)(getHeight() * retinaScale));
2193-
2194- Form f = Display.getInstance().getCurrent();
2195- if (f != null) {
2196- f.revalidate();
2197- }
2198- }
2199- });
2262+ queueSizeChangeEvent((int)(getWidth() * retinaScale), (int)(getHeight() * retinaScale), true, false, false, false);
22002263 return;
22012264 }
22022265
@@ -2214,32 +2277,7 @@ public void run() {
22142277 // System.out.println("Resize with media container");
22152278 // JavaSEPort.this.sizeChanged((int)(mediaContainer.getWidth() * retinaScale), (int)(mediaContainer.getHeight() * retinaScale));
22162279 //}else{
2217- Display.getInstance().callSerially(new Runnable() {
2218- public void run() {
2219- JavaSEPort.this.sizeChanged((int)(getWidth() * retinaScale), (int)(getHeight() * retinaScale));
2220- g2dInstance = null;
2221- Form f = Display.getInstance().getCurrent();
2222- if (f != null) {
2223- f.forceRevalidate();
2224- }
2225-
2226- // probably not necessary
2227- new Thread(new Runnable() {
2228- @Override
2229- public void run() {
2230- try {
2231- Thread.sleep(1500);
2232- } catch (Exception e) {
2233- }
2234- if (window != null) {
2235- window.repaint();
2236- }
2237- }
2238- }).start();
2239-
2240- reSize = null;
2241- }
2242- });
2280+ queueSizeChangeEvent((int)(getWidth() * retinaScale), (int)(getHeight() * retinaScale), false, true, true, true);
22432281
22442282 //}
22452283
0 commit comments