Skip to content

Commit b9f096c

Browse files
akoch-yattaHeikoKlare
authored andcommitted
[win32] Foward native zoom to draw bitmap in GC
1 parent 97c24b9 commit b9f096c

File tree

3 files changed

+34
-5
lines changed

3 files changed

+34
-5
lines changed

bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/GC.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1253,7 +1253,7 @@ private void drawImage(Image srcImage, int srcX, int srcY, int srcWidth, int src
12531253
}
12541254
return;
12551255
}
1256-
long imageHandle = Image.win32_getHandle(srcImage, imageZoom);
1256+
long imageHandle = srcImage.getHandle(imageZoom, data.nativeZoom);
12571257
switch (srcImage.type) {
12581258
case SWT.BITMAP:
12591259
drawBitmap(srcImage, imageHandle, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight, simple);
@@ -4384,7 +4384,7 @@ private void init(Drawable drawable, GCData data, long hDC) {
43844384
}
43854385
Image image = data.image;
43864386
if (image != null) {
4387-
data.hNullBitmap = OS.SelectObject(hDC, Image.win32_getHandle(image, data.nativeZoom));
4387+
data.hNullBitmap = OS.SelectObject(hDC, image.getHandle(data.imageZoom, data.nativeZoom));
43884388
image.memGC = this;
43894389
}
43904390
int layout = data.layout;

bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/GCData.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ public final class GCData {
4848
public float lineMiterLimit = 10;
4949
public int alpha = 0xFF;
5050
public int nativeZoom;
51+
public int imageZoom;
5152

5253
public Image image;
5354
public PAINTSTRUCT ps;
@@ -67,6 +68,7 @@ void copyTo(GCData originalData) {
6768
originalData.font = font;
6869
originalData.nativeZoom = nativeZoom;
6970
originalData.image = image;
71+
originalData.imageZoom = imageZoom;
7072
originalData.ps = ps;
7173
originalData.layout = layout;
7274
originalData.hwnd = hwnd;

bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -829,10 +829,22 @@ private ImageHandle getImageMetadata(ZoomContext zoomContext) {
829829
* @noreference This method is not intended to be referenced by clients.
830830
*/
831831
public static long win32_getHandle (Image image, int zoom) {
832-
if (image.isDisposed()) {
832+
return image.getHandle(zoom, zoom);
833+
}
834+
835+
long getHandle (int targetZoom, int nativeZoom) {
836+
if (isDisposed()) {
833837
return 0L;
834838
}
835-
return image.getImageMetadata(new ZoomContext(zoom)).handle;
839+
if (targetZoom == nativeZoom || !imageProvider.supportComplexZoom()) {
840+
return getImageMetadata(new ZoomContext(targetZoom)).handle;
841+
}
842+
843+
ZoomContext zoomContext = new ZoomContext(targetZoom, nativeZoom);
844+
if (memGC != null) {
845+
return imageProvider.newImageHandle(zoomContext).handle;
846+
}
847+
return getImageMetadata(zoomContext).handle;
836848
}
837849

838850
/**
@@ -1772,6 +1784,7 @@ private long configureGC(GCData data, ZoomContext zoomContext) {
17721784
}
17731785
data.device = device;
17741786
data.nativeZoom = zoomContext.nativeZoom();
1787+
data.imageZoom = zoomContext.targetZoom();
17751788
data.image = this;
17761789
data.font = SWTFontProvider.getSystemFont(device, zoomContext.nativeZoom());
17771790
}
@@ -1933,6 +1946,10 @@ private abstract class AbstractImageProviderWrapper {
19331946

19341947
protected abstract Rectangle getBounds(int zoom);
19351948

1949+
protected boolean supportComplexZoom() {
1950+
return false;
1951+
}
1952+
19361953
protected long configureGCData(GCData data) {
19371954
return configureGC(data, new ZoomContext(100));
19381955
}
@@ -2158,14 +2175,19 @@ private class PlainImageProviderWrapper extends AbstractImageProviderWrapper {
21582175
type = SWT.BITMAP;
21592176
}
21602177

2178+
@Override
2179+
protected boolean supportComplexZoom() {
2180+
return memGC != null;
2181+
}
2182+
21612183
@Override
21622184
public Collection<Integer> getPreservedZoomLevels() {
21632185
return Collections.singleton(baseZoom);
21642186
}
21652187

21662188
@Override
21672189
protected long configureGCData(GCData data) {
2168-
return configureGC(data, new ZoomContext(DPIUtil.getDeviceZoom()));
2190+
return configureGC(data, new ZoomContext(DPIUtil.getDeviceZoom(), DPIUtil.getNativeDeviceZoom()));
21692191
}
21702192

21712193
@Override
@@ -2597,6 +2619,11 @@ private class ImageGcDrawerWrapper extends DynamicImageProviderWrapper {
25972619
this.height = height;
25982620
}
25992621

2622+
@Override
2623+
protected boolean supportComplexZoom() {
2624+
return true;
2625+
}
2626+
26002627
@Override
26012628
protected Rectangle getBounds(int zoom) {
26022629
Rectangle rectangle = new Rectangle(0, 0, width, height);

0 commit comments

Comments
 (0)