X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9f556d1dd6a06524c0d5419862836b9f0e9e6e1d..65fd2fc2616552e4204223b7c2b69d9bc87c1f2d:/src/gtk/cursor.cpp?ds=sidebyside diff --git a/src/gtk/cursor.cpp b/src/gtk/cursor.cpp index 56d699feb7..a323e44d69 100644 --- a/src/gtk/cursor.cpp +++ b/src/gtk/cursor.cpp @@ -19,7 +19,7 @@ #include "wx/colour.h" #endif // WX_PRECOMP -#include "wx/gtk/private.h" //for idle stuff +#include //----------------------------------------------------------------------------- // wxCursor @@ -178,54 +178,57 @@ wxCursor::wxCursor( const wxImage & image ) bool bHasMask = image.HasMask(); int imagebitcount = (w*h)/8; -#if GTK_CHECK_VERSION(2,2,0) - if ( gdk_display_supports_cursor_color(gdk_display_get_default()) ) +#ifdef __WXGTK24__ + if (!gtk_check_version(2,4,0)) { - unsigned char rMask = 0, - gMask = 0, - bMask = 0; - if (bHasMask) + if ( gdk_display_supports_cursor_color(gdk_display_get_default()) ) { - rMask = image.GetMaskRed(); - gMask = image.GetMaskGreen(); - bMask = image.GetMaskBlue(); - } + unsigned char rMask = 0, + gMask = 0, + bMask = 0; + if (bHasMask) + { + rMask = image.GetMaskRed(); + gMask = image.GetMaskGreen(); + bMask = image.GetMaskBlue(); + } - GdkPixbuf *pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, true, 8, w, h); - unsigned char *alpha = image.HasAlpha() ? image.GetAlpha() : NULL; - unsigned char *out = gdk_pixbuf_get_pixels(pixbuf); - int rowpad = gdk_pixbuf_get_rowstride(pixbuf) - 4 * w; - for ( int y = 0; y < h; y++, out += rowpad ) - { - for ( int x = 0; x < w; x++, out += 4, rgbBits += 3 ) + GdkPixbuf *pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, true, 8, w, h); + unsigned char *alpha = image.HasAlpha() ? image.GetAlpha() : NULL; + unsigned char *out = gdk_pixbuf_get_pixels(pixbuf); + int rowpad = gdk_pixbuf_get_rowstride(pixbuf) - 4 * w; + for ( int y = 0; y < h; y++, out += rowpad ) { - out[0] = rgbBits[0]; - out[1] = rgbBits[1]; - out[2] = rgbBits[2]; - if (bHasMask && - out[0] == rMask && out[1] == gMask && out[2] == bMask) - out[3] = 0; - else - out[3] = alpha ? *alpha : 255; - if ( alpha ) - ++alpha; + for ( int x = 0; x < w; x++, out += 4, rgbBits += 3 ) + { + out[0] = rgbBits[0]; + out[1] = rgbBits[1]; + out[2] = rgbBits[2]; + if (bHasMask && + out[0] == rMask && out[1] == gMask && out[2] == bMask) + out[3] = 0; + else + out[3] = alpha ? *alpha : 255; + if ( alpha ) + ++alpha; + } } - } - int hotSpotX, hotSpotY; - GetHotSpot(image, hotSpotX, hotSpotY); + int hotSpotX, hotSpotY; + GetHotSpot(image, hotSpotX, hotSpotY); - m_refData = new wxCursorRefData; - M_CURSORDATA->m_cursor = gdk_cursor_new_from_pixbuf + m_refData = new wxCursorRefData; + M_CURSORDATA->m_cursor = gdk_cursor_new_from_pixbuf ( gdk_display_get_default(), pixbuf, hotSpotX, hotSpotY ); - g_object_unref (pixbuf); - return; + g_object_unref (pixbuf); + return; + } } -#endif // GTK+ 2.2+ +#endif // GTK+ 2.4+ unsigned char * bits = new unsigned char [imagebitcount]; unsigned char * maskBits = new unsigned char [imagebitcount]; @@ -376,7 +379,9 @@ GdkCursor *wxCursor::GetCursor() const // busy cursor routines //----------------------------------------------------------------------------- -extern wxCursor g_globalCursor; +/* Current cursor, in order to hang on to + * cursor handle when setting the cursor globally */ +wxCursor g_globalCursor; static wxCursor gs_savedCursor; static int gs_busyCount = 0; @@ -428,8 +433,6 @@ bool wxIsBusy() void wxSetCursor( const wxCursor& cursor ) { - if (g_isIdle) - wxapp_install_idle_handler(); - g_globalCursor = cursor; + wxTheApp->WakeUpIdle(); }