home *** CD-ROM | disk | FTP | other *** search
- package sun.awt;
-
- import java.awt.AWTPermission;
- import java.awt.DisplayMode;
- import java.awt.Frame;
- import java.awt.GraphicsConfiguration;
- import java.awt.GraphicsDevice;
- import java.awt.GraphicsEnvironment;
- import java.awt.Rectangle;
- import java.awt.Window;
- import java.awt.image.ColorModel;
- import java.awt.peer.WindowPeer;
- import java.security.AccessController;
- import java.util.ArrayList;
- import java.util.Vector;
- import sun.awt.windows.WWindowPeer;
- import sun.java2d.d3d.D3DContext;
- import sun.java2d.opengl.WGLGraphicsConfig;
- import sun.java2d.windows.WindowsFlags;
- import sun.security.action.GetPropertyAction;
-
- public class Win32GraphicsDevice extends GraphicsDevice implements DisplayChangedListener {
- int screen;
- ColorModel dynamicColorModel;
- ColorModel colorModel;
- GraphicsConfiguration[] configs;
- GraphicsConfiguration defaultConfig;
- boolean offscreenAccelerationEnabled = true;
- private D3DContext d3dContext;
- private SunDisplayChanger topLevels = new SunDisplayChanger();
- private static boolean pfDisabled;
- private static AWTPermission fullScreenExclusivePermission;
- private Rectangle ownerWindowedModeBounds = null;
- private DisplayMode defaultDisplayMode;
-
- private static native void initIDs();
-
- public boolean isOffscreenAccelerationEnabled() {
- return this.offscreenAccelerationEnabled;
- }
-
- native void initDevice(int var1);
-
- public Win32GraphicsDevice(int var1) {
- this.screen = var1;
- this.initDevice(var1);
- }
-
- public int getType() {
- return 0;
- }
-
- public int getScreen() {
- return this.screen;
- }
-
- public String getIDstring() {
- return "\\Display" + this.screen;
- }
-
- public GraphicsConfiguration[] getConfigurations() {
- if (this.configs == null) {
- if (WindowsFlags.isOGLEnabled() && this.isDefaultDevice()) {
- this.defaultConfig = this.getDefaultConfiguration();
- if (this.defaultConfig != null) {
- this.configs = new GraphicsConfiguration[1];
- this.configs[0] = this.defaultConfig;
- return this.configs;
- }
- }
-
- int var1 = this.getMaxConfigs(this.screen);
- int var2 = this.getDefaultPixID(this.screen);
- Vector var3 = new Vector(var1);
- if (var2 == 0) {
- this.defaultConfig = Win32GraphicsConfig.getConfig(this, var2);
- var3.addElement(this.defaultConfig);
- } else {
- for(int var4 = 1; var4 <= var1; ++var4) {
- if (this.isPixFmtSupported(var4, this.screen)) {
- if (var4 == var2) {
- this.defaultConfig = Win32GraphicsConfig.getConfig(this, var4);
- var3.addElement(this.defaultConfig);
- } else {
- var3.addElement(Win32GraphicsConfig.getConfig(this, var4));
- }
- }
- }
- }
-
- this.configs = new GraphicsConfiguration[var3.size()];
- var3.copyInto(this.configs);
- }
-
- return this.configs;
- }
-
- protected int getMaxConfigs(int var1) {
- return pfDisabled ? 1 : this.getMaxConfigsImpl(var1);
- }
-
- private native int getMaxConfigsImpl(int var1);
-
- protected native boolean isPixFmtSupported(int var1, int var2);
-
- protected int getDefaultPixID(int var1) {
- return pfDisabled ? 0 : this.getDefaultPixIDImpl(var1);
- }
-
- private native int getDefaultPixIDImpl(int var1);
-
- public GraphicsConfiguration getDefaultConfiguration() {
- if (this.defaultConfig == null) {
- if (WindowsFlags.isOGLEnabled() && this.isDefaultDevice()) {
- int var1 = WGLGraphicsConfig.getDefaultPixFmt(this.screen);
- this.defaultConfig = WGLGraphicsConfig.getConfig(this, var1);
- if (WindowsFlags.isOGLVerbose()) {
- if (this.defaultConfig != null) {
- System.out.print("OpenGL pipeline enabled");
- } else {
- System.out.print("Could not enable OpenGL pipeline");
- }
-
- System.out.println(" for default config on screen " + this.screen);
- }
- }
-
- if (this.defaultConfig == null) {
- this.defaultConfig = Win32GraphicsConfig.getConfig(this, 0);
- }
- }
-
- return this.defaultConfig;
- }
-
- public String toString() {
- return "Win32GraphicsDevice[screen=" + this.screen + "]";
- }
-
- private boolean isDefaultDevice() {
- return this == GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
- }
-
- private native boolean isDDEnabledOnDeviceNative(int var1);
-
- public D3DContext getD3DContext() {
- if (this.d3dContext == null) {
- this.d3dContext = new D3DContext(this);
- }
-
- return this.d3dContext;
- }
-
- public boolean isDDEnabledOnDevice() {
- return WindowsFlags.isDDEnabled() && this.isDDEnabledOnDeviceNative(this.screen);
- }
-
- public boolean isD3DEnabledOnDevice() {
- return WindowsFlags.isD3DEnabled() && (WindowsFlags.isD3DSet() || this.getFullScreenWindow() != null) && (this.getD3DContext().getDeviceCaps() & 16384) != 0;
- }
-
- private static boolean isFSExclusiveModeAllowed() {
- SecurityManager var0 = System.getSecurityManager();
- if (var0 != null) {
- if (fullScreenExclusivePermission == null) {
- fullScreenExclusivePermission = new AWTPermission("fullScreenExclusive");
- }
-
- try {
- var0.checkPermission(fullScreenExclusivePermission);
- } catch (SecurityException var2) {
- return false;
- }
- }
-
- return true;
- }
-
- public boolean isFullScreenSupported() {
- return isFSExclusiveModeAllowed();
- }
-
- private Frame getToplevelOwner(Window var1) {
- Window var2 = var1;
-
- while(var2 != null) {
- var2 = var2.getOwner();
- if (var2 instanceof Frame) {
- return (Frame)var2;
- }
- }
-
- return null;
- }
-
- public synchronized void setFullScreenWindow(Window var1) {
- Window var2 = this.getFullScreenWindow();
- if (var1 != var2) {
- if (!this.isFullScreenSupported()) {
- super.setFullScreenWindow(var1);
- } else {
- if (var2 != null) {
- if (this.defaultDisplayMode != null) {
- this.setDisplayMode(this.defaultDisplayMode);
- this.defaultDisplayMode = null;
- }
-
- WWindowPeer var3 = (WWindowPeer)var2.getPeer();
- if (var3 != null) {
- synchronized(var3) {
- var3.destroyBuffers();
- this.exitFullScreenExclusive(this.isDDEnabledOnDevice(), this.screen, var3);
- }
- }
-
- if (!(var2 instanceof Frame)) {
- Frame var4 = this.getToplevelOwner(var2);
- if (var4 != null && this.ownerWindowedModeBounds != null) {
- var4.setBounds(this.ownerWindowedModeBounds);
- }
-
- this.ownerWindowedModeBounds = null;
- }
- }
-
- super.setFullScreenWindow(var1);
- if (var1 != null) {
- this.defaultDisplayMode = this.getDisplayMode();
- if (!(var1 instanceof Frame)) {
- Frame var9 = this.getToplevelOwner(var1);
- if (var9 != null) {
- this.ownerWindowedModeBounds = var9.getBounds();
- var9.setBounds(var1.getBounds());
- }
- }
-
- WWindowPeer var10 = (WWindowPeer)var1.getPeer();
- synchronized(var10) {
- this.enterFullScreenExclusive(this.isDDEnabledOnDevice(), this.screen, var10);
- }
-
- var10.updateGC();
- var10.resetTargetGC();
- }
-
- }
- }
- }
-
- private native void enterFullScreenExclusive(boolean var1, int var2, WindowPeer var3);
-
- private native void exitFullScreenExclusive(boolean var1, int var2, WindowPeer var3);
-
- public boolean isDisplayChangeSupported() {
- return this.isFullScreenSupported() && this.getFullScreenWindow() != null;
- }
-
- public synchronized void setDisplayMode(DisplayMode var1) {
- if (!this.isDisplayChangeSupported()) {
- super.setDisplayMode(var1);
- } else if (var1 != null && (var1 = this.getMatchingDisplayMode(var1)) != null) {
- if (!this.getDisplayMode().equals(var1)) {
- Window var2 = this.getFullScreenWindow();
- if (var2 != null) {
- WWindowPeer var3 = (WWindowPeer)var2.getPeer();
- this.configDisplayMode(this.screen, var3, var1.getWidth(), var1.getHeight(), var1.getBitDepth(), var1.getRefreshRate());
- Rectangle var4 = this.getDefaultConfiguration().getBounds();
- var2.setBounds(var4.x, var4.y, var1.getWidth(), var1.getHeight());
- } else {
- throw new IllegalStateException("Must be in fullscreen mode in order to set display mode");
- }
- }
- } else {
- throw new IllegalArgumentException("Invalid display mode");
- }
- }
-
- private native DisplayMode getCurrentDisplayMode(int var1);
-
- private native void configDisplayMode(int var1, WindowPeer var2, int var3, int var4, int var5, int var6);
-
- private native void enumDisplayModes(int var1, ArrayList var2);
-
- private native boolean isDisplayModeAvailable(int var1, int var2, int var3, int var4, int var5);
-
- public synchronized DisplayMode getDisplayMode() {
- DisplayMode var1 = this.getCurrentDisplayMode(this.screen);
- return var1;
- }
-
- public synchronized DisplayMode[] getDisplayModes() {
- ArrayList var1 = new ArrayList();
- this.enumDisplayModes(this.screen, var1);
- int var2 = var1.size();
- DisplayMode[] var3 = new DisplayMode[var2];
-
- for(int var4 = 0; var4 < var2; ++var4) {
- var3[var4] = (DisplayMode)var1.get(var4);
- }
-
- return var3;
- }
-
- private synchronized DisplayMode getMatchingDisplayMode(DisplayMode var1) {
- if (!this.isDisplayChangeSupported()) {
- return null;
- } else if (this.isDDEnabledOnDevice()) {
- return this.isDisplayModeAvailable(this.screen, var1.getWidth(), var1.getHeight(), var1.getBitDepth(), var1.getRefreshRate()) ? var1 : null;
- } else {
- DisplayMode[] var2 = this.getDisplayModes();
-
- for(DisplayMode var6 : var2) {
- if (var1.equals(var6) || var1.getRefreshRate() == 0 && var1.getWidth() == var6.getWidth() && var1.getHeight() == var6.getHeight() && var1.getBitDepth() == var6.getBitDepth()) {
- return var6;
- }
- }
-
- return null;
- }
- }
-
- public void displayChanged() {
- this.d3dContext = null;
- this.dynamicColorModel = null;
- this.defaultConfig = null;
- this.configs = null;
- this.topLevels.notifyListeners();
- }
-
- public void paletteChanged() {
- }
-
- public void addDisplayChangedListener(DisplayChangedListener var1) {
- this.topLevels.add(var1);
- }
-
- public void removeDisplayChangedListener(DisplayChangedListener var1) {
- this.topLevels.remove(var1);
- }
-
- private native ColorModel makeColorModel(int var1, boolean var2);
-
- public ColorModel getDynamicColorModel() {
- if (this.dynamicColorModel == null) {
- this.dynamicColorModel = this.makeColorModel(this.screen, true);
- }
-
- return this.dynamicColorModel;
- }
-
- public ColorModel getColorModel() {
- if (this.colorModel == null) {
- this.colorModel = this.makeColorModel(this.screen, false);
- }
-
- return this.colorModel;
- }
-
- private native int getDeviceMemoryNative(int var1);
-
- public int getAvailableAcceleratedMemory() {
- return this.getDefaultConfiguration() instanceof WGLGraphicsConfig ? super.getAvailableAcceleratedMemory() : this.getDeviceMemoryNative(this.screen);
- }
-
- static {
- String var0 = (String)AccessController.doPrivileged(new GetPropertyAction("sun.awt.nopixfmt"));
- pfDisabled = var0 != null;
- initIDs();
- }
- }
-