From 0fa6253bdf2bd199f0a2d2a93b5cf3e05f11ed40 Mon Sep 17 00:00:00 2001 From: Paul Cornett Date: Thu, 3 Jan 2008 06:58:11 +0000 Subject: [PATCH] fix for last commit: didn't work if mask was white git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_8_BRANCH@51003 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/gtk/cursor.cpp | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/src/gtk/cursor.cpp b/src/gtk/cursor.cpp index 32420a73b4..c7cc7e6c6f 100644 --- a/src/gtk/cursor.cpp +++ b/src/gtk/cursor.cpp @@ -161,8 +161,29 @@ wxCursor::wxCursor( const wxImage & image ) bool bHasMask = image.HasMask(); wxImage image_copy(image); + unsigned long keyMaskColor = 0; + GdkPixmap* mask; + if (bHasMask) + { + keyMaskColor = wxImageHistogram::MakeKey( + image.GetMaskRed(), image.GetMaskGreen(), image.GetMaskBlue()); + // get mask before image is modified + wxBitmap bitmap(image, 1); + mask = bitmap.GetMask()->GetBitmap(); + g_object_ref(mask); + } + else + { + const int size = ((w + 7) / 8) * h; + char* bits = new char[size]; + memset(bits, 0xff, size); + mask = gdk_bitmap_create_from_data( + wxGetRootWindow()->window, bits, w, h); + delete[] bits; + } + // modify image so wxBitmap can be used to convert to pixmap - image_copy.UnShare(); + image_copy.SetMask(false); int i, j; wxByte* data = image_copy.GetData(); for (j = 0; j < h; j++) @@ -179,28 +200,8 @@ wxCursor::wxCursor( const wxImage & image ) } } } - wxBitmap bitmap(image_copy, 1); - unsigned long keyMaskColor = 0; - GdkPixmap* mask; - if (bHasMask) - { - keyMaskColor = wxImageHistogram::MakeKey( - image.GetMaskRed(), image.GetMaskGreen(), image.GetMaskBlue()); - mask = bitmap.GetMask()->GetBitmap(); - g_object_ref(mask); - } - else - { - const int size = ((w + 7) / 8) * h; - char* bits = new char[size]; - memset(bits, 0xff, size); - mask = gdk_bitmap_create_from_data( - bitmap.GetPixmap(), bits, w, h); - delete[] bits; - } - // find the most frequent color(s) wxImageHistogram histogram; image.ComputeHistogram(histogram);