@@ -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,16 @@ public static Image win32_new(Device device, int type, long handle, int nativeZo
20822088}
20832089
20842090private abstract class AbstractImageProviderWrapper {
2091+ private boolean isDestroyed ;
20852092 abstract Object getProvider ();
20862093 protected abstract Rectangle getBounds (int zoom );
20872094 abstract ImageData getImageData (int zoom );
20882095 abstract ImageHandle getImageMetadata (int zoom );
20892096 abstract AbstractImageProviderWrapper createCopy (Image image );
2090- abstract boolean isDisposed ();
2097+
2098+ protected boolean isDisposed () {
2099+ return isDestroyed ;
2100+ }
20912101
20922102 protected void checkProvider (Object provider , Class <?> expectedClass ) {
20932103 if (provider == null ) SWT .error (SWT .ERROR_NULL_ARGUMENT );
@@ -2106,6 +2116,7 @@ public boolean equals(Object otherProvider) {
21062116 }
21072117
21082118 protected void destroy () {
2119+ this .isDestroyed = true ;
21092120 }
21102121}
21112122
@@ -2123,9 +2134,9 @@ private class ImageFileNameProviderWrapper extends AbstractImageProviderWrapper
21232134
21242135 @ Override
21252136 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 ) ;
2137+ ImageData imageData = getImageData ( zoom );
2138+ Rectangle rectangle = new Rectangle (0 , 0 , imageData .width , imageData .height );
2139+ return rectangle ;
21292140 }
21302141
21312142 @ Override
@@ -2154,11 +2165,6 @@ ImageHandle getImageMetadata(int zoom) {
21542165 return zoomLevelToImageHandle .get (zoom );
21552166 }
21562167
2157- @ Override
2158- boolean isDisposed () {
2159- return zoomLevelToImageHandle .isEmpty ();
2160- }
2161-
21622168 @ Override
21632169 Object getProvider () {
21642170 return provider ;
@@ -2189,9 +2195,9 @@ private class ImageDataProviderWrapper extends AbstractImageProviderWrapper {
21892195
21902196 @ Override
21912197 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 ) ;
2198+ ImageData imageData = getImageData ( zoom );
2199+ Rectangle rectangle = new Rectangle (0 , 0 , imageData .width , imageData .height );
2200+ return rectangle ;
21952201 }
21962202
21972203 @ Override
@@ -2209,11 +2215,6 @@ ImageHandle getImageMetadata(int zoom) {
22092215 return zoomLevelToImageHandle .get (zoom );
22102216 }
22112217
2212- @ Override
2213- boolean isDisposed () {
2214- return zoomLevelToImageHandle .isEmpty ();
2215- }
2216-
22172218 @ Override
22182219 Object getProvider () {
22192220 return provider ;
@@ -2229,7 +2230,6 @@ private class ImageGcDrawerWrapper extends AbstractImageProviderWrapper {
22292230 private ImageGcDrawer drawer ;
22302231 private int width ;
22312232 private int height ;
2232- private boolean isDestroyed ;
22332233
22342234 public ImageGcDrawerWrapper (ImageGcDrawer imageGcDrawer , int width , int height ) {
22352235 checkProvider (imageGcDrawer , ImageGcDrawer .class );
@@ -2268,16 +2268,6 @@ ImageHandle getImageMetadata(int zoom) {
22682268 return zoomLevelToImageHandle .get (zoom );
22692269 }
22702270
2271- @ Override
2272- protected void destroy () {
2273- isDestroyed = true ;
2274- }
2275-
2276- @ Override
2277- boolean isDisposed () {
2278- return isDestroyed ;
2279- }
2280-
22812271 @ Override
22822272 Object getProvider () {
22832273 return drawer ;
0 commit comments