From f961dcd8a81c807806531d7d5871100b26840239 Mon Sep 17 00:00:00 2001 From: arunjose696 Date: Wed, 1 Oct 2025 13:40:30 +0200 Subject: [PATCH] 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 --- .../win32/org/eclipse/swt/graphics/Image.java | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java index 200dd55911d..44004b7a6b6 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java @@ -1939,14 +1939,21 @@ public Collection getPreservedZoomLevels() { return Collections.emptySet(); } + protected abstract ElementAtZoom loadImageData(int zoom); + abstract ImageData newImageData(ZoomContext zoomContext); abstract AbstractImageProviderWrapper createCopy(Image image); ImageData getScaledImageData (int zoom) { + ElementAtZoom closestAvailableImageData = getClosestAvailableImageData(zoom); + return DPIUtil.scaleImageData(device, closestAvailableImageData.element(), zoom, closestAvailableImageData.zoom()); + } + + ElementAtZoom getClosestAvailableImageData(int zoom) { TreeSet availableZooms = new TreeSet<>(zoomLevelToImageHandle.keySet()); int closestZoom = Optional.ofNullable(availableZooms.higher(zoom)).orElse(availableZooms.lower(zoom)); - return DPIUtil.scaleImageData(device, getImageMetadata(new ZoomContext(closestZoom)).getImageData(), zoom, closestZoom); + return new ElementAtZoom<>(getImageMetadata(new ZoomContext(closestZoom)).getImageData(), closestZoom); } protected ImageHandle newImageHandle(ZoomContext zoomContext) { @@ -2004,12 +2011,16 @@ AbstractImageProviderWrapper createCopy(Image image) { public Collection getPreservedZoomLevels() { return Collections.singleton(zoomForHandle); } + + @Override + protected ElementAtZoom loadImageData(int zoom) { + return getClosestAvailableImageData(zoom); + } } private abstract class ImageFromImageDataProviderWrapper extends AbstractImageProviderWrapper { private final Map cachedImageData = new HashMap<>(); - protected abstract ElementAtZoom loadImageData(int zoom); void initImage() { // As the init call configured some Image attributes (e.g. type) @@ -2194,6 +2205,11 @@ ImageData newImageData(ZoomContext zoomContext) { return getScaledImageData(targetZoom); } + @Override + protected ElementAtZoom loadImageData(int zoom) { + return getClosestAvailableImageData(zoom); + } + @Override protected ImageHandle newImageHandle(ZoomContext zoomContext) { int targetZoom = zoomContext.targetZoom(); @@ -2326,7 +2342,6 @@ private ImageHandle initializeHandleFromSource(int zoom) { return init(imageData, zoom); } - protected abstract ElementAtZoom loadImageData(int zoom); @Override protected Rectangle getBounds(int zoom) { @@ -2621,7 +2636,12 @@ protected long configureGCData(GCData data) { @Override ImageData newImageData(ZoomContext zoomContext) { - return getImageMetadata(zoomContext).getImageData(); + return loadImageData(zoomContext.targetZoom).element(); + } + + @Override + protected ElementAtZoom loadImageData(int zoom) { + return new ElementAtZoom<>(getImageMetadata(new ZoomContext(zoom)).getImageData(), zoom); } @Override