diff options
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(); + } +} |