@@ -244,57 +244,67 @@ public Image(Device device, Image srcImage, int flag) {
244244 if (srcImage == null ) SWT .error (SWT .ERROR_NULL_ARGUMENT );
245245 if (srcImage .isDisposed ()) SWT .error (SWT .ERROR_INVALID_ARGUMENT );
246246 initialNativeZoom = srcImage .initialNativeZoom ;
247- Rectangle rect = srcImage .getBounds (getZoom ());
248247 this .type = srcImage .type ;
249248 this .imageProvider = srcImage .imageProvider .createCopy (this );
250249 this .styleFlag = srcImage .styleFlag | flag ;
251- long srcImageHandle = win32_getHandle (srcImage , getZoom ());
252250 switch (flag ) {
253251 case SWT .IMAGE_COPY : {
254252 switch (type ) {
255253 case SWT .BITMAP :
256- /* Get the HDC for the device */
257- long hDC = device .internal_new_GC (null );
258-
259- /* Copy the bitmap */
260- long hdcSource = OS .CreateCompatibleDC (hDC );
261- long hdcDest = OS .CreateCompatibleDC (hDC );
262- long hOldSrc = OS .SelectObject (hdcSource , srcImageHandle );
263- BITMAP bm = new BITMAP ();
264- OS .GetObject (srcImageHandle , BITMAP .sizeof , bm );
265- imageMetadata = new ImageHandle (OS .CreateCompatibleBitmap (hdcSource , rect .width , bm .bmBits != 0 ? -rect .height : rect .height ), getZoom ());
266- if (imageMetadata .handle == 0 ) SWT .error (SWT .ERROR_NO_HANDLES );
267- long hOldDest = OS .SelectObject (hdcDest , imageMetadata .handle );
268- OS .BitBlt (hdcDest , 0 , 0 , rect .width , rect .height , hdcSource , 0 , 0 , OS .SRCCOPY );
269- OS .SelectObject (hdcSource , hOldSrc );
270- OS .SelectObject (hdcDest , hOldDest );
271- OS .DeleteDC (hdcSource );
272- OS .DeleteDC (hdcDest );
273-
274- /* Release the HDC for the device */
275- device .internal_dispose_GC (hDC , null );
276-
254+ for (ImageHandle imageHandle : srcImage .zoomLevelToImageHandle .values ()) {
255+ Rectangle rect = imageHandle .getBounds ();
256+ long srcImageHandle = imageHandle .handle ;
257+ /* Get the HDC for the device */
258+ long hDC = device .internal_new_GC (null );
259+
260+ /* Copy the bitmap */
261+ long hdcSource = OS .CreateCompatibleDC (hDC );
262+ long hdcDest = OS .CreateCompatibleDC (hDC );
263+ long hOldSrc = OS .SelectObject (hdcSource , srcImageHandle );
264+ BITMAP bm = new BITMAP ();
265+ OS .GetObject (srcImageHandle , BITMAP .sizeof , bm );
266+ imageMetadata = new ImageHandle (OS .CreateCompatibleBitmap (hdcSource , rect .width , bm .bmBits != 0 ? -rect .height : rect .height ), imageHandle .zoom );
267+ if (imageMetadata .handle == 0 ) SWT .error (SWT .ERROR_NO_HANDLES );
268+ long hOldDest = OS .SelectObject (hdcDest , imageMetadata .handle );
269+ OS .BitBlt (hdcDest , 0 , 0 , rect .width , rect .height , hdcSource , 0 , 0 , OS .SRCCOPY );
270+ OS .SelectObject (hdcSource , hOldSrc );
271+ OS .SelectObject (hdcDest , hOldDest );
272+ OS .DeleteDC (hdcSource );
273+ OS .DeleteDC (hdcDest );
274+
275+ /* Release the HDC for the device */
276+ device .internal_dispose_GC (hDC , null );
277+ }
277278 transparentPixel = srcImage .transparentPixel ;
278279 break ;
279280 case SWT .ICON :
280- imageMetadata = new ImageHandle (OS .CopyImage (srcImageHandle , OS .IMAGE_ICON , rect .width , rect .height , 0 ), getZoom ());
281- if (imageMetadata .handle == 0 ) SWT .error (SWT .ERROR_NO_HANDLES );
281+ for (ImageHandle imageHandle : srcImage .zoomLevelToImageHandle .values ()) {
282+ Rectangle rect = imageHandle .getBounds ();
283+ imageMetadata = new ImageHandle (OS .CopyImage (imageHandle .handle , OS .IMAGE_ICON , rect .width , rect .height , 0 ), imageHandle .zoom );
284+ if (imageMetadata .handle == 0 ) SWT .error (SWT .ERROR_NO_HANDLES );
285+ }
282286 break ;
283287 default :
284288 SWT .error (SWT .ERROR_INVALID_IMAGE );
285289 }
286290 break ;
287291 }
288292 case SWT .IMAGE_DISABLE : {
289- ImageData data = srcImage .getImageData (srcImage .getZoom ());
290- ImageData newData = applyDisableImageData (data , rect .height , rect .width );
291- init (newData , getZoom ());
293+ for (ImageHandle imageHandle : srcImage .zoomLevelToImageHandle .values ()) {
294+ Rectangle rect = imageHandle .getBounds ();
295+ ImageData data = srcImage .getImageData (imageHandle .zoom );
296+ ImageData newData = applyDisableImageData (data , rect .height , rect .width );
297+ init (newData , imageHandle .zoom );
298+ }
292299 break ;
293300 }
294301 case SWT .IMAGE_GRAY : {
295- ImageData data = srcImage .getImageData (srcImage .getZoom ());
296- ImageData newData = applyGrayImageData (data , rect .height , rect .width );
297- init (newData , getZoom ());
302+ for (ImageHandle imageHandle : srcImage .zoomLevelToImageHandle .values ()) {
303+ Rectangle rect = imageHandle .getBounds ();
304+ ImageData data = srcImage .getImageData (imageHandle .zoom );
305+ ImageData newData = applyGrayImageData (data , rect .height , rect .width );
306+ init (newData , imageHandle .zoom );
307+ }
298308 break ;
299309 }
300310 default :
@@ -2558,6 +2568,10 @@ public ImageHandle(long handle, int zoom) {
25582568 setImageMetadataForHandle (this , zoom );
25592569 }
25602570
2571+ public Rectangle getBounds () {
2572+ return new Rectangle (0 , 0 , width , height );
2573+ }
2574+
25612575 private void setBackground (RGB color ) {
25622576 if (transparentPixel == -1 ) return ;
25632577
0 commit comments