From b22775034b12a372ce1ef1cdb9533ac31afd7096 Mon Sep 17 00:00:00 2001 From: fedejeanne Date: Mon, 12 May 2025 15:09:44 +0200 Subject: [PATCH] Preserve handles of images when changing zooms #2139 Preserve the handles of images created out of existing image handles and also from those which are still needed (according to the method AbstractImageProviderWrapper::getPreservedZoomLevels) Fixes https://github.com/eclipse-platform/eclipse.platform.swt/issues/2139 --- .../Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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 272cedb319f..3d1556a205a 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 @@ -1012,7 +1012,7 @@ private void destroyHandles() { @Override void destroyHandlesExcept(Set zoomLevels) { - destroyHandles(zoom -> !zoomLevels.contains(zoom) || !this.imageProvider.getPreservedZoomLevels().contains(zoom)); + destroyHandles(zoom -> !zoomLevels.contains(zoom) && !this.imageProvider.getPreservedZoomLevels().contains(zoom)); } private void destroyHandles(Predicate filter) { @@ -1930,6 +1930,11 @@ ImageData newImageData(int zoom) { AbstractImageProviderWrapper createCopy(Image image) { return image.new ExistingImageHandleProviderWrapper(handle, zoomForHandle); } + + @Override + public Collection getPreservedZoomLevels() { + return Collections.singleton(zoomForHandle); + } } private abstract class ImageFromImageDataProviderWrapper extends AbstractImageProviderWrapper {