|  | 
| 20 | 20 | import java.util.stream.*; | 
| 21 | 21 | 
 | 
| 22 | 22 | import org.eclipse.swt.*; | 
|  | 23 | +import org.eclipse.swt.graphics.Image.*; | 
| 23 | 24 | import org.eclipse.swt.internal.*; | 
| 24 | 25 | import org.eclipse.swt.internal.gdip.*; | 
| 25 | 26 | import org.eclipse.swt.internal.win32.*; | 
| @@ -1061,7 +1062,7 @@ void apply() { | 
| 1061 | 1062 | 
 | 
| 1062 | 1063 | 	private void drawImageInPixels(Image image, Point location) { | 
| 1063 | 1064 | 		if (image.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT); | 
| 1064 |  | -		long handle = Image.win32_getHandle(image, getZoom()); | 
|  | 1065 | +		ImageHandle handle = image.getHandle(getZoom(), getZoom()); | 
| 1065 | 1066 | 		drawImage(image, 0, 0, -1, -1, location.x, location.y, -1, -1, true, handle); | 
| 1066 | 1067 | 	} | 
| 1067 | 1068 | } | 
| @@ -1277,12 +1278,12 @@ private class DrawImageToImageOperation extends ImageOperation { | 
| 1277 | 1278 | 
 | 
| 1278 | 1279 | 	@Override | 
| 1279 | 1280 | 	void apply() { | 
| 1280 |  | -		long handle = Image.win32_getHandle(getImage(), getZoom()); | 
|  | 1281 | +		ImageHandle handle = getImage().getHandle(getZoom(), getZoom()); | 
| 1281 | 1282 | 		drawImage(getImage(), source.x, source.y, source.width, source.height, destination.x, destination.y, destination.width, destination.height, simple, handle); | 
| 1282 | 1283 | 	} | 
| 1283 | 1284 | } | 
| 1284 | 1285 | 
 | 
| 1285 |  | -private void drawImage(Image srcImage, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight, boolean simple, long tempImageHandle) { | 
|  | 1286 | +private void drawImage(Image srcImage, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight, boolean simple, ImageHandle tempImageHandle) { | 
| 1286 | 1287 | 	if (data.gdipGraphics != 0) { | 
| 1287 | 1288 | 		//TODO - cache bitmap | 
| 1288 | 1289 | 		long [] gdipImage = srcImage.createGdipImageFromHandle(tempImageHandle); | 
| @@ -1350,7 +1351,7 @@ private void drawImage(Image srcImage, int srcX, int srcY, int srcWidth, int src | 
| 1350 | 1351 | 					simple); | 
| 1351 | 1352 | 			break; | 
| 1352 | 1353 | 		case SWT.ICON: | 
| 1353 |  | -			drawIcon(tempImageHandle, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight, simple); | 
|  | 1354 | +			drawIcon(tempImageHandle.handle, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight, simple); | 
| 1354 | 1355 | 			break; | 
| 1355 | 1356 | 	} | 
| 1356 | 1357 | } | 
| @@ -1489,9 +1490,10 @@ private void drawIcon(long imageHandle, int srcX, int srcY, int srcWidth, int sr | 
| 1489 | 1490 | 	if (failed) SWT.error(SWT.ERROR_INVALID_ARGUMENT); | 
| 1490 | 1491 | } | 
| 1491 | 1492 | 
 | 
| 1492 |  | -private void drawBitmap(Image srcImage, long imageHandle, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight, boolean simple) { | 
|  | 1493 | +private void drawBitmap(Image srcImage, ImageHandle imageHandle, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight, boolean simple) { | 
| 1493 | 1494 | 	BITMAP bm = new BITMAP(); | 
| 1494 |  | -	OS.GetObject(imageHandle, BITMAP.sizeof, bm); | 
|  | 1495 | +	long handle = imageHandle.handle; | 
|  | 1496 | +	OS.GetObject(handle, BITMAP.sizeof, bm); | 
| 1495 | 1497 | 	int imgWidth = bm.bmWidth; | 
| 1496 | 1498 | 	int imgHeight = bm.bmHeight; | 
| 1497 | 1499 | 	if (srcWidth == 0 && srcHeight == 0) { | 
| @@ -1523,14 +1525,14 @@ private void drawBitmap(Image srcImage, long imageHandle, int srcX, int srcY, in | 
| 1523 | 1525 | 	boolean isDib = bm.bmBits != 0; | 
| 1524 | 1526 | 	int depth = bm.bmPlanes * bm.bmBitsPixel; | 
| 1525 | 1527 | 	if (isDib && depth == 32) { | 
| 1526 |  | -		drawBitmapAlpha(imageHandle, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight, simple); | 
|  | 1528 | +		drawBitmapAlpha(handle, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight, simple); | 
| 1527 | 1529 | 	} else if (srcImage.transparentPixel != -1) { | 
| 1528 | 1530 | 		drawBitmapTransparent(srcImage, imageHandle, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight, simple, bm, imgWidth, imgHeight); | 
| 1529 | 1531 | 	} else { | 
| 1530 |  | -		drawBitmapColor(imageHandle, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight, simple); | 
|  | 1532 | +		drawBitmapColor(handle, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight, simple); | 
| 1531 | 1533 | 	} | 
| 1532 | 1534 | 	if (mustRestore) { | 
| 1533 |  | -		long hOldBitmap = OS.SelectObject(memGC.handle, imageHandle); | 
|  | 1535 | +		long hOldBitmap = OS.SelectObject(memGC.handle, handle); | 
| 1534 | 1536 | 		memGC.data.hNullBitmap = hOldBitmap; | 
| 1535 | 1537 | 	} | 
| 1536 | 1538 | } | 
| @@ -1785,11 +1787,11 @@ private void drawBitmapMask(long srcColor, long srcMask, int srcX, int srcY, int | 
| 1785 | 1787 | 	OS.DeleteDC(srcHdc); | 
| 1786 | 1788 | } | 
| 1787 | 1789 | 
 | 
| 1788 |  | -private void drawBitmapTransparent(Image srcImage, long imageHandle, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight, boolean simple, BITMAP bm, int imgWidth, int imgHeight) { | 
|  | 1790 | +private void drawBitmapTransparent(Image srcImage, ImageHandle imageHandle, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight, boolean simple, BITMAP bm, int imgWidth, int imgHeight) { | 
| 1789 | 1791 | 
 | 
| 1790 | 1792 | 	/* Find the RGB values for the transparent pixel. */ | 
| 1791 | 1793 | 	boolean isDib = bm.bmBits != 0; | 
| 1792 |  | -	long hBitmap = imageHandle; | 
|  | 1794 | +	long hBitmap = imageHandle.handle; | 
| 1793 | 1795 | 	long srcHdc = OS.CreateCompatibleDC(handle); | 
| 1794 | 1796 | 	long oldSrcBitmap = OS.SelectObject(srcHdc, hBitmap); | 
| 1795 | 1797 | 	byte[] originalColors = null; | 
| @@ -1834,7 +1836,7 @@ private void drawBitmapTransparent(Image srcImage, long imageHandle, int srcX, i | 
| 1834 | 1836 | 				bmiHeader.biBitCount = bm.bmBitsPixel; | 
| 1835 | 1837 | 				byte[] bmi = new byte[BITMAPINFOHEADER.sizeof + numColors * 4]; | 
| 1836 | 1838 | 				OS.MoveMemory(bmi, bmiHeader, BITMAPINFOHEADER.sizeof); | 
| 1837 |  | -				OS.GetDIBits(srcHdc, imageHandle, 0, 0, null, bmi, OS.DIB_RGB_COLORS); | 
|  | 1839 | +				OS.GetDIBits(srcHdc, imageHandle.handle, 0, 0, null, bmi, OS.DIB_RGB_COLORS); | 
| 1838 | 1840 | 				int offset = BITMAPINFOHEADER.sizeof + 4 * srcImage.transparentPixel; | 
| 1839 | 1841 | 				transRed = bmi[offset + 2] & 0xFF; | 
| 1840 | 1842 | 				transGreen = bmi[offset + 1] & 0xFF; | 
| @@ -1907,7 +1909,7 @@ private void drawBitmapTransparent(Image srcImage, long imageHandle, int srcX, i | 
| 1907 | 1909 | 		OS.DeleteObject(maskBitmap); | 
| 1908 | 1910 | 	} | 
| 1909 | 1911 | 	OS.SelectObject(srcHdc, oldSrcBitmap); | 
| 1910 |  | -	if (hBitmap != imageHandle) OS.DeleteObject(hBitmap); | 
|  | 1912 | +	if (hBitmap != imageHandle.handle) OS.DeleteObject(hBitmap); | 
| 1911 | 1913 | 	OS.DeleteDC(srcHdc); | 
| 1912 | 1914 | } | 
| 1913 | 1915 | 
 | 
| @@ -4483,7 +4485,7 @@ private void init(Drawable drawable, GCData data, long hDC) { | 
| 4483 | 4485 | 	} | 
| 4484 | 4486 | 	Image image = data.image; | 
| 4485 | 4487 | 	if (image != null) { | 
| 4486 |  | -		data.hNullBitmap = OS.SelectObject(hDC, image.getHandle(data.imageZoom, data.nativeZoom)); | 
|  | 4488 | +		data.hNullBitmap = OS.SelectObject(hDC, image.getHandle(data.imageZoom, data.nativeZoom).handle); | 
| 4487 | 4489 | 		image.memGC = this; | 
| 4488 | 4490 | 	} | 
| 4489 | 4491 | 	int layout = data.layout; | 
|  | 
0 commit comments