summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2016-05-23 15:02:21 +0100
committerCaolán McNamara <caolanm@redhat.com>2016-05-23 15:02:57 +0100
commit81a8d1250319023f6ca272e0b233ef638cae40f7 (patch)
tree59a11aecc152d895e917c00962a1c451eab6e328
parentbfc51d3fa8cd72e70837be1a9d1bc2195dc8ccf4 (diff)
Resolves: tdf#99874 gtk3: all-black xbm cursors
Change-Id: I1feca80dd75f7a09e05ac43293e8645da391a775
-rw-r--r--vcl/unx/gtk3/gtk3gtkdata.cxx18
1 files changed, 11 insertions, 7 deletions
diff --git a/vcl/unx/gtk3/gtk3gtkdata.cxx b/vcl/unx/gtk3/gtk3gtkdata.cxx
index 3480fe103482..3aae62b9e913 100644
--- a/vcl/unx/gtk3/gtk3gtkdata.cxx
+++ b/vcl/unx/gtk3/gtk3gtkdata.cxx
@@ -183,31 +183,35 @@ GdkCursor* GtkSalDisplay::getFromXBM( const unsigned char *pBitmap,
int cairo_stride = cairo_format_stride_for_width(CAIRO_FORMAT_A1, nWidth);
unsigned char *pPaddedXBM = ensurePaddedForCairo(pBitmap, nWidth, nHeight, cairo_stride);
- cairo_surface_t *s = cairo_image_surface_create_for_data(
+ cairo_surface_t *source = cairo_image_surface_create_for_data(
pPaddedXBM,
CAIRO_FORMAT_A1, nWidth, nHeight,
cairo_stride);
- cairo_t *cr = cairo_create(s);
unsigned char *pPaddedMaskXBM = ensurePaddedForCairo(pMask, nWidth, nHeight, cairo_stride);
cairo_surface_t *mask = cairo_image_surface_create_for_data(
pPaddedMaskXBM,
CAIRO_FORMAT_A1, nWidth, nHeight,
cairo_stride);
+
+ cairo_surface_t *s = cairo_surface_create_similar(source, CAIRO_CONTENT_ALPHA, nWidth, nHeight);
+ cairo_t *cr = cairo_create(s);
+ cairo_set_source_surface(cr, source, 0, 0);
cairo_mask_surface(cr, mask, 0, 0);
cairo_destroy(cr);
+
+ GdkCursor *cursor = gdk_cursor_new_from_surface(m_pGdkDisplay, s, nXHot, nYHot);
+
+ cairo_surface_destroy(s);
cairo_surface_destroy(mask);
+ cairo_surface_destroy(source);
+
if (pPaddedMaskXBM != pMask)
delete [] pPaddedMaskXBM;
- GdkPixbuf *pixbuf = gdk_pixbuf_get_from_surface(s, 0, 0, nWidth, nHeight);
- cairo_surface_destroy(s);
if (pPaddedXBM != pBitmap)
delete [] pPaddedXBM;
- GdkCursor *cursor = gdk_cursor_new_from_pixbuf(m_pGdkDisplay, pixbuf, nXHot, nYHot);
- g_object_unref(pixbuf);
-
return cursor;
}