Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSilenio Quarti2009-11-05 22:17:36 +0000
committerSilenio Quarti2009-11-05 22:17:36 +0000
commitf9d6bb80b3e84d11df02f31ecd4d6bfb1008d18d (patch)
treeb66fa4aa6e99291ec111bf4ce3263258527dfa9e
parent713f071a71ec72634dc56da76c4395e90bba12a3 (diff)
downloadeclipse.platform.swt-f9d6bb80b3e84d11df02f31ecd4d6bfb1008d18d.tar.gz
eclipse.platform.swt-f9d6bb80b3e84d11df02f31ecd4d6bfb1008d18d.tar.xz
eclipse.platform.swt-f9d6bb80b3e84d11df02f31ecd4d6bfb1008d18d.zip
Bug 291307 - Menu images (PNG) does not support semi-alpha-transparency on Windows Vista/7 (back port to 3.4.2)v3453a
-rwxr-xr-xbundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java25
1 files changed, 21 insertions, 4 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java
index 609f342b7a..26a09b4248 100755
--- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java
@@ -871,16 +871,33 @@ static int /*long*/ create32bitDIB (Image image) {
} else if (alpha != -1) {
for (int y = 0, dp = 0; y < imgHeight; ++y) {
for (int x = 0; x < imgWidth; ++x) {
- srcData [dp + 3] = (byte)alpha;
- if (srcData [dp + 3] == 0) srcData [dp + 0] = srcData [dp + 1] = srcData [dp + 2] = 0;
+ int r = ((srcData[dp + 0] & 0xFF) * alpha) + 128;
+ r = (r + (r >> 8)) >> 8;
+ int g = ((srcData[dp + 1] & 0xFF) * alpha) + 128;
+ g = (g + (g >> 8)) >> 8;
+ int b = ((srcData[dp + 2] & 0xFF) * alpha) + 128;
+ b = (b + (b >> 8)) >> 8;
+ srcData[dp+0] = (byte)r;
+ srcData[dp+1] = (byte)g;
+ srcData[dp+2] = (byte)b;
+ srcData[dp+3] = (byte)alpha;
dp += 4;
}
}
} else if (alphaData != null) {
for (int y = 0, dp = 0, ap = 0; y < imgHeight; ++y) {
for (int x = 0; x < imgWidth; ++x) {
- srcData [dp + 3] = alphaData [ap++];
- if (srcData [dp + 3] == 0) srcData [dp + 0] = srcData [dp + 1] = srcData [dp + 2] = 0;
+ int a = alphaData[ap++] & 0xFF;
+ int r = ((srcData[dp + 0] & 0xFF) * a) + 128;
+ r = (r + (r >> 8)) >> 8;
+ int g = ((srcData[dp + 1] & 0xFF) * a) + 128;
+ g = (g + (g >> 8)) >> 8;
+ int b = ((srcData[dp + 2] & 0xFF) * a) + 128;
+ b = (b + (b >> 8)) >> 8;
+ srcData[dp+0] = (byte)r;
+ srcData[dp+1] = (byte)g;
+ srcData[dp+2] = (byte)b;
+ srcData[dp+3] = (byte)a;
dp += 4;
}
}

Back to the top