@@ -556,7 +556,10 @@ public Image(Device device, ImageFileNameProvider imageFileNameProvider) {
556556 super (device );
557557 this .imageProvider = new ImageFileNameProviderWrapper (imageFileNameProvider );
558558 initialNativeZoom = DPIUtil .getNativeDeviceZoom ();
559- imageProvider .getImageMetadata (getZoom ());
559+ if (imageProvider .getImageData (100 ) == null ) {
560+ SWT .error (SWT .ERROR_INVALID_ARGUMENT , null ,
561+ ": ImageFileNameProvider [" + imageFileNameProvider + "] returns null ImageData at 100% zoom." );
562+ }
560563 init ();
561564 this .device .registerResourceWithZoomSupport (this );
562565}
@@ -594,7 +597,10 @@ public Image(Device device, ImageDataProvider imageDataProvider) {
594597 super (device );
595598 this .imageProvider = new ImageDataProviderWrapper (imageDataProvider );
596599 initialNativeZoom = DPIUtil .getNativeDeviceZoom ();
597- imageProvider .getImageMetadata (getZoom ());
600+ if (imageDataProvider .getImageData (100 ) == null ) {
601+ SWT .error (SWT .ERROR_INVALID_ARGUMENT , null ,
602+ ": ImageDataProvider [" + imageDataProvider + "] returns null ImageData at 100% zoom." );
603+ }
598604 init ();
599605 this .device .registerResourceWithZoomSupport (this );
600606}
@@ -2082,12 +2088,17 @@ public static Image win32_new(Device device, int type, long handle, int nativeZo
20822088}
20832089
20842090private abstract class AbstractImageProviderWrapper {
2091+ private boolean isDestroyed ;
2092+
20852093 abstract Object getProvider ();
20862094 protected abstract Rectangle getBounds (int zoom );
20872095 abstract ImageData getImageData (int zoom );
20882096 abstract ImageHandle getImageMetadata (int zoom );
20892097 abstract AbstractImageProviderWrapper createCopy (Image image );
2090- abstract boolean isDisposed ();
2098+
2099+ protected boolean isDisposed () {
2100+ return isDestroyed ;
2101+ }
20912102
20922103 protected void checkProvider (Object provider , Class <?> expectedClass ) {
20932104 if (provider == null ) SWT .error (SWT .ERROR_NULL_ARGUMENT );
@@ -2106,6 +2117,7 @@ public boolean equals(Object otherProvider) {
21062117 }
21072118
21082119 protected void destroy () {
2120+ this .isDestroyed = true ;
21092121 }
21102122}
21112123
@@ -2123,9 +2135,9 @@ private class ImageFileNameProviderWrapper extends AbstractImageProviderWrapper
21232135
21242136 @ Override
21252137 protected Rectangle getBounds (int zoom ) {
2126- ImageHandle imageHandle = zoomLevelToImageHandle . values (). iterator (). next ( );
2127- Rectangle rectangle = new Rectangle (0 , 0 , imageHandle .width , imageHandle .height );
2128- return DPIUtil . scaleBounds ( rectangle , zoom , imageHandle . zoom ) ;
2138+ ImageData imageData = getImageData ( zoom );
2139+ Rectangle rectangle = new Rectangle (0 , 0 , imageData .width , imageData .height );
2140+ return rectangle ;
21292141 }
21302142
21312143 @ Override
@@ -2154,11 +2166,6 @@ ImageHandle getImageMetadata(int zoom) {
21542166 return zoomLevelToImageHandle .get (zoom );
21552167 }
21562168
2157- @ Override
2158- boolean isDisposed () {
2159- return zoomLevelToImageHandle .isEmpty ();
2160- }
2161-
21622169 @ Override
21632170 Object getProvider () {
21642171 return provider ;
@@ -2189,9 +2196,9 @@ private class ImageDataProviderWrapper extends AbstractImageProviderWrapper {
21892196
21902197 @ Override
21912198 protected Rectangle getBounds (int zoom ) {
2192- ImageHandle imageHandle = zoomLevelToImageHandle . values (). iterator (). next ( );
2193- Rectangle rectangle = new Rectangle (0 , 0 , imageHandle .width , imageHandle .height );
2194- return DPIUtil . scaleBounds ( rectangle , zoom , imageHandle . zoom ) ;
2199+ ImageData imageData = getImageData ( zoom );
2200+ Rectangle rectangle = new Rectangle (0 , 0 , imageData .width , imageData .height );
2201+ return rectangle ;
21952202 }
21962203
21972204 @ Override
@@ -2209,11 +2216,6 @@ ImageHandle getImageMetadata(int zoom) {
22092216 return zoomLevelToImageHandle .get (zoom );
22102217 }
22112218
2212- @ Override
2213- boolean isDisposed () {
2214- return zoomLevelToImageHandle .isEmpty ();
2215- }
2216-
22172219 @ Override
22182220 Object getProvider () {
22192221 return provider ;
@@ -2229,7 +2231,6 @@ private class ImageGcDrawerWrapper extends AbstractImageProviderWrapper {
22292231 private ImageGcDrawer drawer ;
22302232 private int width ;
22312233 private int height ;
2232- private boolean isDestroyed ;
22332234
22342235 public ImageGcDrawerWrapper (ImageGcDrawer imageGcDrawer , int width , int height ) {
22352236 checkProvider (imageGcDrawer , ImageGcDrawer .class );
@@ -2268,16 +2269,6 @@ ImageHandle getImageMetadata(int zoom) {
22682269 return zoomLevelToImageHandle .get (zoom );
22692270 }
22702271
2271- @ Override
2272- protected void destroy () {
2273- isDestroyed = true ;
2274- }
2275-
2276- @ Override
2277- boolean isDisposed () {
2278- return isDestroyed ;
2279- }
2280-
22812272 @ Override
22822273 Object getProvider () {
22832274 return drawer ;
0 commit comments