From 5826d3e659b447d5f39ce1aee2eb17254c831f30 Mon Sep 17 00:00:00 2001 From: Andreas Koch Date: Wed, 7 May 2025 19:07:12 +0200 Subject: [PATCH] [win32] Fix double buffer paint with ImageGcDrawer This commit fixes a regression introduced with f10721a that did not properly retain the currently drawn zoom level when an ImageGcDrawer is used. That leads to issues with zoom != 100. --- .../win32/org/eclipse/swt/graphics/Image.java | 13 ++++++++++++- 1 file changed, 12 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 28e125c138d..60411808543 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 @@ -1691,7 +1691,7 @@ private ImageHandle init(ImageData i, int zoom) { */ @Override public long internal_new_GC (GCData data) { - return configureGC(data, 100); + return this.imageProvider.configureGCData(data); } private long configureGC(GCData data, int zoom) { @@ -1854,6 +1854,10 @@ private abstract class AbstractImageProviderWrapper { protected abstract Rectangle getBounds(int zoom); + protected long configureGCData(GCData data) { + return configureGC(data, 100); + } + public Collection getPreservedZoomLevels() { return Collections.emptySet(); } @@ -2480,6 +2484,7 @@ private class ImageGcDrawerWrapper extends DynamicImageProviderWrapper { private ImageGcDrawer drawer; private int width; private int height; + private int currentZoom = 100; ImageGcDrawerWrapper(ImageGcDrawer imageGcDrawer, int width, int height) { checkProvider(imageGcDrawer, ImageGcDrawer.class); @@ -2494,6 +2499,11 @@ protected Rectangle getBounds(int zoom) { return DPIUtil.scaleBounds(rectangle, zoom, 100); } + @Override + protected long configureGCData(GCData data) { + return configureGC(data, currentZoom); + } + @Override ImageData newImageData(int zoom) { return getImageMetadata(zoom).getImageData(); @@ -2501,6 +2511,7 @@ ImageData newImageData(int zoom) { @Override protected ImageHandle newImageHandle(int zoom) { + currentZoom = zoom; int gcStyle = drawer.getGcStyle(); Image image; if ((gcStyle & SWT.TRANSPARENT) != 0) {