Skip to content

Commit c61a85e

Browse files
Create handles for ImageDataProvider and ImageFilenameProvider on demand
1 parent 8f3fd02 commit c61a85e

File tree

1 file changed

+20
-30
lines changed
  • bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics

1 file changed

+20
-30
lines changed

bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java

Lines changed: 20 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -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

20842090
private 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

Comments
 (0)