annotate dwt/internal/ImageList.d @ 213:36f5cb12e1a2

Update to SWT 3.4M7
author Frank Benoit <benoit@tionex.de>
date Sat, 17 May 2008 17:34:28 +0200
parents 619faee45ef6
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
33
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1 /*******************************************************************************
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2 * Copyright (c) 2000, 2007 IBM Corporation and others.
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
7 *
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
8 * Contributors:
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
9 * IBM Corporation - initial API and implementation
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
10 * Port to the D programming language:
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
11 * Frank Benoit <benoit@tionex.de>
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
12 *******************************************************************************/
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
13 module dwt.internal.ImageList;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
14
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
15
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
16 import dwt.DWT;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
17 import dwt.graphics.Color;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
18 import dwt.graphics.Image;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
19 import dwt.graphics.ImageData;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
20 import dwt.graphics.PaletteData;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
21 import dwt.graphics.Point;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
22 import dwt.graphics.RGB;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
23 import dwt.graphics.Rectangle;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
24 import dwt.internal.win32.OS;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
25
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
26 import dwt.dwthelper.utils;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
27 import dwt.dwthelper.System;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
28
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
29 public class ImageList {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
30 HIMAGELIST handle;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
31 int style, refCount;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
32 Image [] images;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
33
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
34 public this (int style) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
35 this.style = style;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
36 int flags = OS.ILC_MASK;
117
25f88bf5a6df Only one file was damaged
Frank Benoit <benoit@tionex.de>
parents: 115
diff changeset
37 static if (OS.IsWinCE) {
33
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
38 flags |= OS.ILC_COLOR;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
39 } else {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
40 if (OS.COMCTL32_MAJOR >= 6) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
41 flags |= OS.ILC_COLOR32;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
42 } else {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
43 auto hDC = OS.GetDC (null);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
44 auto bits = OS.GetDeviceCaps (hDC, OS.BITSPIXEL);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
45 auto planes = OS.GetDeviceCaps (hDC, OS.PLANES);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
46 OS.ReleaseDC (null, hDC);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
47 int depth = bits * planes;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
48 switch (depth) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
49 case 4: flags |= OS.ILC_COLOR4; break;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
50 case 8: flags |= OS.ILC_COLOR8; break;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
51 case 16: flags |= OS.ILC_COLOR16; break;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
52 case 24: flags |= OS.ILC_COLOR24; break;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
53 case 32: flags |= OS.ILC_COLOR32; break;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
54 default: flags |= OS.ILC_COLOR; break;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
55 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
56 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
57 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
58 if ((style & DWT.RIGHT_TO_LEFT) !is 0) flags |= OS.ILC_MIRROR;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
59 handle = OS.ImageList_Create (32, 32, flags, 16, 16);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
60 images = new Image [4];
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
61 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
62
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
63 public int add (Image image) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
64 int count = OS.ImageList_GetImageCount (handle);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
65 int index = 0;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
66 while (index < count) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
67 if (images [index] !is null) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
68 if (images [index].isDisposed ()) images [index] = null;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
69 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
70 if (images [index] is null) break;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
71 index++;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
72 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
73 if (count is 0) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
74 Rectangle rect = image.getBounds ();
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
75 OS.ImageList_SetIconSize (handle, rect.width, rect.height);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
76 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
77 set (index, image, count);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
78 if (index is images.length) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
79 Image [] newImages = new Image [images.length + 4];
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
80 System.arraycopy (images, 0, newImages, 0, images.length);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
81 images = newImages;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
82 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
83 images [index] = image;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
84 return index;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
85 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
86
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
87 public int addRef() {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
88 return ++refCount;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
89 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
90
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
91 HBITMAP copyBitmap (HBITMAP hImage, int width, int height) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
92 BITMAP bm;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
93 OS.GetObject (hImage, BITMAP.sizeof, &bm);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
94 auto hDC = OS.GetDC (null);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
95 auto hdc1 = OS.CreateCompatibleDC (hDC);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
96 OS.SelectObject (hdc1, hImage);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
97 auto hdc2 = OS.CreateCompatibleDC (hDC);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
98 /*
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
99 * Feature in Windows. If a bitmap has a 32-bit depth and any
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
100 * pixel has an alpha value different than zero, common controls
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
101 * version 6.0 assumes that the bitmap should be alpha blended.
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
102 * AlphaBlend() composes the alpha channel of a destination 32-bit
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
103 * depth image with the alpha channel of the source image. This
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
104 * may cause opaque images to draw transparently. The fix is
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
105 * remove the alpha channel of opaque images by down sampling
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
106 * it to 24-bit depth.
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
107 */
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
108 HBITMAP hBitmap;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
109 if (bm.bmBitsPixel is 32 && OS.COMCTL32_MAJOR >= 6 && OS.IsAppThemed ()) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
110 BITMAPINFOHEADER bmiHeader;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
111 bmiHeader.biSize = BITMAPINFOHEADER.sizeof;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
112 bmiHeader.biWidth = width;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
113 bmiHeader.biHeight = -height;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
114 bmiHeader.biPlanes = 1;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
115 bmiHeader.biBitCount = cast(short)24;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
116 static if (OS.IsWinCE) bmiHeader.biCompression = OS.BI_BITFIELDS;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
117 else bmiHeader.biCompression = OS.BI_RGB;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
118 byte[] bmi = new byte[BITMAPINFOHEADER.sizeof + (OS.IsWinCE ? 12 : 0)];
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
119 *cast(BITMAPINFOHEADER*)bmi.ptr = bmiHeader;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
120 //OS.MoveMemory(bmi, bmiHeader, BITMAPINFOHEADER.sizeof);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
121 /* Set the rgb colors into the bitmap info */
117
25f88bf5a6df Only one file was damaged
Frank Benoit <benoit@tionex.de>
parents: 115
diff changeset
122 static if (OS.IsWinCE) {
33
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
123 int redMask = 0xFF00;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
124 int greenMask = 0xFF0000;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
125 int blueMask = 0xFF000000;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
126 /* big endian */
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
127 int offset = BITMAPINFOHEADER.sizeof;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
128 bmi[offset] = cast(byte)((redMask & 0xFF000000) >> 24);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
129 bmi[offset + 1] = cast(byte)((redMask & 0xFF0000) >> 16);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
130 bmi[offset + 2] = cast(byte)((redMask & 0xFF00) >> 8);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
131 bmi[offset + 3] = cast(byte)((redMask & 0xFF) >> 0);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
132 bmi[offset + 4] = cast(byte)((greenMask & 0xFF000000) >> 24);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
133 bmi[offset + 5] = cast(byte)((greenMask & 0xFF0000) >> 16);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
134 bmi[offset + 6] = cast(byte)((greenMask & 0xFF00) >> 8);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
135 bmi[offset + 7] = cast(byte)((greenMask & 0xFF) >> 0);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
136 bmi[offset + 8] = cast(byte)((blueMask & 0xFF000000) >> 24);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
137 bmi[offset + 9] = cast(byte)((blueMask & 0xFF0000) >> 16);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
138 bmi[offset + 10] = cast(byte)((blueMask & 0xFF00) >> 8);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
139 bmi[offset + 11] = cast(byte)((blueMask & 0xFF) >> 0);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
140 }
213
36f5cb12e1a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 162
diff changeset
141 void* pBits;
36f5cb12e1a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 162
diff changeset
142 hBitmap = OS.CreateDIBSection(null, cast(BITMAPINFO*)bmi.ptr, OS.DIB_RGB_COLORS, &pBits, null, 0);
33
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
143 } else {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
144 hBitmap = OS.CreateCompatibleBitmap (hDC, width, height);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
145 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
146 OS.SelectObject (hdc2, hBitmap);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
147 if (width !is bm.bmWidth || height !is bm.bmHeight) {
117
25f88bf5a6df Only one file was damaged
Frank Benoit <benoit@tionex.de>
parents: 115
diff changeset
148 static if (!OS.IsWinCE) OS.SetStretchBltMode(hdc2, OS.COLORONCOLOR);
33
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
149 OS.StretchBlt (hdc2, 0, 0, width, height, hdc1, 0, 0, bm.bmWidth, bm.bmHeight, OS.SRCCOPY);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
150 } else {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
151 OS.BitBlt (hdc2, 0, 0, width, height, hdc1, 0, 0, OS.SRCCOPY);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
152 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
153 OS.DeleteDC (hdc1);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
154 OS.DeleteDC (hdc2);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
155 OS.ReleaseDC (null, hDC);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
156 return hBitmap;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
157 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
158
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
159 HBITMAP copyIcon (HBITMAP hImage, int width, int height) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
160 static if (OS.IsWinCE) DWT.error(DWT.ERROR_NOT_IMPLEMENTED);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
161 auto hIcon = OS.CopyImage (hImage, OS.IMAGE_ICON, width, height, 0);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
162 return hIcon !is null ? hIcon : hImage;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
163 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
164
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
165 HBITMAP copyWithAlpha (HBITMAP hBitmap, int background, byte[] alphaData, int destWidth, int destHeight) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
166 BITMAP bm;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
167 OS.GetObject (hBitmap, BITMAP.sizeof, &bm);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
168 int srcWidth = bm.bmWidth;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
169 int srcHeight = bm.bmHeight;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
170
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
171 /* Create resources */
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
172 auto hdc = OS.GetDC (null);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
173 auto srcHdc = OS.CreateCompatibleDC (hdc);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
174 auto oldSrcBitmap = OS.SelectObject (srcHdc, hBitmap);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
175 auto memHdc = OS.CreateCompatibleDC (hdc);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
176 BITMAPINFOHEADER bmiHeader;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
177 bmiHeader.biSize = BITMAPINFOHEADER.sizeof;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
178 bmiHeader.biWidth = srcWidth;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
179 bmiHeader.biHeight = -srcHeight;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
180 bmiHeader.biPlanes = 1;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
181 bmiHeader.biBitCount = 32;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
182 bmiHeader.biCompression = OS.BI_RGB;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
183 byte [] bmi = new byte[BITMAPINFOHEADER.sizeof];
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
184 *cast(BITMAPINFOHEADER*)bmi.ptr = bmiHeader;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
185 //OS.MoveMemory (bmi, bmiHeader, BITMAPINFOHEADER.sizeof);
213
36f5cb12e1a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 162
diff changeset
186 void* pBits;
36f5cb12e1a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 162
diff changeset
187 auto memDib = OS.CreateDIBSection (null, cast(BITMAPINFO*)bmi.ptr, OS.DIB_RGB_COLORS, &pBits, null, 0);
33
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
188 if (memDib is null) DWT.error (DWT.ERROR_NO_HANDLES);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
189 auto oldMemBitmap = OS.SelectObject (memHdc, memDib);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
190
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
191 BITMAP dibBM;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
192 OS.GetObject (memDib, BITMAP.sizeof, &dibBM);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
193 int sizeInBytes = dibBM.bmWidthBytes * dibBM.bmHeight;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
194
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
195 /* Get the foreground pixels */
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
196 OS.BitBlt (memHdc, 0, 0, srcWidth, srcHeight, srcHdc, 0, 0, OS.SRCCOPY);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
197 byte[] srcData = (cast(byte*)dibBM.bmBits)[ 0 .. sizeInBytes].dup;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
198 //OS.MoveMemory (srcData, dibBM.bmBits, sizeInBytes);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
199
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
200 /* Merge the alpha channel in place */
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
201 if (alphaData !is null) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
202 int spinc = dibBM.bmWidthBytes - srcWidth * 4;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
203 int ap = 0, sp = 3;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
204 for (int y = 0; y < srcHeight; ++y) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
205 for (int x = 0; x < srcWidth; ++x) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
206 srcData [sp] = alphaData [ap++];
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
207 sp += 4;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
208 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
209 sp += spinc;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
210 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
211 } else {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
212 byte transRed = cast(byte)(background & 0xFF);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
213 byte transGreen = cast(byte)((background >> 8) & 0xFF);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
214 byte transBlue = cast(byte)((background >> 16) & 0xFF);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
215 final int spinc = dibBM.bmWidthBytes - srcWidth * 4;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
216 int sp = 3;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
217 for (int y = 0; y < srcHeight; ++y) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
218 for (int x = 0; x < srcWidth; ++x) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
219 srcData [sp] = (srcData[sp-1] is transRed && srcData[sp-2] is transGreen && srcData[sp-3] is transBlue) ? 0 : cast(byte)255;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
220 sp += 4;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
221 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
222 sp += spinc;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
223 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
224 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
225 (cast(byte*)dibBM.bmBits)[ 0 .. sizeInBytes] = srcData;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
226 //OS.MoveMemory (dibBM.bmBits, srcData, sizeInBytes);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
227
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
228 /* Stretch and free resources */
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
229 if (srcWidth !is destWidth || srcHeight !is destHeight) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
230 BITMAPINFOHEADER bmiHeader2;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
231 bmiHeader2.biSize = BITMAPINFOHEADER.sizeof;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
232 bmiHeader2.biWidth = destWidth;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
233 bmiHeader2.biHeight = -destHeight;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
234 bmiHeader2.biPlanes = 1;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
235 bmiHeader2.biBitCount = 32;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
236 bmiHeader2.biCompression = OS.BI_RGB;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
237 byte [] bmi2 = new byte[BITMAPINFOHEADER.sizeof];
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
238 *cast(BITMAPINFOHEADER*)bmi2.ptr = bmiHeader2;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
239 //OS.MoveMemory (bmi2, bmiHeader2, BITMAPINFOHEADER.sizeof);
213
36f5cb12e1a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 162
diff changeset
240 void* pBits2;
36f5cb12e1a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 162
diff changeset
241 auto memDib2 = OS.CreateDIBSection (null, cast(BITMAPINFO*)bmi2.ptr, OS.DIB_RGB_COLORS, &pBits2, null, 0);
33
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
242 auto memHdc2 = OS.CreateCompatibleDC (hdc);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
243 auto oldMemBitmap2 = OS.SelectObject (memHdc2, memDib2);
117
25f88bf5a6df Only one file was damaged
Frank Benoit <benoit@tionex.de>
parents: 115
diff changeset
244 static if (!OS.IsWinCE) OS.SetStretchBltMode(memHdc2, OS.COLORONCOLOR);
33
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
245 OS.StretchBlt (memHdc2, 0, 0, destWidth, destHeight, memHdc, 0, 0, srcWidth, srcHeight, OS.SRCCOPY);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
246 OS.SelectObject (memHdc2, oldMemBitmap2);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
247 OS.DeleteDC (memHdc2);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
248 OS.SelectObject (memHdc, oldMemBitmap);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
249 OS.DeleteDC (memHdc);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
250 OS.DeleteObject (memDib);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
251 memDib = memDib2;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
252 } else {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
253 OS.SelectObject (memHdc, oldMemBitmap);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
254 OS.DeleteDC (memHdc);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
255 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
256 OS.SelectObject (srcHdc, oldSrcBitmap);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
257 OS.DeleteDC (srcHdc);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
258 OS.ReleaseDC (null, hdc);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
259 return memDib;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
260 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
261
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
262 HBITMAP createMaskFromAlpha (ImageData data, int destWidth, int destHeight) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
263 int srcWidth = data.width;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
264 int srcHeight = data.height;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
265 ImageData mask = ImageData.internal_new (srcWidth, srcHeight, 1,
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
266 new PaletteData([new RGB (0, 0, 0), new RGB (0xff, 0xff, 0xff)]),
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
267 2, null, 1, null, null, -1, -1, -1, 0, 0, 0, 0);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
268 int ap = 0;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
269 for (int y = 0; y < mask.height; y++) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
270 for (int x = 0; x < mask.width; x++) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
271 mask.setPixel (x, y, (data.alphaData [ap++] & 0xff) <= 127 ? 1 : 0);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
272 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
273 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
274 auto hMask = OS.CreateBitmap (srcWidth, srcHeight, 1, 1, mask.data.ptr);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
275 if (srcWidth !is destWidth || srcHeight !is destHeight) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
276 auto hdc = OS.GetDC (null);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
277 auto hdc1 = OS.CreateCompatibleDC (hdc);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
278 OS.SelectObject (hdc1, hMask);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
279 auto hdc2 = OS.CreateCompatibleDC (hdc);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
280 auto hMask2 = OS.CreateBitmap (destWidth, destHeight, 1, 1, null);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
281 OS.SelectObject (hdc2, hMask2);
117
25f88bf5a6df Only one file was damaged
Frank Benoit <benoit@tionex.de>
parents: 115
diff changeset
282 static if (!OS.IsWinCE) OS.SetStretchBltMode(hdc2, OS.COLORONCOLOR);
33
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
283 OS.StretchBlt (hdc2, 0, 0, destWidth, destHeight, hdc1, 0, 0, srcWidth, srcHeight, OS.SRCCOPY);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
284 OS.DeleteDC (hdc1);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
285 OS.DeleteDC (hdc2);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
286 OS.ReleaseDC (null, hdc);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
287 OS.DeleteObject(hMask);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
288 hMask = hMask2;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
289 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
290 return hMask;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
291 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
292
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
293 HBITMAP createMask (HBITMAP hBitmap, int destWidth, int destHeight, int background, int transparentPixel) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
294 BITMAP bm;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
295 OS.GetObject (hBitmap, BITMAP.sizeof, &bm);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
296 int srcWidth = bm.bmWidth;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
297 int srcHeight = bm.bmHeight;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
298 auto hMask = OS.CreateBitmap (destWidth, destHeight, 1, 1, null);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
299 auto hDC = OS.GetDC (null);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
300 auto hdc1 = OS.CreateCompatibleDC (hDC);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
301 if (background !is -1) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
302 OS.SelectObject (hdc1, hBitmap);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
303
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
304 /*
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
305 * If the image has a palette with multiple entries having
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
306 * the same color and one of those entries is the transparentPixel,
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
307 * only the first entry becomes transparent. To avoid this
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
308 * problem, temporarily change the image palette to a palette
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
309 * where the transparentPixel is white and everything else is
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
310 * black.
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
311 */
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
312 bool isDib = bm.bmBits !is null;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
313 byte[] originalColors = null;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
314 if (!OS.IsWinCE && transparentPixel !is -1 && isDib && bm.bmBitsPixel <= 8) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
315 int maxColors = 1 << bm.bmBitsPixel;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
316 byte[] oldColors = new byte[maxColors * 4];
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
317 OS.GetDIBColorTable(hdc1, 0, maxColors, cast(RGBQUAD*)oldColors.ptr);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
318 int offset = transparentPixel * 4;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
319 byte[] newColors = new byte[oldColors.length];
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
320 newColors[offset] = cast(byte)0xFF;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
321 newColors[offset+1] = cast(byte)0xFF;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
322 newColors[offset+2] = cast(byte)0xFF;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
323 OS.SetDIBColorTable(hdc1, 0, maxColors, cast(RGBQUAD*)newColors.ptr);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
324 originalColors = oldColors;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
325 OS.SetBkColor (hdc1, 0xFFFFFF);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
326 } else {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
327 OS.SetBkColor (hdc1, background);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
328 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
329
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
330 auto hdc2 = OS.CreateCompatibleDC (hDC);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
331 OS.SelectObject (hdc2, hMask);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
332 if (destWidth !is srcWidth || destHeight !is srcHeight) {
117
25f88bf5a6df Only one file was damaged
Frank Benoit <benoit@tionex.de>
parents: 115
diff changeset
333 static if (!OS.IsWinCE) OS.SetStretchBltMode (hdc2, OS.COLORONCOLOR);
33
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
334 OS.StretchBlt (hdc2, 0, 0, destWidth, destHeight, hdc1, 0, 0, srcWidth, srcHeight, OS.SRCCOPY);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
335 } else {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
336 OS.BitBlt (hdc2, 0, 0, destWidth, destHeight, hdc1, 0, 0, OS.SRCCOPY);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
337 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
338 OS.DeleteDC (hdc2);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
339
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
340 /* Put back the original palette */
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
341 if (originalColors !is null) OS.SetDIBColorTable(hdc1, 0, 1 << bm.bmBitsPixel, cast(RGBQUAD*)originalColors.ptr);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
342 } else {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
343 auto hOldBitmap = OS.SelectObject (hdc1, hMask);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
344 OS.PatBlt (hdc1, 0, 0, destWidth, destHeight, OS.BLACKNESS);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
345 OS.SelectObject (hdc1, hOldBitmap);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
346 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
347 OS.ReleaseDC (null, hDC);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
348 OS.DeleteDC (hdc1);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
349 return hMask;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
350 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
351
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
352 public void dispose () {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
353 if (handle !is null) OS.ImageList_Destroy (handle);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
354 handle = null;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
355 images = null;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
356 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
357
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
358 public Image get (int index) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
359 return images [index];
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
360 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
361
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
362 public int getStyle () {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
363 return style;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
364 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
365
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
366 public HIMAGELIST getHandle () {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
367 return handle;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
368 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
369
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
370 public Point getImageSize() {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
371 int cx, cy;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
372 OS.ImageList_GetIconSize (handle, &cx, &cy);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
373 return new Point (cx, cy);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
374 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
375
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
376 public int indexOf (Image image) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
377 int count = OS.ImageList_GetImageCount (handle);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
378 for (int i=0; i<count; i++) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
379 if (images [i] !is null) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
380 if (images [i].isDisposed ()) images [i] = null;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
381 if (images [i] !is null && images [i]==/*eq*/image) return i;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
382 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
383 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
384 return -1;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
385 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
386
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
387 public void put (int index, Image image) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
388 int count = OS.ImageList_GetImageCount (handle);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
389 if (!(0 <= index && index < count)) return;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
390 if (image !is null) set(index, image, count);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
391 images [index] = image;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
392 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
393
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
394 public void remove (int index) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
395 int count = OS.ImageList_GetImageCount (handle);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
396 if (!(0 <= index && index < count)) return;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
397 OS.ImageList_Remove (handle, index);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
398 System.arraycopy (images, index + 1, images, index, --count - index);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
399 images [index] = null;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
400 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
401
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
402 public int removeRef() {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
403 return --refCount;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
404 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
405
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
406 void set (int index, Image image, int count) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
407 auto hImage = image.handle;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
408 int cx , cy ;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
409 OS.ImageList_GetIconSize (handle, &cx, &cy);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
410 switch (image.type) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
411 case DWT.BITMAP: {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
412 /*
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
413 * Note that the image size has to match the image list icon size.
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
414 */
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
415 HBITMAP hBitmap, hMask;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
416 ImageData data = image.getImageData ();
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
417 switch (data.getTransparencyType ()) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
418 case DWT.TRANSPARENCY_ALPHA:
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
419 if (OS.COMCTL32_MAJOR >= 6) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
420 hBitmap = copyWithAlpha (hImage, -1, data.alphaData, cx, cy);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
421 } else {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
422 hBitmap = copyBitmap (hImage, cx, cy);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
423 hMask = createMaskFromAlpha (data, cx, cy);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
424 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
425 break;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
426 case DWT.TRANSPARENCY_PIXEL:
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
427 int background = -1;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
428 Color color = image.getBackground ();
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
429 if (color !is null) background = color.handle;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
430 hBitmap = copyBitmap (hImage, cx, cy);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
431 hMask = createMask (hImage, cx, cy, background, data.transparentPixel);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
432 break;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
433 case DWT.TRANSPARENCY_NONE:
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
434 default:
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
435 hBitmap = copyBitmap (hImage, cx, cy);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
436 if (index !is count) hMask = createMask (hImage, cx, cy, -1, -1);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
437 break;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
438 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
439 if (index is count) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
440 OS.ImageList_Add (handle, hBitmap, hMask);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
441 } else {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
442 /* Note that the mask must always be replaced even for TRANSPARENCY_NONE */
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
443 OS.ImageList_Replace (handle, index, hBitmap, hMask);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
444 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
445 if (hMask !is null) OS.DeleteObject (hMask);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
446 if (hBitmap !is hImage) OS.DeleteObject (hBitmap);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
447 break;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
448 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
449 case DWT.ICON: {
117
25f88bf5a6df Only one file was damaged
Frank Benoit <benoit@tionex.de>
parents: 115
diff changeset
450 static if (OS.IsWinCE) {
33
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
451 OS.ImageList_ReplaceIcon (handle, index is count ? -1 : index, hImage);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
452 } else {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
453 auto hIcon = copyIcon (hImage, cx, cy);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
454 OS.ImageList_ReplaceIcon (handle, index is count ? -1 : index, hIcon);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
455 OS.DestroyIcon (hIcon);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
456 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
457 break;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
458 }
162
619faee45ef6 add missing default cases
Thomas Graber <d4rkdragon@gmail.com>
parents: 117
diff changeset
459 default:
33
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
460 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
461 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
462
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
463 public int size () {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
464 int result = 0;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
465 int count = OS.ImageList_GetImageCount (handle);
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
466 for (int i=0; i<count; i++) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
467 if (images [i] !is null) {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
468 if (images [i].isDisposed ()) images [i] = null;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
469 if (images [i] !is null) result++;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
470 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
471 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
472 return result;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
473 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
474
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
475 }