Skip to content

Commit cca131e

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 cca131e

File tree

1 file changed

+28
-5
lines changed
  • bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics

1 file changed

+28
-5
lines changed

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

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1887,6 +1887,11 @@ <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+
return Optional.ofNullable(availableZooms.higher(zoom)).orElse(availableZooms.lower(zoom));
1893+
}
1894+
18901895
/**
18911896
* Invokes platform specific functionality to allocate a new image.
18921897
* <p>
@@ -1939,14 +1944,19 @@ public Collection<Integer> getPreservedZoomLevels() {
19391944
return Collections.emptySet();
19401945
}
19411946

1947+
protected abstract ElementAtZoom<ImageData> loadImageData(int zoom);
1948+
19421949
abstract ImageData newImageData(ZoomContext zoomContext);
19431950

19441951
abstract AbstractImageProviderWrapper createCopy(Image image);
19451952

19461953
ImageData getScaledImageData (int zoom) {
1947-
TreeSet<Integer> availableZooms = new TreeSet<>(zoomLevelToImageHandle.keySet());
1948-
int closestZoom = Optional.ofNullable(availableZooms.higher(zoom)).orElse(availableZooms.lower(zoom));
1949-
return DPIUtil.scaleImageData(device, getImageMetadata(new ZoomContext(closestZoom)).getImageData(), zoom, closestZoom);
1954+
return DPIUtil.scaleImageData(device, getClosestAvailableImageData(zoom).element(), zoom, getClosestAvailableImageData(zoom).zoom());
1955+
}
1956+
1957+
ElementAtZoom<ImageData> getClosestAvailableImageData(int zoom) {
1958+
int closestZoom = getClosestAvailableZoom(zoom);
1959+
return new ElementAtZoom<>(getImageMetadata(new ZoomContext(closestZoom)).getImageData(), closestZoom);
19501960
}
19511961

19521962
protected ImageHandle newImageHandle(ZoomContext zoomContext) {
@@ -2004,12 +2014,16 @@ AbstractImageProviderWrapper createCopy(Image image) {
20042014
public Collection<Integer> getPreservedZoomLevels() {
20052015
return Collections.singleton(zoomForHandle);
20062016
}
2017+
2018+
@Override
2019+
protected ElementAtZoom<ImageData> loadImageData(int zoom) {
2020+
return getClosestAvailableImageData(zoom);
2021+
}
20072022
}
20082023

20092024
private abstract class ImageFromImageDataProviderWrapper extends AbstractImageProviderWrapper {
20102025
private final Map<Integer, ImageData> cachedImageData = new HashMap<>();
20112026

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

20142028
void initImage() {
20152029
// As the init call configured some Image attributes (e.g. type)
@@ -2194,6 +2208,11 @@ ImageData newImageData(ZoomContext zoomContext) {
21942208
return getScaledImageData(targetZoom);
21952209
}
21962210

2211+
@Override
2212+
protected ElementAtZoom<ImageData> loadImageData(int zoom) {
2213+
return getClosestAvailableImageData(zoom);
2214+
}
2215+
21972216
@Override
21982217
protected ImageHandle newImageHandle(ZoomContext zoomContext) {
21992218
int targetZoom = zoomContext.targetZoom();
@@ -2326,7 +2345,6 @@ private ImageHandle initializeHandleFromSource(int zoom) {
23262345
return init(imageData, zoom);
23272346
}
23282347

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

23312349
@Override
23322350
protected Rectangle getBounds(int zoom) {
@@ -2624,6 +2642,11 @@ ImageData newImageData(ZoomContext zoomContext) {
26242642
return getImageMetadata(zoomContext).getImageData();
26252643
}
26262644

2645+
@Override
2646+
protected ElementAtZoom<ImageData> loadImageData(int zoom) {
2647+
return new ElementAtZoom<>(newImageData(new ZoomContext(zoom)), zoom);
2648+
}
2649+
26272650
@Override
26282651
protected ImageHandle newImageHandle(ZoomContext zoomContext) {
26292652
currentZoom = zoomContext;

0 commit comments

Comments
 (0)