summaryrefslogtreecommitdiffstats
path: root/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TrayItem.java
diff options
context:
space:
mode:
authorFelipe Heidrich <fheidric>2005-06-15 15:37:46 +0000
committerFelipe Heidrich <fheidric>2005-06-15 15:37:46 +0000
commit0fab6cf75713693e87a3d1ed82011356a86495cb (patch)
treea8214f338eeeb52b56223ff8c55103c8aa05951f /bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TrayItem.java
parent2f5244584cab73ff6723e21a7ebc1ac1f78088a9 (diff)
downloadeclipse.platform.swt-0fab6cf75713693e87a3d1ed82011356a86495cb.tar.gz
eclipse.platform.swt-0fab6cf75713693e87a3d1ed82011356a86495cb.tar.xz
eclipse.platform.swt-0fab6cf75713693e87a3d1ed82011356a86495cb.zip
99745
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TrayItem.java')
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TrayItem.java49
1 files changed, 46 insertions, 3 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TrayItem.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TrayItem.java
index 406f213ff5..24f0f84eba 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TrayItem.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TrayItem.java
@@ -112,6 +112,51 @@ protected void checkSubclass () {
if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
}
+Image createIcon (Image image) {
+ ImageData data = image.getImageData ();
+ if (data.alpha == -1 && data.alphaData == null) {
+ ImageData mask = data.getTransparencyMask ();
+ return new Image (display, data, mask);
+ }
+ int width = data.width, height = data.height;
+ int hMask, hBitmap;
+ int hDC = OS.GetDC (0);
+ int dstHdc = OS.CreateCompatibleDC (hDC), oldDstBitmap;
+ if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (5, 1)) {
+ hBitmap = Display.create32bitDIB (image.handle, data.alpha, data.alphaData, data.transparentPixel);
+ hMask = OS.CreateBitmap (width, height, 1, 1, null);
+ oldDstBitmap = OS.SelectObject (dstHdc, hMask);
+ OS.PatBlt (dstHdc, 0, 0, width, height, OS.BLACKNESS);
+ } else {
+ hMask = Display.createMaskFromAlpha (data, width, height);
+ /* Icons need black pixels where the mask is transparent */
+ hBitmap = OS.CreateCompatibleBitmap (hDC, width, height);
+ oldDstBitmap = OS.SelectObject (dstHdc, hBitmap);
+ int srcHdc = OS.CreateCompatibleDC (hDC);
+ int oldSrcBitmap = OS.SelectObject (srcHdc, image.handle);
+ OS.PatBlt (dstHdc, 0, 0, width, height, OS.BLACKNESS);
+ OS.BitBlt (dstHdc, 0, 0, width, height, srcHdc, 0, 0, OS.SRCINVERT);
+ OS.SelectObject (srcHdc, hMask);
+ OS.BitBlt (dstHdc, 0, 0, width, height, srcHdc, 0, 0, OS.SRCAND);
+ OS.SelectObject (srcHdc, image.handle);
+ OS.BitBlt (dstHdc, 0, 0, width, height, srcHdc, 0, 0, OS.SRCINVERT);
+ OS.SelectObject (srcHdc, oldSrcBitmap);
+ OS.DeleteDC (srcHdc);
+ }
+ OS.SelectObject (dstHdc, oldDstBitmap);
+ OS.DeleteDC (dstHdc);
+ OS.ReleaseDC (0, hDC);
+ ICONINFO info = new ICONINFO ();
+ info.fIcon = true;
+ info.hbmColor = hBitmap;
+ info.hbmMask = hMask;
+ int hIcon = OS.CreateIconIndirect (info);
+ if (hIcon == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+ OS.DeleteObject (hBitmap);
+ OS.DeleteObject (hMask);
+ return Image.win32_new (display, SWT.ICON, hIcon);
+}
+
void createWidget () {
if (OS.IsWinCE) return;
NOTIFYICONDATA iconData = OS.IsUnicode ? (NOTIFYICONDATA) new NOTIFYICONDATAW () : new NOTIFYICONDATAA ();
@@ -271,9 +316,7 @@ public void setImage (Image image) {
if (icon != null) {
switch (icon.type) {
case SWT.BITMAP:
- ImageData data = icon.getImageData ();
- ImageData mask = data.getTransparencyMask ();
- image2 = new Image (display, data, mask);
+ image2 = createIcon (image);
hIcon = image2.handle;
break;
case SWT.ICON: