| 
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