Skip to content

Commit 7634852

Browse files
Create handles for ImageDataProvider and ImageFilenameProvider on demand
1 parent 1f67f33 commit 7634852

File tree

1 file changed

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

1 file changed

+21
-30
lines changed

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

Lines changed: 21 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,17 @@ public static Image win32_new(Device device, int type, long handle, int nativeZo
20822088
}
20832089

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

Comments
 (0)