Skip to content

Commit e07aecb

Browse files
committed
Adding loadImageData(zoom) to the AbstractImageProvider Wrapper
This refactoring is required to load unscaled ImageData for all wrappers The loadImageData for the added functions would have similar logic to newImageData() except the imageData returned would not be scaled but would be an ElementAtZoom
1 parent ce98326 commit e07aecb

File tree

1 file changed

+40
-7
lines changed
  • bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics

1 file changed

+40
-7
lines changed

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

Lines changed: 40 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1887,6 +1887,12 @@ <T> T applyUsingAnyHandle(Function<ImageHandle, T> function) {
18871887
return function.apply(zoomLevelToImageHandle.values().iterator().next());
18881888
}
18891889

1890+
private int getClosestAvailableZoom(int zoom) {
1891+
TreeSet<Integer> availableZooms = new TreeSet<>(zoomLevelToImageHandle.keySet());
1892+
int closestZoom = Optional.ofNullable(availableZooms.higher(zoom)).orElse(availableZooms.lower(zoom));
1893+
return closestZoom;
1894+
}
1895+
18901896
/**
18911897
* Invokes platform specific functionality to allocate a new image.
18921898
* <p>
@@ -1939,13 +1945,14 @@ public Collection<Integer> getPreservedZoomLevels() {
19391945
return Collections.emptySet();
19401946
}
19411947

1948+
protected abstract ElementAtZoom<ImageData> loadImageData(int zoom);
1949+
19421950
abstract ImageData newImageData(ZoomContext zoomContext);
19431951

19441952
abstract AbstractImageProviderWrapper createCopy(Image image);
19451953

19461954
ImageData getScaledImageData (int zoom) {
1947-
TreeSet<Integer> availableZooms = new TreeSet<>(zoomLevelToImageHandle.keySet());
1948-
int closestZoom = Optional.ofNullable(availableZooms.higher(zoom)).orElse(availableZooms.lower(zoom));
1955+
int closestZoom = getClosestAvailableZoom(zoom);
19491956
return DPIUtil.scaleImageData(device, getImageMetadata(new ZoomContext(closestZoom)).getImageData(), zoom, closestZoom);
19501957
}
19511958

@@ -2004,12 +2011,18 @@ AbstractImageProviderWrapper createCopy(Image image) {
20042011
public Collection<Integer> getPreservedZoomLevels() {
20052012
return Collections.singleton(zoomForHandle);
20062013
}
2014+
2015+
@Override
2016+
protected ElementAtZoom<ImageData> loadImageData(int zoom) {
2017+
int closestZoom = getClosestAvailableZoom(zoom);
2018+
ImageData imageData = getImageMetadata(new ZoomContext(closestZoom)).getImageData();
2019+
return new ElementAtZoom<>(imageData, closestZoom);
2020+
}
20072021
}
20082022

20092023
private abstract class ImageFromImageDataProviderWrapper extends AbstractImageProviderWrapper {
20102024
private final Map<Integer, ImageData> cachedImageData = new HashMap<>();
20112025

2012-
protected abstract ElementAtZoom<ImageData> loadImageData(int zoom);
20132026

20142027
void initImage() {
20152028
// As the init call configured some Image attributes (e.g. type)
@@ -2180,8 +2193,7 @@ protected Rectangle getBounds(int zoom) {
21802193
return Win32DPIUtils.pointToPixel(rectangle, zoom);
21812194
}
21822195

2183-
@Override
2184-
ImageData newImageData(ZoomContext zoomContext) {
2196+
private ImageData resolveBaseOrNewImage(ZoomContext zoomContext) {
21852197
int targetZoom = zoomContext.targetZoom();
21862198
if (zoomLevelToImageHandle.isEmpty()) {
21872199
return createBaseHandle(targetZoom).getImageData();
@@ -2191,7 +2203,24 @@ ImageData newImageData(ZoomContext zoomContext) {
21912203
if (memGC != null) {
21922204
return newImageHandle(zoomContext).getImageData();
21932205
}
2194-
return getScaledImageData(targetZoom);
2206+
2207+
return null;
2208+
}
2209+
2210+
@Override
2211+
ImageData newImageData(ZoomContext zoomContext) {
2212+
ImageData data = resolveBaseOrNewImage(zoomContext);
2213+
return data != null ? data : getScaledImageData(zoomContext.targetZoom);
2214+
}
2215+
2216+
@Override
2217+
protected ElementAtZoom<ImageData> loadImageData(int zoom) {
2218+
int closestZoom = getClosestAvailableZoom(zoom);
2219+
ImageData data = resolveBaseOrNewImage(new ZoomContext(zoom));
2220+
if (data != null) {
2221+
return new ElementAtZoom<>(data, zoom);
2222+
}
2223+
return new ElementAtZoom<>(getImageMetadata(new ZoomContext(closestZoom)).getImageData(), closestZoom);
21952224
}
21962225

21972226
@Override
@@ -2326,7 +2355,6 @@ private ImageHandle initializeHandleFromSource(int zoom) {
23262355
return init(imageData, zoom);
23272356
}
23282357

2329-
protected abstract ElementAtZoom<ImageData> loadImageData(int zoom);
23302358

23312359
@Override
23322360
protected Rectangle getBounds(int zoom) {
@@ -2624,6 +2652,11 @@ ImageData newImageData(ZoomContext zoomContext) {
26242652
return getImageMetadata(zoomContext).getImageData();
26252653
}
26262654

2655+
@Override
2656+
protected ElementAtZoom<ImageData> loadImageData(int zoom) {
2657+
return new ElementAtZoom<>(newImageData(new ZoomContext(zoom)), zoom);
2658+
}
2659+
26272660
@Override
26282661
protected ImageHandle newImageHandle(ZoomContext zoomContext) {
26292662
currentZoom = zoomContext;

0 commit comments

Comments
 (0)