Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNiraj Modi2016-05-05 09:00:04 +0000
committerNiraj Modi2016-05-06 12:27:47 +0000
commit6c57834c58239a93119a59d25acd62a9c9045fd7 (patch)
tree46b1352a8f88cceb70717fdd5d842b4c9595b60a /examples
parent2547cffba73be1a7a7118bee9abc0b0ba731b56c (diff)
downloadeclipse.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.java52
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;

Back to the top