aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortdv <none@none>2008-05-14 16:05:07 -0700
committertdv <none@none>2008-05-14 16:05:07 -0700
commitafe1f824037397ab4f90b0ecc383d99312645a78 (patch)
tree3b4f1cf7e8fb06baa235c071f05a871e386c427a
parentc0983f42b77e2ef017e1b202c380c422d554eed4 (diff)
downloadjdk8u_jdk-afe1f824037397ab4f90b0ecc383d99312645a78.tar.gz
6675596: SurfaceManagerFactory should allow plugging in different implementations
Reviewed-by: tdv, campbell Contributed-by: Roman Kennke <roman.kennke@aicas.com>
-rw-r--r--src/share/classes/sun/awt/image/SunVolatileImage.java3
-rw-r--r--src/share/classes/sun/java2d/SurfaceManagerFactory.java91
-rw-r--r--src/solaris/classes/sun/awt/X11GraphicsEnvironment.java6
-rw-r--r--src/solaris/classes/sun/java2d/UnixSurfaceManagerFactory.java (renamed from src/solaris/classes/sun/java2d/SurfaceManagerFactory.java)21
-rw-r--r--src/windows/classes/sun/awt/Win32GraphicsEnvironment.java5
-rw-r--r--src/windows/classes/sun/java2d/WindowsSurfaceManagerFactory.java (renamed from src/windows/classes/sun/java2d/SurfaceManagerFactory.java)16
6 files changed, 122 insertions, 20 deletions
diff --git a/src/share/classes/sun/awt/image/SunVolatileImage.java b/src/share/classes/sun/awt/image/SunVolatileImage.java
index 875201d1be..d0c18f3868 100644
--- a/src/share/classes/sun/awt/image/SunVolatileImage.java
+++ b/src/share/classes/sun/awt/image/SunVolatileImage.java
@@ -165,7 +165,8 @@ public class SunVolatileImage extends VolatileImage {
{
return new BufImgVolatileSurfaceManager(this, context);
}
- return SurfaceManagerFactory.createVolatileManager(this, context);
+ SurfaceManagerFactory smf = SurfaceManagerFactory.getInstance();
+ return smf.createVolatileManager(this, context);
}
private Color getForeground() {
diff --git a/src/share/classes/sun/java2d/SurfaceManagerFactory.java b/src/share/classes/sun/java2d/SurfaceManagerFactory.java
new file mode 100644
index 0000000000..4f3aa15095
--- /dev/null
+++ b/src/share/classes/sun/java2d/SurfaceManagerFactory.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2003-2008 Sun Microsystems, Inc. All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Sun designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Sun in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+package sun.java2d;
+
+import sun.awt.image.SunVolatileImage;
+import sun.awt.image.VolatileSurfaceManager;
+
+/**
+ * This factory creates platform specific VolatileSurfaceManager
+ * implementations.
+ *
+ * There are two platform specific SurfaceManagerFactories in OpenJDK,
+ * UnixSurfaceManagerFactory and WindowsSurfaceManagerFactory.
+ * The actually used SurfaceManagerFactory is set by the respective platform
+ * GraphicsEnvironment implementations in the static initializer.
+ */
+public abstract class SurfaceManagerFactory {
+
+ /**
+ * The single shared instance.
+ */
+ private static SurfaceManagerFactory instance;
+
+ /**
+ * Returns the surface manager factory instance. This returns a factory
+ * that has been set by {@link #setInstance(SurfaceManagerFactory)}.
+ *
+ * @return the surface manager factory
+ */
+ public synchronized static SurfaceManagerFactory getInstance() {
+
+ if (instance == null) {
+ throw new IllegalStateException("No SurfaceManagerFactory set.");
+ }
+ return instance;
+ }
+
+ /**
+ * Sets the surface manager factory. This may only be called once, and it
+ * may not be set back to {@code null} when the factory is already
+ * instantiated.
+ *
+ * @param factory the factory to set
+ */
+ public synchronized static void setInstance(SurfaceManagerFactory factory) {
+
+ if (factory == null) {
+ // We don't want to allow setting this to null at any time.
+ throw new IllegalArgumentException("factory must be non-null");
+ }
+
+ if (instance != null) {
+ // We don't want to re-set the instance at any time.
+ throw new IllegalStateException("The surface manager factory is already initialized");
+ }
+
+ instance = factory;
+ }
+
+ /**
+ * Creates a new instance of a VolatileSurfaceManager given any
+ * arbitrary SunVolatileImage. An optional context Object can be supplied
+ * as a way for the caller to pass pipeline-specific context data to
+ * the VolatileSurfaceManager (such as a backbuffer handle, for example).
+ */
+ public abstract VolatileSurfaceManager
+ createVolatileManager(SunVolatileImage image, Object context);
+}
diff --git a/src/solaris/classes/sun/awt/X11GraphicsEnvironment.java b/src/solaris/classes/sun/awt/X11GraphicsEnvironment.java
index 27ba044c27..b531fa739b 100644
--- a/src/solaris/classes/sun/awt/X11GraphicsEnvironment.java
+++ b/src/solaris/classes/sun/awt/X11GraphicsEnvironment.java
@@ -48,6 +48,8 @@ import sun.font.Font2D;
import sun.font.FontManager;
import sun.font.NativeFont;
import sun.java2d.SunGraphicsEnvironment;
+import sun.java2d.SurfaceManagerFactory;
+import sun.java2d.UnixSurfaceManagerFactory;
/**
* This is an implementation of a GraphicsEnvironment object for the
@@ -177,6 +179,10 @@ public class X11GraphicsEnvironment
return null;
}
});
+
+ // Install the correct surface manager factory.
+ SurfaceManagerFactory.setInstance(new UnixSurfaceManagerFactory());
+
}
private static boolean glxAvailable;
diff --git a/src/solaris/classes/sun/java2d/SurfaceManagerFactory.java b/src/solaris/classes/sun/java2d/UnixSurfaceManagerFactory.java
index 525ec325a5..719ae69c15 100644
--- a/src/solaris/classes/sun/java2d/SurfaceManagerFactory.java
+++ b/src/solaris/classes/sun/java2d/UnixSurfaceManagerFactory.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2003-2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,24 +23,23 @@
* have any questions.
*/
+
package sun.java2d;
import java.awt.GraphicsConfiguration;
-import java.awt.image.BufferedImage;
-import sun.awt.X11GraphicsConfig;
+
import sun.awt.image.SunVolatileImage;
-import sun.awt.image.SurfaceManager;
import sun.awt.image.VolatileSurfaceManager;
import sun.java2d.opengl.GLXGraphicsConfig;
import sun.java2d.opengl.GLXVolatileSurfaceManager;
import sun.java2d.x11.X11VolatileSurfaceManager;
/**
- * This is a factory class with static methods for creating a
- * platform-specific instance of a particular SurfaceManager. Each platform
- * (Windows, Unix, etc.) has its own specialized SurfaceManagerFactory.
+ * The SurfaceManagerFactory that creates VolatileSurfaceManager
+ * implementations for the Unix volatile images.
*/
-public class SurfaceManagerFactory {
+public class UnixSurfaceManagerFactory extends SurfaceManagerFactory {
+
/**
* Creates a new instance of a VolatileSurfaceManager given any
* arbitrary SunVolatileImage. An optional context Object can be supplied
@@ -51,9 +50,8 @@ public class SurfaceManagerFactory {
* specific VolatileSurfaceManager based on the GraphicsConfiguration
* under which the SunVolatileImage was created.
*/
- public static VolatileSurfaceManager
- createVolatileManager(SunVolatileImage vImg,
- Object context)
+ public VolatileSurfaceManager createVolatileManager(SunVolatileImage vImg,
+ Object context)
{
GraphicsConfiguration gc = vImg.getGraphicsConfig();
if (gc instanceof GLXGraphicsConfig) {
@@ -62,4 +60,5 @@ public class SurfaceManagerFactory {
return new X11VolatileSurfaceManager(vImg, context);
}
}
+
}
diff --git a/src/windows/classes/sun/awt/Win32GraphicsEnvironment.java b/src/windows/classes/sun/awt/Win32GraphicsEnvironment.java
index 850733e242..c3820c22a5 100644
--- a/src/windows/classes/sun/awt/Win32GraphicsEnvironment.java
+++ b/src/windows/classes/sun/awt/Win32GraphicsEnvironment.java
@@ -42,6 +42,8 @@ import sun.awt.windows.WPrinterJob;
import sun.awt.windows.WToolkit;
import sun.font.FontManager;
import sun.java2d.SunGraphicsEnvironment;
+import sun.java2d.SurfaceManagerFactory;
+import sun.java2d.WindowsSurfaceManagerFactory;
import sun.java2d.windows.WindowsFlags;
/**
@@ -64,6 +66,9 @@ public class Win32GraphicsEnvironment
WindowsFlags.initFlags();
initDisplayWrapper();
eudcFontFileName = getEUDCFontFile();
+
+ // Install correct surface manager factory.
+ SurfaceManagerFactory.setInstance(new WindowsSurfaceManagerFactory());
}
/**
diff --git a/src/windows/classes/sun/java2d/SurfaceManagerFactory.java b/src/windows/classes/sun/java2d/WindowsSurfaceManagerFactory.java
index a1e16ea03c..af0fd7bd40 100644
--- a/src/windows/classes/sun/java2d/SurfaceManagerFactory.java
+++ b/src/windows/classes/sun/java2d/WindowsSurfaceManagerFactory.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2003-2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -36,11 +36,11 @@ import sun.java2d.windows.WindowsFlags;
import sun.java2d.windows.WinVolatileSurfaceManager;
/**
- * This is a factory class with static methods for creating a
- * platform-specific instance of a particular SurfaceManager. Each platform
- * (Windows, Unix, etc.) has its own specialized SurfaceManagerFactory.
+ * The SurfaceManagerFactory that creates VolatileSurfaceManager
+ * implementations for the Windows volatile images.
*/
-public class SurfaceManagerFactory {
+public class WindowsSurfaceManagerFactory extends SurfaceManagerFactory {
+
/**
* Creates a new instance of a VolatileSurfaceManager given any
* arbitrary SunVolatileImage. An optional context Object can be supplied
@@ -50,9 +50,8 @@ public class SurfaceManagerFactory {
* For Windows platforms, this method returns a Windows-specific
* VolatileSurfaceManager.
*/
- public static VolatileSurfaceManager
- createVolatileManager(SunVolatileImage vImg,
- Object context)
+ public VolatileSurfaceManager createVolatileManager(SunVolatileImage vImg,
+ Object context)
{
GraphicsConfiguration gc = vImg.getGraphicsConfig();
if (gc instanceof WGLGraphicsConfig) {
@@ -61,4 +60,5 @@ public class SurfaceManagerFactory {
return new WinVolatileSurfaceManager(vImg, context);
}
}
+
}