Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXi Yan2019-01-10 09:12:31 -0500
committerXi Yan2019-01-11 14:25:06 -0500
commit8173c6e4ba7f8e82fc0cd60fc0aae6d053aa9134 (patch)
tree56c684186316770e79e00cc37cefa51710798976
parent829767ee26578b360cb8720b8ce70efb9cbe57af (diff)
downloadeclipse.platform.swt-8173c6e4ba7f8e82fc0cd60fc0aae6d053aa9134.tar.gz
eclipse.platform.swt-8173c6e4ba7f8e82fc0cd60fc0aae6d053aa9134.tar.xz
eclipse.platform.swt-8173c6e4ba7f8e82fc0cd60fc0aae6d053aa9134.zip
Bug 533728 - [GTK] Custom cursor without transparency not shown
If ImageData does not have alpha, set alpha to -1 for opaque image. Change-Id: Ib025790fbd6141895b43dd9c6170f5e9594b8c11 Signed-off-by: Xi Yan <xixiyan@redhat.com>
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Cursor.java4
-rw-r--r--tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug533728_CustomCursor.java56
2 files changed, 60 insertions, 0 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Cursor.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Cursor.java
index 353cc3481b..4e60d64a6f 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Cursor.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Cursor.java
@@ -368,6 +368,10 @@ public Cursor(Device device, ImageData source, int hotspotX, int hotspotY) {
for (int i=3; i<buffer.length; i+=4) {
buffer[i] = alphaData[i/4];
}
+ } else {
+ for (int i=3; i<buffer.length; i+=4) {
+ buffer[i] = -1;
+ }
}
}
C.memmove(data, buffer, stride * height);
diff --git a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug533728_CustomCursor.java b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug533728_CustomCursor.java
new file mode 100644
index 0000000000..fc4c93c043
--- /dev/null
+++ b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug533728_CustomCursor.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2018 Red Hat and others. All rights reserved.
+ * The contents of this file are made available under the terms
+ * of the GNU Lesser General Public License (LGPL) Version 2.1 that
+ * accompanies this distribution (lgpl-v21.txt). The LGPL is also
+ * available at http://www.gnu.org/licenses/lgpl.html. If the version
+ * of the LGPL at http://www.gnu.org is different to the version of
+ * the LGPL accompanying this distribution and there is any conflict
+ * between the two license versions, the terms of the LGPL accompanying
+ * this distribution shall govern.
+ *
+ * Contributors:
+ * Red Hat - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.tests.gtk.snippets;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Cursor;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.ImageData;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Canvas;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+
+public class Bug533728_CustomCursor {
+ public static void main(String[] args) {
+ int CURSOR_SIZE = 32;
+
+ Display display = new Display();
+ Shell shell = new Shell(display);
+ shell.setLayout(new FillLayout());
+ Canvas canvas = new Canvas(shell, SWT.NONE);
+ Image image = new Image(shell.getDisplay(), CURSOR_SIZE, CURSOR_SIZE);
+
+ GC gc = new GC(image);
+ gc.setLineWidth(2);
+ gc.drawOval(1, 1, CURSOR_SIZE - 2, CURSOR_SIZE - 2);
+ gc.dispose();
+
+ ImageData imagedata = image.getImageData();
+ Cursor cursor = new Cursor(shell.getDisplay(), imagedata, 0, 0);
+ canvas.setCursor(cursor);
+ image.dispose();
+
+ shell.pack();
+ shell.open();
+ while (!shell.isDisposed()) {
+ if (!display.readAndDispatch()) {
+ display.sleep();
+ }
+ }
+ display.dispose();
+ }
+}

Back to the top