pixbuf cursor support is for GTK 2.4.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44466 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -178,54 +178,57 @@ wxCursor::wxCursor( const wxImage & image )
|
|||||||
bool bHasMask = image.HasMask();
|
bool bHasMask = image.HasMask();
|
||||||
int imagebitcount = (w*h)/8;
|
int imagebitcount = (w*h)/8;
|
||||||
|
|
||||||
#if GTK_CHECK_VERSION(2,2,0)
|
#ifdef __WXGTK24__
|
||||||
if ( gdk_display_supports_cursor_color(gdk_display_get_default()) )
|
if (!gtk_check_version(2,4,0))
|
||||||
{
|
{
|
||||||
unsigned char rMask = 0,
|
if ( gdk_display_supports_cursor_color(gdk_display_get_default()) )
|
||||||
gMask = 0,
|
|
||||||
bMask = 0;
|
|
||||||
if (bHasMask)
|
|
||||||
{
|
{
|
||||||
rMask = image.GetMaskRed();
|
unsigned char rMask = 0,
|
||||||
gMask = image.GetMaskGreen();
|
gMask = 0,
|
||||||
bMask = image.GetMaskBlue();
|
bMask = 0;
|
||||||
}
|
if (bHasMask)
|
||||||
|
|
||||||
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 )
|
|
||||||
{
|
{
|
||||||
out[0] = rgbBits[0];
|
rMask = image.GetMaskRed();
|
||||||
out[1] = rgbBits[1];
|
gMask = image.GetMaskGreen();
|
||||||
out[2] = rgbBits[2];
|
bMask = image.GetMaskBlue();
|
||||||
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;
|
GdkPixbuf *pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, true, 8, w, h);
|
||||||
GetHotSpot(image, hotSpotX, hotSpotY);
|
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 )
|
||||||
|
{
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
m_refData = new wxCursorRefData;
|
int hotSpotX, hotSpotY;
|
||||||
M_CURSORDATA->m_cursor = gdk_cursor_new_from_pixbuf
|
GetHotSpot(image, hotSpotX, hotSpotY);
|
||||||
|
|
||||||
|
m_refData = new wxCursorRefData;
|
||||||
|
M_CURSORDATA->m_cursor = gdk_cursor_new_from_pixbuf
|
||||||
(
|
(
|
||||||
gdk_display_get_default(),
|
gdk_display_get_default(),
|
||||||
pixbuf,
|
pixbuf,
|
||||||
hotSpotX, hotSpotY
|
hotSpotX, hotSpotY
|
||||||
);
|
);
|
||||||
g_object_unref (pixbuf);
|
g_object_unref (pixbuf);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif // GTK+ 2.2+
|
#endif // GTK+ 2.4+
|
||||||
|
|
||||||
unsigned char * bits = new unsigned char [imagebitcount];
|
unsigned char * bits = new unsigned char [imagebitcount];
|
||||||
unsigned char * maskBits = new unsigned char [imagebitcount];
|
unsigned char * maskBits = new unsigned char [imagebitcount];
|
||||||
|
Reference in New Issue
Block a user