diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Image.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Image.java index ef3648eb67..63c1df9264 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Image.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Image.java @@ -278,16 +278,16 @@ public Image(Device device, Image srcImage, int flag) { if (flag != SWT.IMAGE_DISABLE) transparentPixel = srcImage.transparentPixel; long imageSurface = srcImage.surface; - int width = this.width = srcImage.width; - int height = this.height = srcImage.height; + this.width = srcImage.width; + this.height = srcImage.height; int format = Cairo.cairo_surface_get_content(imageSurface) == Cairo.CAIRO_CONTENT_COLOR ? Cairo.CAIRO_FORMAT_RGB24 : Cairo.CAIRO_FORMAT_ARGB32; boolean hasAlpha = format == Cairo.CAIRO_FORMAT_ARGB32; - surface = Cairo.cairo_image_surface_create(format, width, height); + int dataWidth = DPIUtil.pointToPixel(this.width, DPIUtil.getDeviceZoom()); + int dataHeight= DPIUtil.pointToPixel(this.height, DPIUtil.getDeviceZoom()); + surface = Cairo.cairo_image_surface_create(format, dataWidth, dataHeight); if (surface == 0) SWT.error(SWT.ERROR_NO_HANDLES); - if (DPIUtil.getDeviceZoom() != currentDeviceZoom) { - double scaleFactor = DPIUtil.getDeviceZoom() / 100f; - Cairo.cairo_surface_set_device_scale(surface, scaleFactor, scaleFactor); - } + double scaleFactor = DPIUtil.getDeviceZoom() / 100f; + Cairo.cairo_surface_set_device_scale(surface, scaleFactor, scaleFactor); long cairo = Cairo.cairo_create(surface); if (cairo == 0) SWT.error(SWT.ERROR_NO_HANDLES); Cairo.cairo_set_operator(cairo, Cairo.CAIRO_OPERATOR_SOURCE); @@ -306,9 +306,9 @@ public Image(Device device, Image srcImage, int flag) { switch (flag) { case SWT.IMAGE_DISABLE: { byte[] line = new byte[stride]; - for (int y=0; y