Hi Clemens,
thanks for the suggested fix. It looks fine to me
so I could integrate it for you providing there are
no issues found by other reviewers.
Could you produce an automated regression test?
Just construct an 8-bit image with white as transparent
color, render it to a some-color-filled VI, then
get a snapshot and check that the color of the VI
didn't change. If it did, throw a RuntimeError..
If we do it quickly (like, today) we can integrate it into
the next build..
Thanks,
Dmitri
Clemens Eisserer wrote:
Hi,
It may - if the transparent pixel is 0th entry in the colormap.
I think we'll have to resort to another boolean which tells
whether bgPixel is valid - like you suggested.
Yes, I also think this would be a better fix, and it would make the
source more readable in my opinion.
I copied my first attemp to fix the problem below.
lg Clemens
PS: Thanks for open-sourcing java!
---
/home/ce/mozilla_java_prob/jdk7_original/j2se/src/solaris/native/sun/java2d/x11/X11SurfaceData.c
2007-09-12 20:11:42.000000000 +0200
+++
/home/ce/mozilla_java_prob/jdk7_modified/j2se/src/solaris/native/sun/java2d/x11/X11SurfaceData.c
2007-09-28 12:25:19.000000000 +0200
@@ -256,6 +256,7 @@
xsdo->isPixmap = JNI_FALSE;
xsdo->bitmask = 0;
xsdo->bgPixel = 0;
+ xsdo->isBgInitialized = JNI_FALSE;
#ifdef MITSHM
xsdo->shmPMData.shmSegInfo = NULL;
xsdo->shmPMData.xRequestSent = JNI_FALSE;
@@ -997,7 +998,7 @@
}
/* the background pixel is not valid anymore */
if (xpriv->lockFlags & SD_LOCK_WRITE) {
- xsdo->bgPixel = 0;
+ xsdo->isBgInitialized = JNI_FALSE;
}
xpriv->lockType = X11SD_LOCK_UNLOCKED;
AWT_UNLOCK();
@@ -1485,7 +1486,7 @@
/* Check if current color of the transparent pixels is different
from the specified one */
- if (xsdo->bgPixel != pixel + 1) {
+ if (xsdo->bgPixel != pixel || xsdo->isBgInitialized == JNI_FALSE) {
GC srcGC;
GC bmGC;
@@ -1525,7 +1526,8 @@
XFreeGC(awt_display, bmGC);
XFreeGC(awt_display, srcGC);
- xsdo->bgPixel = pixel + 1;
+ xsdo->bgPixel = pixel;
+ xsdo->isBgInitialized = JNI_TRUE;
}
return xsdo->drawable;
---
/home/ce/mozilla_java_prob/jdk7_original/j2se/src/solaris/native/sun/java2d/x11/X11SurfaceData.h
2007-09-12 20:11:42.000000000 +0200
+++
/home/ce/mozilla_java_prob/jdk7_modified/j2se/src/solaris/native/sun/java2d/x11/X11SurfaceData.h
2007-09-28 12:22:45.000000000 +0200
@@ -107,6 +107,7 @@
void *dgaDev;
Pixmap bitmask;
jint bgPixel; /* bg pixel for the pixmap */
+ jboolean isBgInitialized;
jint pmWidth; /* width, height of the */
jint pmHeight; /* pixmap */
#ifdef MITSHM