summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2017-06-22 11:47:29 +0100
committerMiklos Vajna <vmiklos@collabora.co.uk>2017-07-04 12:33:51 +0200
commit6d3ede5a17ebc47c7c6871bda39fea4555ba2bf1 (patch)
tree1c771de3b460c04c241692a090be77acc31da9a5
parent55368a0602eb2ab191e969d3b363087dce62994f (diff)
Resolves: tdf#108452 gtk3 xbm cursors invisible on black bg
Change-Id: I5c9b27862da6ac76ae38542f85a51f9aefdd013d Reviewed-on: https://gerrit.libreoffice.org/39112 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
-rw-r--r--vcl/unx/gtk3/gtk3gtkdata.cxx21
1 files changed, 15 insertions, 6 deletions
diff --git a/vcl/unx/gtk3/gtk3gtkdata.cxx b/vcl/unx/gtk3/gtk3gtkdata.cxx
index c5835e69f15a..f59034a50657 100644
--- a/vcl/unx/gtk3/gtk3gtkdata.cxx
+++ b/vcl/unx/gtk3/gtk3gtkdata.cxx
@@ -170,13 +170,22 @@ GdkCursor* GtkSalDisplay::getFromXBM( const unsigned char *pBitmap,
int nWidth, int nHeight,
int nXHot, int nYHot )
{
- int cairo_stride = cairo_format_stride_for_width(CAIRO_FORMAT_A1, nWidth);
+ cairo_surface_t *source = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, nWidth, nHeight);
+ cairo_t *cr = cairo_create(source);
+ cairo_set_source_rgba(cr, 1, 1, 1, 1);
+ cairo_paint(cr);
+
+ const int cairo_stride = cairo_format_stride_for_width(CAIRO_FORMAT_A1, nWidth);
unsigned char *pPaddedXBM = ensurePaddedForCairo(pBitmap, nWidth, nHeight, cairo_stride);
- cairo_surface_t *source = cairo_image_surface_create_for_data(
+ cairo_surface_t *xbm = cairo_image_surface_create_for_data(
pPaddedXBM,
CAIRO_FORMAT_A1, nWidth, nHeight,
cairo_stride);
+ cairo_set_source_rgba(cr, 0, 0, 0, 1);
+ cairo_mask_surface(cr, xbm, 0, 0);
+ cairo_surface_destroy(xbm);
+ cairo_destroy(cr);
unsigned char *pPaddedMaskXBM = ensurePaddedForCairo(pMask, nWidth, nHeight, cairo_stride);
cairo_surface_t *mask = cairo_image_surface_create_for_data(
@@ -184,10 +193,12 @@ GdkCursor* GtkSalDisplay::getFromXBM( const unsigned char *pBitmap,
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_surface_t *s = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, nWidth, nHeight);
+ cr = cairo_create(s);
cairo_set_source_surface(cr, source, 0, 0);
cairo_mask_surface(cr, mask, 0, 0);
+ cairo_surface_destroy(mask);
+ cairo_surface_destroy(source);
cairo_destroy(cr);
#if GTK_CHECK_VERSION(3,10,0)
@@ -199,8 +210,6 @@ GdkCursor* GtkSalDisplay::getFromXBM( const unsigned char *pBitmap,
#endif
cairo_surface_destroy(s);
- cairo_surface_destroy(mask);
- cairo_surface_destroy(source);
if (pPaddedMaskXBM != pMask)
delete [] pPaddedMaskXBM;