diff options
author | Niraj Modi | 2016-05-05 09:00:04 +0000 |
---|---|---|
committer | Niraj Modi | 2016-05-06 12:27:47 +0000 |
commit | 6c57834c58239a93119a59d25acd62a9c9045fd7 (patch) | |
tree | 46b1352a8f88cceb70717fdd5d842b4c9595b60a /examples | |
parent | 2547cffba73be1a7a7118bee9abc0b0ba731b56c (diff) | |
download | eclipse.platform.swt-6c57834c58239a93119a59d25acd62a9c9045fd7.tar.gz eclipse.platform.swt-6c57834c58239a93119a59d25acd62a9c9045fd7.tar.xz eclipse.platform.swt-6c57834c58239a93119a59d25acd62a9c9045fd7.zip |
Bug 493047 - [HighDPI] Clipboard Example: Image looses it's qualityI20160506-0830
during ImageTransfer
Change-Id: I6613d843b41675f48adf7c595a77e9784418ce50
Signed-off-by: Niraj Modi <niraj.modi@in.ibm.com>
Diffstat (limited to 'examples')
-rw-r--r-- | examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/clipboard/ClipboardExample.java | 52 |
1 files changed, 49 insertions, 3 deletions
diff --git a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/clipboard/ClipboardExample.java b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/clipboard/ClipboardExample.java index 412080c318..350293ec8c 100644 --- a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/clipboard/ClipboardExample.java +++ b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/clipboard/ClipboardExample.java @@ -25,6 +25,7 @@ import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.ImageData; +import org.eclipse.swt.graphics.ImageDataProvider; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.FillLayout; @@ -55,7 +56,50 @@ public class ClipboardExample { StyledText styledText; Label status; static final int HSIZE = 100, VSIZE = 60; - + +static final class AutoScaleImageDataProvider implements ImageDataProvider { + ImageData imageData; + int currentZoom; + public AutoScaleImageDataProvider (ImageData data) { + this.imageData = data; + this.currentZoom = getDeviceZoom (); + } + + @Override + public ImageData getImageData (int zoom) { + return autoScaleImageData(imageData, zoom, currentZoom); + } + + static ImageData autoScaleImageData (ImageData imageData, int targetZoom, int currentZoom) { + if (!isAutoScaleEnable () || imageData == null || targetZoom == currentZoom) return imageData; + float scaleFactor = ((float) targetZoom)/((float) currentZoom); + return imageData.scaledTo (Math.round (imageData.width * scaleFactor), Math.round (imageData.height * scaleFactor)); + } + + static boolean isAutoScaleEnable () { + String value = System.getProperty ("swt.enable.autoScale"); + if (value != null && "false".equalsIgnoreCase (value)) + return false; + else + return true; + } + + static int getDeviceZoom () { + int zoom = 100; + if (isAutoScaleEnable ()) { + String value = System.getProperty ("org.eclipse.swt.internal.deviceZoom"); + if (value != null) { + try { + zoom = Integer.parseInt(value); + } catch (NumberFormatException e) { + e.printStackTrace(); + } + } + } + return zoom; + } +} + public static void main( String[] args) { Display display = new Display(); new ClipboardExample().open(display); @@ -473,7 +517,8 @@ void createImageTransfer(Composite copyParent, Composite pasteParent){ public void widgetSelected(SelectionEvent e) { if (copyImage[0] != null) { status.setText(""); - clipboard.setContents(new Object[] {copyImage[0].getImageData()}, new Transfer[] {ImageTransfer.getInstance()}); + // Fetch ImageData at current zoom and save in the clip-board. + clipboard.setContents(new Object[] {copyImage[0].getImageDataAtCurrentZoom()}, new Transfer[] {ImageTransfer.getInstance()}); } else { status.setText("No image to copy"); } @@ -539,7 +584,8 @@ void createImageTransfer(Composite copyParent, Composite pasteParent){ pasteImage[0].dispose(); } status.setText(""); - pasteImage[0] = new Image(e.display, data); + // Consume the ImageData at current zoom as-is. + pasteImage[0] = new Image(e.display, new AutoScaleImageDataProvider(data)); pasteVBar.setEnabled(true); pasteHBar.setEnabled(true); pasteOrigin.x = 0; pasteOrigin.y = 0; |