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) {