8143914: Provide Mac-specific fullscreen support
Reviewed-by: serb, ssadetsky
This commit is contained in:
parent
bc879dff7a
commit
8ae3785001
@ -25,10 +25,12 @@
|
|||||||
|
|
||||||
package sun.lwawt.macosx;
|
package sun.lwawt.macosx;
|
||||||
|
|
||||||
|
import com.apple.eawt.FullScreenAdapter;
|
||||||
|
import com.apple.eawt.FullScreenUtilities;
|
||||||
|
import com.apple.eawt.event.FullScreenEvent;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.Dialog.ModalityType;
|
import java.awt.Dialog.ModalityType;
|
||||||
import java.awt.event.*;
|
import java.awt.event.*;
|
||||||
import java.awt.peer.WindowPeer;
|
|
||||||
import java.beans.*;
|
import java.beans.*;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
|
||||||
@ -44,6 +46,7 @@ import sun.util.logging.PlatformLogger;
|
|||||||
import com.apple.laf.*;
|
import com.apple.laf.*;
|
||||||
import com.apple.laf.ClientPropertyApplicator.Property;
|
import com.apple.laf.ClientPropertyApplicator.Property;
|
||||||
import com.sun.awt.AWTUtilities;
|
import com.sun.awt.AWTUtilities;
|
||||||
|
import sun.lwawt.LWWindowPeer.PeerType;
|
||||||
|
|
||||||
public class CPlatformWindow extends CFRetainedResource implements PlatformWindow {
|
public class CPlatformWindow extends CFRetainedResource implements PlatformWindow {
|
||||||
private native long nativeCreateNSWindow(long nsViewPtr,long ownerPtr, long styleBits, double x, double y, double w, double h);
|
private native long nativeCreateNSWindow(long nsViewPtr,long ownerPtr, long styleBits, double x, double y, double w, double h);
|
||||||
@ -175,10 +178,24 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
|
|||||||
c.setStyleBits(CLOSEABLE, Boolean.parseBoolean(value.toString()));
|
c.setStyleBits(CLOSEABLE, Boolean.parseBoolean(value.toString()));
|
||||||
}},
|
}},
|
||||||
new Property<CPlatformWindow>(WINDOW_ZOOMABLE) { public void applyProperty(final CPlatformWindow c, final Object value) {
|
new Property<CPlatformWindow>(WINDOW_ZOOMABLE) { public void applyProperty(final CPlatformWindow c, final Object value) {
|
||||||
c.setStyleBits(ZOOMABLE, Boolean.parseBoolean(value.toString()));
|
boolean zoomable = Boolean.parseBoolean(value.toString());
|
||||||
|
if (c.target instanceof RootPaneContainer
|
||||||
|
&& c.getPeer().getPeerType() == PeerType.FRAME) {
|
||||||
|
if (c.isInFullScreen && !zoomable) {
|
||||||
|
c.toggleFullScreen();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
c.setStyleBits(ZOOMABLE, zoomable);
|
||||||
}},
|
}},
|
||||||
new Property<CPlatformWindow>(WINDOW_FULLSCREENABLE) { public void applyProperty(final CPlatformWindow c, final Object value) {
|
new Property<CPlatformWindow>(WINDOW_FULLSCREENABLE) { public void applyProperty(final CPlatformWindow c, final Object value) {
|
||||||
c.setStyleBits(FULLSCREENABLE, Boolean.parseBoolean(value.toString()));
|
boolean fullscrenable = Boolean.parseBoolean(value.toString());
|
||||||
|
if (c.target instanceof RootPaneContainer
|
||||||
|
&& c.getPeer().getPeerType() == PeerType.FRAME) {
|
||||||
|
if (c.isInFullScreen && !fullscrenable) {
|
||||||
|
c.toggleFullScreen();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
c.setStyleBits(FULLSCREENABLE, fullscrenable);
|
||||||
}},
|
}},
|
||||||
new Property<CPlatformWindow>(WINDOW_SHADOW_REVALIDATE_NOW) { public void applyProperty(final CPlatformWindow c, final Object value) {
|
new Property<CPlatformWindow>(WINDOW_SHADOW_REVALIDATE_NOW) { public void applyProperty(final CPlatformWindow c, final Object value) {
|
||||||
nativeRevalidateNSWindowShadow(c.getNSWindowPtr());
|
nativeRevalidateNSWindowShadow(c.getNSWindowPtr());
|
||||||
@ -210,6 +227,8 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
|
|||||||
private volatile boolean isFullScreenMode;
|
private volatile boolean isFullScreenMode;
|
||||||
private boolean isFullScreenAnimationOn;
|
private boolean isFullScreenAnimationOn;
|
||||||
|
|
||||||
|
private volatile boolean isInFullScreen;
|
||||||
|
|
||||||
private Window target;
|
private Window target;
|
||||||
private LWWindowPeer peer;
|
private LWWindowPeer peer;
|
||||||
protected CPlatformView contentView;
|
protected CPlatformView contentView;
|
||||||
@ -308,6 +327,8 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
|
|||||||
styleBits = SET(styleBits, RESIZABLE, resizable);
|
styleBits = SET(styleBits, RESIZABLE, resizable);
|
||||||
if (!resizable) {
|
if (!resizable) {
|
||||||
styleBits = SET(styleBits, ZOOMABLE, false);
|
styleBits = SET(styleBits, ZOOMABLE, false);
|
||||||
|
} else {
|
||||||
|
setCanFullscreen(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -680,9 +701,25 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
|
|||||||
updateFocusabilityForAutoRequestFocus(true);
|
updateFocusabilityForAutoRequestFocus(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setCanFullscreen(final boolean canFullScreen) {
|
||||||
|
if (target instanceof RootPaneContainer
|
||||||
|
&& getPeer().getPeerType() == PeerType.FRAME) {
|
||||||
|
|
||||||
|
if (isInFullScreen && !canFullScreen) {
|
||||||
|
toggleFullScreen();
|
||||||
|
}
|
||||||
|
|
||||||
|
final RootPaneContainer rpc = (RootPaneContainer) target;
|
||||||
|
rpc.getRootPane().putClientProperty(
|
||||||
|
CPlatformWindow.WINDOW_FULLSCREENABLE, canFullScreen);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setResizable(final boolean resizable) {
|
public void setResizable(final boolean resizable) {
|
||||||
|
setCanFullscreen(resizable);
|
||||||
setStyleBits(RESIZABLE, resizable);
|
setStyleBits(RESIZABLE, resizable);
|
||||||
|
setStyleBits(ZOOMABLE, resizable);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -1074,6 +1111,7 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void windowDidEnterFullScreen() {
|
private void windowDidEnterFullScreen() {
|
||||||
|
isInFullScreen = true;
|
||||||
isFullScreenAnimationOn = false;
|
isFullScreenAnimationOn = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1082,6 +1120,7 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void windowDidExitFullScreen() {
|
private void windowDidExitFullScreen() {
|
||||||
|
isInFullScreen = false;
|
||||||
isFullScreenAnimationOn = false;
|
isFullScreenAnimationOn = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user