diff options
author | Silenio Quarti | 2009-11-05 22:17:36 +0000 |
---|---|---|
committer | Silenio Quarti | 2009-11-05 22:17:36 +0000 |
commit | f9d6bb80b3e84d11df02f31ecd4d6bfb1008d18d (patch) | |
tree | b66fa4aa6e99291ec111bf4ce3263258527dfa9e | |
parent | 713f071a71ec72634dc56da76c4395e90bba12a3 (diff) | |
download | eclipse.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-x | bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java | 25 |
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; } } |