@@ -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,13 +1944,14 @@ 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 ));
1954+ int closestZoom = getClosestAvailableZoom (zoom );
19491955 return DPIUtil .scaleImageData (device , getImageMetadata (new ZoomContext (closestZoom )).getImageData (), zoom , closestZoom );
19501956 }
19511957
@@ -2004,12 +2010,18 @@ AbstractImageProviderWrapper createCopy(Image image) {
20042010 public Collection <Integer > getPreservedZoomLevels () {
20052011 return Collections .singleton (zoomForHandle );
20062012 }
2013+
2014+ @ Override
2015+ protected ElementAtZoom <ImageData > loadImageData (int zoom ) {
2016+ int closestZoom = getClosestAvailableZoom (zoom );
2017+ ImageData imageData = getImageMetadata (new ZoomContext (closestZoom )).getImageData ();
2018+ return new ElementAtZoom <>(imageData , closestZoom );
2019+ }
20072020}
20082021
20092022private abstract class ImageFromImageDataProviderWrapper extends AbstractImageProviderWrapper {
20102023 private final Map <Integer , ImageData > cachedImageData = new HashMap <>();
20112024
2012- protected abstract ElementAtZoom <ImageData > loadImageData (int zoom );
20132025
20142026 void initImage () {
20152027 // As the init call configured some Image attributes (e.g. type)
@@ -2194,6 +2206,12 @@ ImageData newImageData(ZoomContext zoomContext) {
21942206 return getScaledImageData (targetZoom );
21952207 }
21962208
2209+ @ Override
2210+ protected ElementAtZoom <ImageData > loadImageData (int zoom ) {
2211+ int closestZoom = getClosestAvailableZoom (zoom );
2212+ return new ElementAtZoom <>(getImageMetadata (new ZoomContext (closestZoom )).getImageData (), closestZoom );
2213+ }
2214+
21972215 @ Override
21982216 protected ImageHandle newImageHandle (ZoomContext zoomContext ) {
21992217 int targetZoom = zoomContext .targetZoom ();
@@ -2326,7 +2344,6 @@ private ImageHandle initializeHandleFromSource(int zoom) {
23262344 return init (imageData , zoom );
23272345 }
23282346
2329- protected abstract ElementAtZoom <ImageData > loadImageData (int zoom );
23302347
23312348 @ Override
23322349 protected Rectangle getBounds (int zoom ) {
@@ -2624,6 +2641,11 @@ ImageData newImageData(ZoomContext zoomContext) {
26242641 return getImageMetadata (zoomContext ).getImageData ();
26252642 }
26262643
2644+ @ Override
2645+ protected ElementAtZoom <ImageData > loadImageData (int zoom ) {
2646+ return new ElementAtZoom <>(newImageData (new ZoomContext (zoom )), zoom );
2647+ }
2648+
26272649 @ Override
26282650 protected ImageHandle newImageHandle (ZoomContext zoomContext ) {
26292651 currentZoom = zoomContext ;
0 commit comments