summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelipe Heidrich <fheidric>2009-10-06 14:19:46 +0000
committerFelipe Heidrich <fheidric>2009-10-06 14:19:46 +0000
commit5b398c34e7c4ee58a33a38b1c1effe23bfe02aec (patch)
tree2a9626ededcdae5e601bfd80a3684fd33df0661b
parente5e5e84ba2f4928d3aca0d741233a824286d2f42 (diff)
downloadeclipse.platform.swt-5b398c34e7c4ee58a33a38b1c1effe23bfe02aec.tar.gz
eclipse.platform.swt-5b398c34e7c4ee58a33a38b1c1effe23bfe02aec.tar.xz
eclipse.platform.swt-5b398c34e7c4ee58a33a38b1c1effe23bfe02aec.zip
Bug 291307 - Menu images (PNG) does not support semi-alpha-transparency on Windows Vista/7 (3.5.x backport)
-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 e3a2fee7b8..9b8e15f73e 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
@@ -878,16 +878,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;
}
}