84 private static native void nativePushNSWindowToFront(long nsWindowPtr);
85 private static native void nativeSetNSWindowTitle(long nsWindowPtr, String title);
86 private static native void nativeRevalidateNSWindowShadow(long nsWindowPtr);
87 private static native void nativeSetNSWindowMinimizedIcon(long nsWindowPtr, long nsImage);
88 private static native void nativeSetNSWindowRepresentedFilename(long nsWindowPtr, String representedFilename);
89 private static native void nativeSetEnabled(long nsWindowPtr, boolean isEnabled);
90 private static native void nativeSynthesizeMouseEnteredExitedEvents();
91 private static native void nativeSynthesizeMouseEnteredExitedEvents(long nsWindowPtr, int eventType);
92 private static native void nativeDispose(long nsWindowPtr);
93 private static native void nativeEnterFullScreenMode(long nsWindowPtr);
94 private static native void nativeExitFullScreenMode(long nsWindowPtr);
95 static native CPlatformWindow nativeGetTopmostPlatformWindowUnderMouse();
96
97 // Loger to report issues happened during execution but that do not affect functionality
98 private static final PlatformLogger logger = PlatformLogger.getLogger("sun.lwawt.macosx.CPlatformWindow");
99 private static final PlatformLogger focusLogger = PlatformLogger.getLogger("sun.lwawt.macosx.focus.CPlatformWindow");
100
101 // for client properties
102 public static final String WINDOW_BRUSH_METAL_LOOK = "apple.awt.brushMetalLook";
103 public static final String WINDOW_DRAGGABLE_BACKGROUND = "apple.awt.draggableWindowBackground";
104 public static final String WINDOW_DARK_APPEARANCE = "apple.awt.windowDarkAppearance";
105
106 public static final String WINDOW_ALPHA = "Window.alpha";
107 public static final String WINDOW_SHADOW = "Window.shadow";
108
109 public static final String WINDOW_STYLE = "Window.style";
110 public static final String WINDOW_SHADOW_REVALIDATE_NOW = "apple.awt.windowShadow.revalidateNow";
111
112 public static final String WINDOW_DOCUMENT_MODIFIED = "Window.documentModified";
113 public static final String WINDOW_DOCUMENT_FILE = "Window.documentFile";
114
115 public static final String WINDOW_CLOSEABLE = "Window.closeable";
116 public static final String WINDOW_MINIMIZABLE = "Window.minimizable";
117 public static final String WINDOW_ZOOMABLE = "Window.zoomable";
118 public static final String WINDOW_HIDES_ON_DEACTIVATE="Window.hidesOnDeactivate";
119
120 public static final String WINDOW_DOC_MODAL_SHEET = "apple.awt.documentModalSheet";
121 public static final String WINDOW_FADE_DELEGATE = "apple.awt._windowFadeDelegate";
122 public static final String WINDOW_FADE_IN = "apple.awt._windowFadeIn";
123 public static final String WINDOW_FADE_OUT = "apple.awt._windowFadeOut";
124 public static final String WINDOW_FULLSCREENABLE = "apple.awt.fullscreenable";
132
133 // window style bits
134 static final int _RESERVED_FOR_DATA = 1 << 0;
135
136 // corresponds to native style mask bits
137 static final int DECORATED = 1 << 1;
138 static final int TEXTURED = 1 << 2;
139 static final int UNIFIED = 1 << 3;
140 static final int UTILITY = 1 << 4;
141 static final int HUD = 1 << 5;
142 static final int SHEET = 1 << 6;
143
144 static final int CLOSEABLE = 1 << 7;
145 static final int MINIMIZABLE = 1 << 8;
146
147 static final int RESIZABLE = 1 << 9; // both a style bit and prop bit
148 static final int NONACTIVATING = 1 << 24;
149 static final int IS_DIALOG = 1 << 25;
150 static final int IS_MODAL = 1 << 26;
151 static final int IS_POPUP = 1 << 27;
152 static final int DARK_TITLE_BAR = 1 << 28;
153
154 static final int _STYLE_PROP_BITMASK = DECORATED | TEXTURED | UNIFIED | UTILITY | HUD | SHEET | CLOSEABLE | MINIMIZABLE | RESIZABLE;
155
156 // corresponds to method-based properties
157 static final int HAS_SHADOW = 1 << 10;
158 static final int ZOOMABLE = 1 << 11;
159
160 static final int ALWAYS_ON_TOP = 1 << 15;
161 static final int HIDES_ON_DEACTIVATE = 1 << 17;
162 static final int DRAGGABLE_BACKGROUND = 1 << 19;
163 static final int DOCUMENT_MODIFIED = 1 << 21;
164 static final int FULLSCREENABLE = 1 << 23;
165
166 static final int _METHOD_PROP_BITMASK = RESIZABLE | HAS_SHADOW | ZOOMABLE | ALWAYS_ON_TOP | HIDES_ON_DEACTIVATE | DRAGGABLE_BACKGROUND | DOCUMENT_MODIFIED | FULLSCREENABLE;
167
168 // corresponds to callback-based properties
169 static final int SHOULD_BECOME_KEY = 1 << 12;
170 static final int SHOULD_BECOME_MAIN = 1 << 13;
171 static final int MODAL_EXCLUDED = 1 << 16;
172
215 boolean fullscrenable = Boolean.parseBoolean(value.toString());
216 if (c.target instanceof RootPaneContainer
217 && c.getPeer().getPeerType() == PeerType.FRAME) {
218 if (c.isInFullScreen && !fullscrenable) {
219 c.toggleFullScreen();
220 }
221 }
222 c.setStyleBits(FULLSCREENABLE, fullscrenable);
223 }},
224 new Property<CPlatformWindow>(WINDOW_SHADOW_REVALIDATE_NOW) { public void applyProperty(final CPlatformWindow c, final Object value) {
225 c.execute(ptr -> nativeRevalidateNSWindowShadow(ptr));
226 }},
227 new Property<CPlatformWindow>(WINDOW_DOCUMENT_FILE) { public void applyProperty(final CPlatformWindow c, final Object value) {
228 if (value == null || !(value instanceof java.io.File)) {
229 c.execute(ptr->nativeSetNSWindowRepresentedFilename(ptr, null));
230 return;
231 }
232
233 final String filename = ((java.io.File)value).getAbsolutePath();
234 c.execute(ptr->nativeSetNSWindowRepresentedFilename(ptr, filename));
235 }},
236 new Property<CPlatformWindow>(WINDOW_DARK_APPEARANCE) { public void applyProperty(final CPlatformWindow c, final Object value) {
237 c.setStyleBits(DARK_TITLE_BAR, value == null ? true : Boolean.parseBoolean(value.toString()));
238 }},
239 }) {
240 @SuppressWarnings("deprecation")
241 public CPlatformWindow convertJComponentToTarget(final JRootPane p) {
242 Component root = SwingUtilities.getRoot(p);
243 final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
244 if (root == null || acc.getPeer(root) == null) return null;
245 return (CPlatformWindow)((LWWindowPeer)acc.getPeer(root)).getPlatformWindow();
246 }
247 };
248 private final Comparator<Window> siblingsComparator = (w1, w2) -> {
249 if (w1 == w2) {
250 return 0;
251 }
252 ComponentAccessor componentAccessor = AWTAccessor.getComponentAccessor();
253 Object p1 = componentAccessor.getPeer(w1);
254 Object p2 = componentAccessor.getPeer(w2);
255 if (p1 instanceof LWWindowPeer && p2 instanceof LWWindowPeer) {
256 return Long.compare(
257 ((CPlatformWindow) (((LWWindowPeer) p1).getPlatformWindow())).lastBecomeMainTime,
258 ((CPlatformWindow) (((LWWindowPeer) p2).getPlatformWindow())).lastBecomeMainTime);
456
457 prop = rootpane.getClientProperty(WINDOW_ZOOMABLE);
458 if (prop != null) {
459 styleBits = SET(styleBits, ZOOMABLE, Boolean.parseBoolean(prop.toString()));
460 }
461
462 prop = rootpane.getClientProperty(WINDOW_FULLSCREENABLE);
463 if (prop != null) {
464 styleBits = SET(styleBits, FULLSCREENABLE, Boolean.parseBoolean(prop.toString()));
465 }
466
467 prop = rootpane.getClientProperty(WINDOW_SHADOW);
468 if (prop != null) {
469 styleBits = SET(styleBits, HAS_SHADOW, Boolean.parseBoolean(prop.toString()));
470 }
471
472 prop = rootpane.getClientProperty(WINDOW_DRAGGABLE_BACKGROUND);
473 if (prop != null) {
474 styleBits = SET(styleBits, DRAGGABLE_BACKGROUND, Boolean.parseBoolean(prop.toString()));
475 }
476
477 prop = rootpane.getClientProperty(WINDOW_DARK_APPEARANCE);
478 if (prop != null) {
479 styleBits = SET(styleBits, DARK_TITLE_BAR, Boolean.parseBoolean(prop.toString()));
480 }
481 }
482
483 if (isDialog) {
484 styleBits = SET(styleBits, IS_DIALOG, true);
485 if (((Dialog) target).isModal()) {
486 styleBits = SET(styleBits, IS_MODAL, true);
487 }
488 }
489
490 peer.setTextured(IS(TEXTURED, styleBits));
491
492 return styleBits;
493 }
494
495 // this is the counter-point to -[CWindow _nativeSetStyleBit:]
496 private void setStyleBits(final int mask, final boolean value) {
497 execute(ptr -> nativeSetNSWindowStyleBits(ptr, mask, value ? mask : 0));
498 }
499
500 private native void _toggleFullScreenMode(final long model);
|
84 private static native void nativePushNSWindowToFront(long nsWindowPtr);
85 private static native void nativeSetNSWindowTitle(long nsWindowPtr, String title);
86 private static native void nativeRevalidateNSWindowShadow(long nsWindowPtr);
87 private static native void nativeSetNSWindowMinimizedIcon(long nsWindowPtr, long nsImage);
88 private static native void nativeSetNSWindowRepresentedFilename(long nsWindowPtr, String representedFilename);
89 private static native void nativeSetEnabled(long nsWindowPtr, boolean isEnabled);
90 private static native void nativeSynthesizeMouseEnteredExitedEvents();
91 private static native void nativeSynthesizeMouseEnteredExitedEvents(long nsWindowPtr, int eventType);
92 private static native void nativeDispose(long nsWindowPtr);
93 private static native void nativeEnterFullScreenMode(long nsWindowPtr);
94 private static native void nativeExitFullScreenMode(long nsWindowPtr);
95 static native CPlatformWindow nativeGetTopmostPlatformWindowUnderMouse();
96
97 // Loger to report issues happened during execution but that do not affect functionality
98 private static final PlatformLogger logger = PlatformLogger.getLogger("sun.lwawt.macosx.CPlatformWindow");
99 private static final PlatformLogger focusLogger = PlatformLogger.getLogger("sun.lwawt.macosx.focus.CPlatformWindow");
100
101 // for client properties
102 public static final String WINDOW_BRUSH_METAL_LOOK = "apple.awt.brushMetalLook";
103 public static final String WINDOW_DRAGGABLE_BACKGROUND = "apple.awt.draggableWindowBackground";
104
105 public static final String WINDOW_ALPHA = "Window.alpha";
106 public static final String WINDOW_SHADOW = "Window.shadow";
107
108 public static final String WINDOW_STYLE = "Window.style";
109 public static final String WINDOW_SHADOW_REVALIDATE_NOW = "apple.awt.windowShadow.revalidateNow";
110
111 public static final String WINDOW_DOCUMENT_MODIFIED = "Window.documentModified";
112 public static final String WINDOW_DOCUMENT_FILE = "Window.documentFile";
113
114 public static final String WINDOW_CLOSEABLE = "Window.closeable";
115 public static final String WINDOW_MINIMIZABLE = "Window.minimizable";
116 public static final String WINDOW_ZOOMABLE = "Window.zoomable";
117 public static final String WINDOW_HIDES_ON_DEACTIVATE="Window.hidesOnDeactivate";
118
119 public static final String WINDOW_DOC_MODAL_SHEET = "apple.awt.documentModalSheet";
120 public static final String WINDOW_FADE_DELEGATE = "apple.awt._windowFadeDelegate";
121 public static final String WINDOW_FADE_IN = "apple.awt._windowFadeIn";
122 public static final String WINDOW_FADE_OUT = "apple.awt._windowFadeOut";
123 public static final String WINDOW_FULLSCREENABLE = "apple.awt.fullscreenable";
131
132 // window style bits
133 static final int _RESERVED_FOR_DATA = 1 << 0;
134
135 // corresponds to native style mask bits
136 static final int DECORATED = 1 << 1;
137 static final int TEXTURED = 1 << 2;
138 static final int UNIFIED = 1 << 3;
139 static final int UTILITY = 1 << 4;
140 static final int HUD = 1 << 5;
141 static final int SHEET = 1 << 6;
142
143 static final int CLOSEABLE = 1 << 7;
144 static final int MINIMIZABLE = 1 << 8;
145
146 static final int RESIZABLE = 1 << 9; // both a style bit and prop bit
147 static final int NONACTIVATING = 1 << 24;
148 static final int IS_DIALOG = 1 << 25;
149 static final int IS_MODAL = 1 << 26;
150 static final int IS_POPUP = 1 << 27;
151
152 static final int _STYLE_PROP_BITMASK = DECORATED | TEXTURED | UNIFIED | UTILITY | HUD | SHEET | CLOSEABLE | MINIMIZABLE | RESIZABLE;
153
154 // corresponds to method-based properties
155 static final int HAS_SHADOW = 1 << 10;
156 static final int ZOOMABLE = 1 << 11;
157
158 static final int ALWAYS_ON_TOP = 1 << 15;
159 static final int HIDES_ON_DEACTIVATE = 1 << 17;
160 static final int DRAGGABLE_BACKGROUND = 1 << 19;
161 static final int DOCUMENT_MODIFIED = 1 << 21;
162 static final int FULLSCREENABLE = 1 << 23;
163
164 static final int _METHOD_PROP_BITMASK = RESIZABLE | HAS_SHADOW | ZOOMABLE | ALWAYS_ON_TOP | HIDES_ON_DEACTIVATE | DRAGGABLE_BACKGROUND | DOCUMENT_MODIFIED | FULLSCREENABLE;
165
166 // corresponds to callback-based properties
167 static final int SHOULD_BECOME_KEY = 1 << 12;
168 static final int SHOULD_BECOME_MAIN = 1 << 13;
169 static final int MODAL_EXCLUDED = 1 << 16;
170
213 boolean fullscrenable = Boolean.parseBoolean(value.toString());
214 if (c.target instanceof RootPaneContainer
215 && c.getPeer().getPeerType() == PeerType.FRAME) {
216 if (c.isInFullScreen && !fullscrenable) {
217 c.toggleFullScreen();
218 }
219 }
220 c.setStyleBits(FULLSCREENABLE, fullscrenable);
221 }},
222 new Property<CPlatformWindow>(WINDOW_SHADOW_REVALIDATE_NOW) { public void applyProperty(final CPlatformWindow c, final Object value) {
223 c.execute(ptr -> nativeRevalidateNSWindowShadow(ptr));
224 }},
225 new Property<CPlatformWindow>(WINDOW_DOCUMENT_FILE) { public void applyProperty(final CPlatformWindow c, final Object value) {
226 if (value == null || !(value instanceof java.io.File)) {
227 c.execute(ptr->nativeSetNSWindowRepresentedFilename(ptr, null));
228 return;
229 }
230
231 final String filename = ((java.io.File)value).getAbsolutePath();
232 c.execute(ptr->nativeSetNSWindowRepresentedFilename(ptr, filename));
233 }}
234 }) {
235 @SuppressWarnings("deprecation")
236 public CPlatformWindow convertJComponentToTarget(final JRootPane p) {
237 Component root = SwingUtilities.getRoot(p);
238 final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
239 if (root == null || acc.getPeer(root) == null) return null;
240 return (CPlatformWindow)((LWWindowPeer)acc.getPeer(root)).getPlatformWindow();
241 }
242 };
243 private final Comparator<Window> siblingsComparator = (w1, w2) -> {
244 if (w1 == w2) {
245 return 0;
246 }
247 ComponentAccessor componentAccessor = AWTAccessor.getComponentAccessor();
248 Object p1 = componentAccessor.getPeer(w1);
249 Object p2 = componentAccessor.getPeer(w2);
250 if (p1 instanceof LWWindowPeer && p2 instanceof LWWindowPeer) {
251 return Long.compare(
252 ((CPlatformWindow) (((LWWindowPeer) p1).getPlatformWindow())).lastBecomeMainTime,
253 ((CPlatformWindow) (((LWWindowPeer) p2).getPlatformWindow())).lastBecomeMainTime);
451
452 prop = rootpane.getClientProperty(WINDOW_ZOOMABLE);
453 if (prop != null) {
454 styleBits = SET(styleBits, ZOOMABLE, Boolean.parseBoolean(prop.toString()));
455 }
456
457 prop = rootpane.getClientProperty(WINDOW_FULLSCREENABLE);
458 if (prop != null) {
459 styleBits = SET(styleBits, FULLSCREENABLE, Boolean.parseBoolean(prop.toString()));
460 }
461
462 prop = rootpane.getClientProperty(WINDOW_SHADOW);
463 if (prop != null) {
464 styleBits = SET(styleBits, HAS_SHADOW, Boolean.parseBoolean(prop.toString()));
465 }
466
467 prop = rootpane.getClientProperty(WINDOW_DRAGGABLE_BACKGROUND);
468 if (prop != null) {
469 styleBits = SET(styleBits, DRAGGABLE_BACKGROUND, Boolean.parseBoolean(prop.toString()));
470 }
471 }
472
473 if (isDialog) {
474 styleBits = SET(styleBits, IS_DIALOG, true);
475 if (((Dialog) target).isModal()) {
476 styleBits = SET(styleBits, IS_MODAL, true);
477 }
478 }
479
480 peer.setTextured(IS(TEXTURED, styleBits));
481
482 return styleBits;
483 }
484
485 // this is the counter-point to -[CWindow _nativeSetStyleBit:]
486 private void setStyleBits(final int mask, final boolean value) {
487 execute(ptr -> nativeSetNSWindowStyleBits(ptr, mask, value ? mask : 0));
488 }
489
490 private native void _toggleFullScreenMode(final long model);
|