From 2c819571f151a88cbbe9e38adeeb56dc0050498b Mon Sep 17 00:00:00 2001 From: Anthony Petrov Date: Tue, 5 May 2009 14:45:56 +0400 Subject: [PATCH 1/3] 6762511: Translucency is not working on Linux using Metacity Introduced additional blits and new X11 surface types (ARGB, ABGR) Reviewed-by: art, avu --- .../classes/sun/awt/X11GraphicsConfig.java | 19 ++++ .../sun/java2d/x11/X11PMBlitBgLoops.java | 4 + .../sun/java2d/x11/X11PMBlitLoops.java | 16 +++ .../sun/java2d/x11/X11SurfaceData.java | 38 ++++++- jdk/src/solaris/native/sun/awt/X11Color.c | 99 ++++++++++++++----- .../solaris/native/sun/awt/awt_GraphicsEnv.c | 44 +-------- jdk/src/solaris/native/sun/awt/awt_p.h | 45 +++++++++ 7 files changed, 194 insertions(+), 71 deletions(-) diff --git a/jdk/src/solaris/classes/sun/awt/X11GraphicsConfig.java b/jdk/src/solaris/classes/sun/awt/X11GraphicsConfig.java index 7cfa8b08393..c1eb6bbb1a0 100644 --- a/jdk/src/solaris/classes/sun/awt/X11GraphicsConfig.java +++ b/jdk/src/solaris/classes/sun/awt/X11GraphicsConfig.java @@ -37,7 +37,10 @@ import java.awt.ImageCapabilities; import java.awt.Transparency; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; +import java.awt.color.ColorSpace; +import java.awt.image.ComponentColorModel; import java.awt.image.DirectColorModel; +import java.awt.image.DataBuffer; import java.awt.image.VolatileImage; import java.awt.image.WritableRaster; import java.awt.geom.AffineTransform; @@ -230,6 +233,22 @@ public class X11GraphicsConfig extends GraphicsConfiguration } } + public static DirectColorModel createDCM32(int rMask, int gMask, int bMask, + int aMask, boolean aPre) { + return new DirectColorModel( + ColorSpace.getInstance(ColorSpace.CS_sRGB), + 32, rMask, gMask, bMask, aMask, aPre, DataBuffer.TYPE_INT); + } + + public static ComponentColorModel createABGRCCM() { + ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_sRGB); + int[] nBits = {8, 8, 8, 8}; + int[] bOffs = {3, 2, 1, 0}; + return new ComponentColorModel(cs, nBits, true, true, + Transparency.TRANSLUCENT, + DataBuffer.TYPE_BYTE); + } + /** * Returns the default Transform for this configuration. This * Transform is typically the Identity transform for most normal diff --git a/jdk/src/solaris/classes/sun/java2d/x11/X11PMBlitBgLoops.java b/jdk/src/solaris/classes/sun/java2d/x11/X11PMBlitBgLoops.java index 3adb5a69158..fd975d7e7f8 100644 --- a/jdk/src/solaris/classes/sun/java2d/x11/X11PMBlitBgLoops.java +++ b/jdk/src/solaris/classes/sun/java2d/x11/X11PMBlitBgLoops.java @@ -70,6 +70,10 @@ public class X11PMBlitBgLoops extends BlitBg { X11SurfaceData.UShort565RgbX11), new X11PMBlitBgLoops(X11SurfaceData.UShortIndexedX11_BM, X11SurfaceData.UShortIndexedX11), + new X11PMBlitBgLoops(X11SurfaceData.IntRgbX11_BM, + X11SurfaceData.IntArgbPreX11), + new X11PMBlitBgLoops(X11SurfaceData.IntBgrX11_BM, + X11SurfaceData.FourByteAbgrPreX11), }; GraphicsPrimitiveMgr.register(primitives); } diff --git a/jdk/src/solaris/classes/sun/java2d/x11/X11PMBlitLoops.java b/jdk/src/solaris/classes/sun/java2d/x11/X11PMBlitLoops.java index e519e71ded4..0f73bf9702f 100644 --- a/jdk/src/solaris/classes/sun/java2d/x11/X11PMBlitLoops.java +++ b/jdk/src/solaris/classes/sun/java2d/x11/X11PMBlitLoops.java @@ -95,6 +95,22 @@ public class X11PMBlitLoops extends Blit { new X11PMBlitLoops(X11SurfaceData.UShortIndexedX11_BM, X11SurfaceData.UShortIndexedX11, true), + new X11PMBlitLoops(X11SurfaceData.IntRgbX11, + X11SurfaceData.IntArgbPreX11, true), + new X11PMBlitLoops(X11SurfaceData.IntRgbX11, + X11SurfaceData.IntArgbPreX11, false), + new X11PMBlitLoops(X11SurfaceData.IntRgbX11_BM, + X11SurfaceData.IntArgbPreX11, true), + + new X11PMBlitLoops(X11SurfaceData.IntBgrX11, + X11SurfaceData.FourByteAbgrPreX11, true), + new X11PMBlitLoops(X11SurfaceData.IntBgrX11, + X11SurfaceData.FourByteAbgrPreX11, false), + new X11PMBlitLoops(X11SurfaceData.IntBgrX11_BM, + X11SurfaceData.FourByteAbgrPreX11, true), + + + // delegate loops new DelegateBlitLoop(X11SurfaceData.IntBgrX11_BM, X11SurfaceData.IntBgrX11), diff --git a/jdk/src/solaris/classes/sun/java2d/x11/X11SurfaceData.java b/jdk/src/solaris/classes/sun/java2d/x11/X11SurfaceData.java index 54f79769343..f613c118831 100644 --- a/jdk/src/solaris/classes/sun/java2d/x11/X11SurfaceData.java +++ b/jdk/src/solaris/classes/sun/java2d/x11/X11SurfaceData.java @@ -81,6 +81,13 @@ public abstract class X11SurfaceData extends SurfaceData { DESC_INT_BGR_X11 = "Integer BGR Pixmap"; public static final String DESC_INT_RGB_X11 = "Integer RGB Pixmap"; + + public static final String + DESC_4BYTE_ABGR_PRE_X11 = "4 byte ABGR Pixmap with pre-multplied alpha"; + public static final String + DESC_INT_ARGB_PRE_X11 = "Integer ARGB Pixmap with pre-multiplied " + + "alpha"; + public static final String DESC_BYTE_IND_OPQ_X11 = "Byte Indexed Opaque Pixmap"; @@ -133,6 +140,11 @@ public abstract class X11SurfaceData extends SurfaceData { public static final SurfaceType IntRgbX11 = SurfaceType.IntRgb.deriveSubType(DESC_INT_RGB_X11); + public static final SurfaceType FourByteAbgrPreX11 = + SurfaceType.FourByteAbgrPre.deriveSubType(DESC_4BYTE_ABGR_PRE_X11); + public static final SurfaceType IntArgbPreX11 = + SurfaceType.IntArgbPre.deriveSubType(DESC_INT_ARGB_PRE_X11); + public static final SurfaceType ThreeByteRgbX11 = SurfaceType.ThreeByteRgb.deriveSubType(DESC_3BYTE_RGB_X11); public static final SurfaceType ThreeByteBgrX11 = @@ -413,7 +425,7 @@ public abstract class X11SurfaceData extends SurfaceData { int transparency) { return new X11PixmapSurfaceData(gc, width, height, image, - getSurfaceType(gc, transparency), + getSurfaceType(gc, transparency, true), cm, drawable, transparency); } @@ -497,6 +509,13 @@ public abstract class X11SurfaceData extends SurfaceData { public static SurfaceType getSurfaceType(X11GraphicsConfig gc, int transparency) + { + return getSurfaceType(gc, transparency, false); + } + + public static SurfaceType getSurfaceType(X11GraphicsConfig gc, + int transparency, + boolean pixmapSurface) { boolean transparent = (transparency == Transparency.BITMASK); SurfaceType sType; @@ -524,12 +543,23 @@ public abstract class X11SurfaceData extends SurfaceData { // Fall through for 32 bit case case 32: if (cm instanceof DirectColorModel) { - if (((DirectColorModel)cm).getRedMask() == 0xff0000) { - sType = transparent ? X11SurfaceData.IntRgbX11_BM : X11SurfaceData.IntRgbX11; + if (((SunToolkit)java.awt.Toolkit.getDefaultToolkit() + ).isTranslucencyCapable(gc) && !pixmapSurface) + { + sType = X11SurfaceData.IntArgbPreX11; } else { - sType = transparent ? X11SurfaceData.IntBgrX11_BM : X11SurfaceData.IntBgrX11; + if (((DirectColorModel)cm).getRedMask() == 0xff0000) { + sType = transparent ? X11SurfaceData.IntRgbX11_BM : + X11SurfaceData.IntRgbX11; + } else { + sType = transparent ? X11SurfaceData.IntBgrX11_BM : + X11SurfaceData.IntBgrX11; + } } + } else if (cm instanceof ComponentColorModel) { + sType = X11SurfaceData.FourByteAbgrPreX11; } else { + throw new sun.java2d.InvalidPipeException("Unsupported bit " + "depth/cm combo: " + cm.getPixelSize() + diff --git a/jdk/src/solaris/native/sun/awt/X11Color.c b/jdk/src/solaris/native/sun/awt/X11Color.c index dbda559ea7f..c8f7d4e2365 100644 --- a/jdk/src/solaris/native/sun/awt/X11Color.c +++ b/jdk/src/solaris/native/sun/awt/X11Color.c @@ -886,6 +886,27 @@ awt_allocate_colors(AwtGraphicsConfigDataPtr awt_data) #define blue(v) (((v) >> 0) & 0xFF) #ifndef HEADLESS + +jobject getColorSpace(JNIEnv* env, jint csID) { + jclass clazz; + jobject cspaceL; + jmethodID mid; + + clazz = (*env)->FindClass(env,"java/awt/color/ColorSpace"); + mid = (*env)->GetStaticMethodID(env, clazz, "getInstance", + "(I)Ljava/awt/color/ColorSpace;"); + if (mid == NULL) { + return NULL; + } + + /* SECURITY: This is safe, because static methods cannot + * be overridden, and this method does not invoke + * client code + */ + + return (*env)->CallStaticObjectMethod(env, clazz, mid, csID); +} + jobject awtJNI_GetColorModel(JNIEnv *env, AwtGraphicsConfigDataPtr aData) { jobject awt_colormodel = NULL; @@ -899,21 +920,61 @@ jobject awtJNI_GetColorModel(JNIEnv *env, AwtGraphicsConfigDataPtr aData) (aData->awt_depth >= 15)) { clazz = (*env)->FindClass(env,"java/awt/image/DirectColorModel"); + if (!aData->isTranslucencySupported) { - mid = (*env)->GetMethodID(env,clazz,"","(IIIII)V"); + mid = (*env)->GetMethodID(env,clazz,"","(IIIII)V"); - if (mid == NULL) { - (*env)->PopLocalFrame(env, 0); - return NULL; + if (mid == NULL) { + (*env)->PopLocalFrame(env, 0); + return NULL; + } + awt_colormodel = (*env)->NewObject(env,clazz, mid, + aData->awt_visInfo.depth, + aData->awt_visInfo.red_mask, + aData->awt_visInfo.green_mask, + aData->awt_visInfo.blue_mask, + 0); + } else { + clazz = (*env)->FindClass(env,"sun/awt/X11GraphicsConfig"); + if (clazz == NULL) { + (*env)->PopLocalFrame(env, 0); + return NULL; + } + + if (aData->renderPictFormat.direct.red == 16) { + mid = (*env)->GetStaticMethodID( env,clazz,"createDCM32", + "(IIIIZ)Ljava/awt/image/DirectColorModel;"); + + if (mid == NULL) { + (*env)->PopLocalFrame(env, 0); + return NULL; + } + + awt_colormodel = (*env)->CallStaticObjectMethod( + env,clazz, mid, + aData->renderPictFormat.direct.redMask + << aData->renderPictFormat.direct.red, + aData->renderPictFormat.direct.greenMask + << aData->renderPictFormat.direct.green, + aData->renderPictFormat.direct.blueMask + << aData->renderPictFormat.direct.blue, + aData->renderPictFormat.direct.alphaMask + << aData->renderPictFormat.direct.alpha, + JNI_TRUE); + } else { + mid = (*env)->GetStaticMethodID( env,clazz,"createABGRCCM", + "()Ljava/awt/image/ComponentColorModel;"); + + if (mid == NULL) { + (*env)->PopLocalFrame(env, 0); + return NULL; + } + + awt_colormodel = (*env)->CallStaticObjectMethod( + env,clazz, mid); + } } - awt_colormodel = (*env)->NewObject(env,clazz, mid, - aData->awt_visInfo.depth, - aData->awt_visInfo.red_mask, - aData->awt_visInfo.green_mask, - aData->awt_visInfo.blue_mask, - 0); - if(awt_colormodel == NULL) { (*env)->PopLocalFrame(env, 0); @@ -923,25 +984,13 @@ jobject awtJNI_GetColorModel(JNIEnv *env, AwtGraphicsConfigDataPtr aData) } else if (aData->awt_visInfo.class == StaticGray && aData->awt_num_colors == 256) { - jclass clazz1; jobject cspace = NULL; jint bits[1]; jintArray bitsArray; jboolean falseboolean = JNI_FALSE; - clazz1 = (*env)->FindClass(env,"java/awt/color/ColorSpace"); - mid = (*env)->GetStaticMethodID(env, clazz1, "getInstance", - "(I)Ljava/awt/color/ColorSpace;"); - if (mid == NULL) { - (*env)->PopLocalFrame(env, 0); - return NULL; - } - /* SECURITY: This is safe, because static methods cannot - * be overridden, and this method does not invoke - * client code - */ - cspace = (*env)->CallStaticObjectMethod(env, clazz1, mid, - java_awt_color_ColorSpace_CS_GRAY); + cspace = getColorSpace(env, java_awt_color_ColorSpace_CS_GRAY); + if (cspace == NULL) { (*env)->PopLocalFrame(env, 0); return NULL; diff --git a/jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.c b/jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.c index 2e80cf7206d..110cca632c4 100644 --- a/jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.c +++ b/jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.c @@ -354,48 +354,6 @@ makeDefaultConfig(JNIEnv *env, int screen) { return NULL; } -/* Note: until we include the explicitly - * we have to define a couple of things ourselves. - */ -typedef unsigned long PictFormat; -#define PictTypeIndexed 0 -#define PictTypeDirect 1 - -typedef struct { - short red; - short redMask; - short green; - short greenMask; - short blue; - short blueMask; - short alpha; - short alphaMask; -} XRenderDirectFormat; - -typedef struct { - PictFormat id; - int type; - int depth; - XRenderDirectFormat direct; - Colormap colormap; -} XRenderPictFormat; - -#define PictFormatID (1 << 0) -#define PictFormatType (1 << 1) -#define PictFormatDepth (1 << 2) -#define PictFormatRed (1 << 3) -#define PictFormatRedMask (1 << 4) -#define PictFormatGreen (1 << 5) -#define PictFormatGreenMask (1 << 6) -#define PictFormatBlue (1 << 7) -#define PictFormatBlueMask (1 << 8) -#define PictFormatAlpha (1 << 9) -#define PictFormatAlphaMask (1 << 10) -#define PictFormatColormap (1 << 11) - -typedef XRenderPictFormat * -XRenderFindVisualFormatFunc (Display *dpy, _Xconst Visual *visual); - static void getAllConfigs (JNIEnv *env, int screen, AwtScreenDataPtr screenDataPtr) { @@ -535,6 +493,8 @@ getAllConfigs (JNIEnv *env, int screen, AwtScreenDataPtr screenDataPtr) { format->direct.alphaMask) { graphicsConfigs [ind]->isTranslucencySupported = 1; + memcpy(&graphicsConfigs [ind]->renderPictFormat, format, + sizeof(*format)); } } } diff --git a/jdk/src/solaris/native/sun/awt/awt_p.h b/jdk/src/solaris/native/sun/awt/awt_p.h index 73e5dd0a88e..b0959357087 100644 --- a/jdk/src/solaris/native/sun/awt/awt_p.h +++ b/jdk/src/solaris/native/sun/awt/awt_p.h @@ -119,6 +119,50 @@ typedef struct _DamageRect { } DamageRect; #ifndef HEADLESS + +/* Note: until we include the explicitly + * we have to define a couple of things ourselves. + */ +typedef unsigned long PictFormat; +#define PictTypeIndexed 0 +#define PictTypeDirect 1 + +typedef struct { + short red; + short redMask; + short green; + short greenMask; + short blue; + short blueMask; + short alpha; + short alphaMask; +} XRenderDirectFormat; + +typedef struct { + PictFormat id; + int type; + int depth; + XRenderDirectFormat direct; + Colormap colormap; +} XRenderPictFormat; + +#define PictFormatID (1 << 0) +#define PictFormatType (1 << 1) +#define PictFormatDepth (1 << 2) +#define PictFormatRed (1 << 3) +#define PictFormatRedMask (1 << 4) +#define PictFormatGreen (1 << 5) +#define PictFormatGreenMask (1 << 6) +#define PictFormatBlue (1 << 7) +#define PictFormatBlueMask (1 << 8) +#define PictFormatAlpha (1 << 9) +#define PictFormatAlphaMask (1 << 10) +#define PictFormatColormap (1 << 11) + +typedef XRenderPictFormat * +XRenderFindVisualFormatFunc (Display *dpy, _Xconst Visual *visual); +/* END OF Xrender.h chunk */ + typedef struct _AwtGraphicsConfigData { int awt_depth; Colormap awt_cmap; @@ -136,6 +180,7 @@ typedef struct _AwtGraphicsConfigData { ColorData *color_data; struct _GLXGraphicsConfigInfo *glxInfo; int isTranslucencySupported; /* Uses Xrender to find this out. */ + XRenderPictFormat renderPictFormat; /*Used only if translucency supported*/ } AwtGraphicsConfigData; typedef AwtGraphicsConfigData* AwtGraphicsConfigDataPtr; From 825bafa0eadbd5404f442de1d389c4cb8cbb0c63 Mon Sep 17 00:00:00 2001 From: Artem Ananiev Date: Wed, 6 May 2009 12:39:23 +0400 Subject: [PATCH 2/3] 6837004: java.awt.GraphicsDevice.setFullScreenWindow throws NPE for windows with background color not set Reviewed-by: yan, dcherepanov --- .../classes/java/awt/GraphicsDevice.java | 2 +- .../TranslucentWindow/TranslucentWindow.java | 83 +++++++++++++++++++ 2 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 jdk/test/java/awt/FullScreen/TranslucentWindow/TranslucentWindow.java diff --git a/jdk/src/share/classes/java/awt/GraphicsDevice.java b/jdk/src/share/classes/java/awt/GraphicsDevice.java index c7d9b13fba6..2080225ab43 100644 --- a/jdk/src/share/classes/java/awt/GraphicsDevice.java +++ b/jdk/src/share/classes/java/awt/GraphicsDevice.java @@ -282,7 +282,7 @@ public abstract class GraphicsDevice { w.setOpacity(1.0f); } Color bgColor = w.getBackground(); - if (bgColor.getAlpha() < 255) { + if ((bgColor != null) && (bgColor.getAlpha() < 255)) { bgColor = new Color(bgColor.getRed(), bgColor.getGreen(), bgColor.getBlue(), 255); w.setBackground(bgColor); diff --git a/jdk/test/java/awt/FullScreen/TranslucentWindow/TranslucentWindow.java b/jdk/test/java/awt/FullScreen/TranslucentWindow/TranslucentWindow.java new file mode 100644 index 00000000000..9facaaeb965 --- /dev/null +++ b/jdk/test/java/awt/FullScreen/TranslucentWindow/TranslucentWindow.java @@ -0,0 +1,83 @@ +/* + * Copyright 2009 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. + * + * 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. + */ + +/* + * @test + * @bug 6837004 + * @summary Checks that non-opaque window can be made a fullscreen window + * @author Artem Ananiev + * @run main TranslucentWindow + */ + +import java.awt.*; +import java.awt.geom.*; + +import static java.awt.GraphicsDevice.WindowTranslucency.*; + +import sun.awt.SunToolkit; + +public class TranslucentWindow { + public static void main(String args[]) { + GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); + GraphicsDevice gd = ge.getDefaultScreenDevice(); + + Frame f = new Frame("Test frame"); + f.setBounds(100, 100, 320, 240); + + // First, check it can be made fullscreen window without any effects applied + gd.setFullScreenWindow(f); + ((SunToolkit)Toolkit.getDefaultToolkit()).realSync(); + + gd.setFullScreenWindow(null); + ((SunToolkit)Toolkit.getDefaultToolkit()).realSync(); + + // Second, check if it applying any effects doesn't prevent the window + // from going into the fullscreen mode + if (gd.isWindowTranslucencySupported(PERPIXEL_TRANSPARENT)) { + f.setShape(new Ellipse2D.Float(0, 0, f.getWidth(), f.getHeight())); + } + if (gd.isWindowTranslucencySupported(TRANSLUCENT)) { + f.setOpacity(0.5f); + } + if (gd.isWindowTranslucencySupported(PERPIXEL_TRANSLUCENT)) { + f.setBackground(new Color(0, 0, 0, 128)); + } + gd.setFullScreenWindow(f); + ((SunToolkit)Toolkit.getDefaultToolkit()).realSync(); + + // Third, make sure all the effects are unset when entering the fullscreen mode + if (f.getShape() != null) { + throw new RuntimeException("Test FAILED: fullscreen window shape is not null"); + } + if (Math.abs(f.getOpacity() - 1.0f) > 1e-4) { + throw new RuntimeException("Test FAILED: fullscreen window opacity is not 1.0f"); + } + Color bgColor = f.getBackground(); + if ((bgColor != null) && (bgColor.getAlpha() != 255)) { + throw new RuntimeException("Test FAILED: fullscreen window background color is not opaque"); + } + + f.dispose(); + System.out.println("Test PASSED"); + } +} From a9fe649f3d47cfd84bd9f595a9bf97f173da183e Mon Sep 17 00:00:00 2001 From: Anthony Petrov Date: Wed, 6 May 2009 20:06:23 +0400 Subject: [PATCH 3/3] 6838046: Rollback 6762511 due to build failure (6838003) Reviewed-by: yan --- .../classes/sun/awt/X11GraphicsConfig.java | 19 ---- .../sun/java2d/x11/X11PMBlitBgLoops.java | 4 - .../sun/java2d/x11/X11PMBlitLoops.java | 16 --- .../sun/java2d/x11/X11SurfaceData.java | 37 +------ jdk/src/solaris/native/sun/awt/X11Color.c | 99 +++++-------------- .../solaris/native/sun/awt/awt_GraphicsEnv.c | 44 ++++++++- jdk/src/solaris/native/sun/awt/awt_p.h | 45 --------- 7 files changed, 71 insertions(+), 193 deletions(-) diff --git a/jdk/src/solaris/classes/sun/awt/X11GraphicsConfig.java b/jdk/src/solaris/classes/sun/awt/X11GraphicsConfig.java index c1eb6bbb1a0..7cfa8b08393 100644 --- a/jdk/src/solaris/classes/sun/awt/X11GraphicsConfig.java +++ b/jdk/src/solaris/classes/sun/awt/X11GraphicsConfig.java @@ -37,10 +37,7 @@ import java.awt.ImageCapabilities; import java.awt.Transparency; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; -import java.awt.color.ColorSpace; -import java.awt.image.ComponentColorModel; import java.awt.image.DirectColorModel; -import java.awt.image.DataBuffer; import java.awt.image.VolatileImage; import java.awt.image.WritableRaster; import java.awt.geom.AffineTransform; @@ -233,22 +230,6 @@ public class X11GraphicsConfig extends GraphicsConfiguration } } - public static DirectColorModel createDCM32(int rMask, int gMask, int bMask, - int aMask, boolean aPre) { - return new DirectColorModel( - ColorSpace.getInstance(ColorSpace.CS_sRGB), - 32, rMask, gMask, bMask, aMask, aPre, DataBuffer.TYPE_INT); - } - - public static ComponentColorModel createABGRCCM() { - ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_sRGB); - int[] nBits = {8, 8, 8, 8}; - int[] bOffs = {3, 2, 1, 0}; - return new ComponentColorModel(cs, nBits, true, true, - Transparency.TRANSLUCENT, - DataBuffer.TYPE_BYTE); - } - /** * Returns the default Transform for this configuration. This * Transform is typically the Identity transform for most normal diff --git a/jdk/src/solaris/classes/sun/java2d/x11/X11PMBlitBgLoops.java b/jdk/src/solaris/classes/sun/java2d/x11/X11PMBlitBgLoops.java index fd975d7e7f8..3adb5a69158 100644 --- a/jdk/src/solaris/classes/sun/java2d/x11/X11PMBlitBgLoops.java +++ b/jdk/src/solaris/classes/sun/java2d/x11/X11PMBlitBgLoops.java @@ -70,10 +70,6 @@ public class X11PMBlitBgLoops extends BlitBg { X11SurfaceData.UShort565RgbX11), new X11PMBlitBgLoops(X11SurfaceData.UShortIndexedX11_BM, X11SurfaceData.UShortIndexedX11), - new X11PMBlitBgLoops(X11SurfaceData.IntRgbX11_BM, - X11SurfaceData.IntArgbPreX11), - new X11PMBlitBgLoops(X11SurfaceData.IntBgrX11_BM, - X11SurfaceData.FourByteAbgrPreX11), }; GraphicsPrimitiveMgr.register(primitives); } diff --git a/jdk/src/solaris/classes/sun/java2d/x11/X11PMBlitLoops.java b/jdk/src/solaris/classes/sun/java2d/x11/X11PMBlitLoops.java index 0f73bf9702f..e519e71ded4 100644 --- a/jdk/src/solaris/classes/sun/java2d/x11/X11PMBlitLoops.java +++ b/jdk/src/solaris/classes/sun/java2d/x11/X11PMBlitLoops.java @@ -95,22 +95,6 @@ public class X11PMBlitLoops extends Blit { new X11PMBlitLoops(X11SurfaceData.UShortIndexedX11_BM, X11SurfaceData.UShortIndexedX11, true), - new X11PMBlitLoops(X11SurfaceData.IntRgbX11, - X11SurfaceData.IntArgbPreX11, true), - new X11PMBlitLoops(X11SurfaceData.IntRgbX11, - X11SurfaceData.IntArgbPreX11, false), - new X11PMBlitLoops(X11SurfaceData.IntRgbX11_BM, - X11SurfaceData.IntArgbPreX11, true), - - new X11PMBlitLoops(X11SurfaceData.IntBgrX11, - X11SurfaceData.FourByteAbgrPreX11, true), - new X11PMBlitLoops(X11SurfaceData.IntBgrX11, - X11SurfaceData.FourByteAbgrPreX11, false), - new X11PMBlitLoops(X11SurfaceData.IntBgrX11_BM, - X11SurfaceData.FourByteAbgrPreX11, true), - - - // delegate loops new DelegateBlitLoop(X11SurfaceData.IntBgrX11_BM, X11SurfaceData.IntBgrX11), diff --git a/jdk/src/solaris/classes/sun/java2d/x11/X11SurfaceData.java b/jdk/src/solaris/classes/sun/java2d/x11/X11SurfaceData.java index f613c118831..5f353c342df 100644 --- a/jdk/src/solaris/classes/sun/java2d/x11/X11SurfaceData.java +++ b/jdk/src/solaris/classes/sun/java2d/x11/X11SurfaceData.java @@ -81,13 +81,6 @@ public abstract class X11SurfaceData extends SurfaceData { DESC_INT_BGR_X11 = "Integer BGR Pixmap"; public static final String DESC_INT_RGB_X11 = "Integer RGB Pixmap"; - - public static final String - DESC_4BYTE_ABGR_PRE_X11 = "4 byte ABGR Pixmap with pre-multplied alpha"; - public static final String - DESC_INT_ARGB_PRE_X11 = "Integer ARGB Pixmap with pre-multiplied " + - "alpha"; - public static final String DESC_BYTE_IND_OPQ_X11 = "Byte Indexed Opaque Pixmap"; @@ -140,11 +133,6 @@ public abstract class X11SurfaceData extends SurfaceData { public static final SurfaceType IntRgbX11 = SurfaceType.IntRgb.deriveSubType(DESC_INT_RGB_X11); - public static final SurfaceType FourByteAbgrPreX11 = - SurfaceType.FourByteAbgrPre.deriveSubType(DESC_4BYTE_ABGR_PRE_X11); - public static final SurfaceType IntArgbPreX11 = - SurfaceType.IntArgbPre.deriveSubType(DESC_INT_ARGB_PRE_X11); - public static final SurfaceType ThreeByteRgbX11 = SurfaceType.ThreeByteRgb.deriveSubType(DESC_3BYTE_RGB_X11); public static final SurfaceType ThreeByteBgrX11 = @@ -425,7 +413,7 @@ public abstract class X11SurfaceData extends SurfaceData { int transparency) { return new X11PixmapSurfaceData(gc, width, height, image, - getSurfaceType(gc, transparency, true), + getSurfaceType(gc, transparency), cm, drawable, transparency); } @@ -509,13 +497,6 @@ public abstract class X11SurfaceData extends SurfaceData { public static SurfaceType getSurfaceType(X11GraphicsConfig gc, int transparency) - { - return getSurfaceType(gc, transparency, false); - } - - public static SurfaceType getSurfaceType(X11GraphicsConfig gc, - int transparency, - boolean pixmapSurface) { boolean transparent = (transparency == Transparency.BITMASK); SurfaceType sType; @@ -543,21 +524,11 @@ public abstract class X11SurfaceData extends SurfaceData { // Fall through for 32 bit case case 32: if (cm instanceof DirectColorModel) { - if (((SunToolkit)java.awt.Toolkit.getDefaultToolkit() - ).isTranslucencyCapable(gc) && !pixmapSurface) - { - sType = X11SurfaceData.IntArgbPreX11; + if (((DirectColorModel)cm).getRedMask() == 0xff0000) { + sType = transparent ? X11SurfaceData.IntRgbX11_BM : X11SurfaceData.IntRgbX11; } else { - if (((DirectColorModel)cm).getRedMask() == 0xff0000) { - sType = transparent ? X11SurfaceData.IntRgbX11_BM : - X11SurfaceData.IntRgbX11; - } else { - sType = transparent ? X11SurfaceData.IntBgrX11_BM : - X11SurfaceData.IntBgrX11; - } + sType = transparent ? X11SurfaceData.IntBgrX11_BM : X11SurfaceData.IntBgrX11; } - } else if (cm instanceof ComponentColorModel) { - sType = X11SurfaceData.FourByteAbgrPreX11; } else { throw new sun.java2d.InvalidPipeException("Unsupported bit " + diff --git a/jdk/src/solaris/native/sun/awt/X11Color.c b/jdk/src/solaris/native/sun/awt/X11Color.c index c8f7d4e2365..dbda559ea7f 100644 --- a/jdk/src/solaris/native/sun/awt/X11Color.c +++ b/jdk/src/solaris/native/sun/awt/X11Color.c @@ -886,27 +886,6 @@ awt_allocate_colors(AwtGraphicsConfigDataPtr awt_data) #define blue(v) (((v) >> 0) & 0xFF) #ifndef HEADLESS - -jobject getColorSpace(JNIEnv* env, jint csID) { - jclass clazz; - jobject cspaceL; - jmethodID mid; - - clazz = (*env)->FindClass(env,"java/awt/color/ColorSpace"); - mid = (*env)->GetStaticMethodID(env, clazz, "getInstance", - "(I)Ljava/awt/color/ColorSpace;"); - if (mid == NULL) { - return NULL; - } - - /* SECURITY: This is safe, because static methods cannot - * be overridden, and this method does not invoke - * client code - */ - - return (*env)->CallStaticObjectMethod(env, clazz, mid, csID); -} - jobject awtJNI_GetColorModel(JNIEnv *env, AwtGraphicsConfigDataPtr aData) { jobject awt_colormodel = NULL; @@ -920,61 +899,21 @@ jobject awtJNI_GetColorModel(JNIEnv *env, AwtGraphicsConfigDataPtr aData) (aData->awt_depth >= 15)) { clazz = (*env)->FindClass(env,"java/awt/image/DirectColorModel"); - if (!aData->isTranslucencySupported) { - mid = (*env)->GetMethodID(env,clazz,"","(IIIII)V"); + mid = (*env)->GetMethodID(env,clazz,"","(IIIII)V"); - if (mid == NULL) { - (*env)->PopLocalFrame(env, 0); - return NULL; - } - awt_colormodel = (*env)->NewObject(env,clazz, mid, - aData->awt_visInfo.depth, - aData->awt_visInfo.red_mask, - aData->awt_visInfo.green_mask, - aData->awt_visInfo.blue_mask, - 0); - } else { - clazz = (*env)->FindClass(env,"sun/awt/X11GraphicsConfig"); - if (clazz == NULL) { - (*env)->PopLocalFrame(env, 0); - return NULL; - } - - if (aData->renderPictFormat.direct.red == 16) { - mid = (*env)->GetStaticMethodID( env,clazz,"createDCM32", - "(IIIIZ)Ljava/awt/image/DirectColorModel;"); - - if (mid == NULL) { - (*env)->PopLocalFrame(env, 0); - return NULL; - } - - awt_colormodel = (*env)->CallStaticObjectMethod( - env,clazz, mid, - aData->renderPictFormat.direct.redMask - << aData->renderPictFormat.direct.red, - aData->renderPictFormat.direct.greenMask - << aData->renderPictFormat.direct.green, - aData->renderPictFormat.direct.blueMask - << aData->renderPictFormat.direct.blue, - aData->renderPictFormat.direct.alphaMask - << aData->renderPictFormat.direct.alpha, - JNI_TRUE); - } else { - mid = (*env)->GetStaticMethodID( env,clazz,"createABGRCCM", - "()Ljava/awt/image/ComponentColorModel;"); - - if (mid == NULL) { - (*env)->PopLocalFrame(env, 0); - return NULL; - } - - awt_colormodel = (*env)->CallStaticObjectMethod( - env,clazz, mid); - } + if (mid == NULL) { + (*env)->PopLocalFrame(env, 0); + return NULL; } + awt_colormodel = (*env)->NewObject(env,clazz, mid, + aData->awt_visInfo.depth, + aData->awt_visInfo.red_mask, + aData->awt_visInfo.green_mask, + aData->awt_visInfo.blue_mask, + 0); + if(awt_colormodel == NULL) { (*env)->PopLocalFrame(env, 0); @@ -984,13 +923,25 @@ jobject awtJNI_GetColorModel(JNIEnv *env, AwtGraphicsConfigDataPtr aData) } else if (aData->awt_visInfo.class == StaticGray && aData->awt_num_colors == 256) { + jclass clazz1; jobject cspace = NULL; jint bits[1]; jintArray bitsArray; jboolean falseboolean = JNI_FALSE; - cspace = getColorSpace(env, java_awt_color_ColorSpace_CS_GRAY); - + clazz1 = (*env)->FindClass(env,"java/awt/color/ColorSpace"); + mid = (*env)->GetStaticMethodID(env, clazz1, "getInstance", + "(I)Ljava/awt/color/ColorSpace;"); + if (mid == NULL) { + (*env)->PopLocalFrame(env, 0); + return NULL; + } + /* SECURITY: This is safe, because static methods cannot + * be overridden, and this method does not invoke + * client code + */ + cspace = (*env)->CallStaticObjectMethod(env, clazz1, mid, + java_awt_color_ColorSpace_CS_GRAY); if (cspace == NULL) { (*env)->PopLocalFrame(env, 0); return NULL; diff --git a/jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.c b/jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.c index 110cca632c4..2e80cf7206d 100644 --- a/jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.c +++ b/jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.c @@ -354,6 +354,48 @@ makeDefaultConfig(JNIEnv *env, int screen) { return NULL; } +/* Note: until we include the explicitly + * we have to define a couple of things ourselves. + */ +typedef unsigned long PictFormat; +#define PictTypeIndexed 0 +#define PictTypeDirect 1 + +typedef struct { + short red; + short redMask; + short green; + short greenMask; + short blue; + short blueMask; + short alpha; + short alphaMask; +} XRenderDirectFormat; + +typedef struct { + PictFormat id; + int type; + int depth; + XRenderDirectFormat direct; + Colormap colormap; +} XRenderPictFormat; + +#define PictFormatID (1 << 0) +#define PictFormatType (1 << 1) +#define PictFormatDepth (1 << 2) +#define PictFormatRed (1 << 3) +#define PictFormatRedMask (1 << 4) +#define PictFormatGreen (1 << 5) +#define PictFormatGreenMask (1 << 6) +#define PictFormatBlue (1 << 7) +#define PictFormatBlueMask (1 << 8) +#define PictFormatAlpha (1 << 9) +#define PictFormatAlphaMask (1 << 10) +#define PictFormatColormap (1 << 11) + +typedef XRenderPictFormat * +XRenderFindVisualFormatFunc (Display *dpy, _Xconst Visual *visual); + static void getAllConfigs (JNIEnv *env, int screen, AwtScreenDataPtr screenDataPtr) { @@ -493,8 +535,6 @@ getAllConfigs (JNIEnv *env, int screen, AwtScreenDataPtr screenDataPtr) { format->direct.alphaMask) { graphicsConfigs [ind]->isTranslucencySupported = 1; - memcpy(&graphicsConfigs [ind]->renderPictFormat, format, - sizeof(*format)); } } } diff --git a/jdk/src/solaris/native/sun/awt/awt_p.h b/jdk/src/solaris/native/sun/awt/awt_p.h index b0959357087..73e5dd0a88e 100644 --- a/jdk/src/solaris/native/sun/awt/awt_p.h +++ b/jdk/src/solaris/native/sun/awt/awt_p.h @@ -119,50 +119,6 @@ typedef struct _DamageRect { } DamageRect; #ifndef HEADLESS - -/* Note: until we include the explicitly - * we have to define a couple of things ourselves. - */ -typedef unsigned long PictFormat; -#define PictTypeIndexed 0 -#define PictTypeDirect 1 - -typedef struct { - short red; - short redMask; - short green; - short greenMask; - short blue; - short blueMask; - short alpha; - short alphaMask; -} XRenderDirectFormat; - -typedef struct { - PictFormat id; - int type; - int depth; - XRenderDirectFormat direct; - Colormap colormap; -} XRenderPictFormat; - -#define PictFormatID (1 << 0) -#define PictFormatType (1 << 1) -#define PictFormatDepth (1 << 2) -#define PictFormatRed (1 << 3) -#define PictFormatRedMask (1 << 4) -#define PictFormatGreen (1 << 5) -#define PictFormatGreenMask (1 << 6) -#define PictFormatBlue (1 << 7) -#define PictFormatBlueMask (1 << 8) -#define PictFormatAlpha (1 << 9) -#define PictFormatAlphaMask (1 << 10) -#define PictFormatColormap (1 << 11) - -typedef XRenderPictFormat * -XRenderFindVisualFormatFunc (Display *dpy, _Xconst Visual *visual); -/* END OF Xrender.h chunk */ - typedef struct _AwtGraphicsConfigData { int awt_depth; Colormap awt_cmap; @@ -180,7 +136,6 @@ typedef struct _AwtGraphicsConfigData { ColorData *color_data; struct _GLXGraphicsConfigInfo *glxInfo; int isTranslucencySupported; /* Uses Xrender to find this out. */ - XRenderPictFormat renderPictFormat; /*Used only if translucency supported*/ } AwtGraphicsConfigData; typedef AwtGraphicsConfigData* AwtGraphicsConfigDataPtr;