diff options
Diffstat (limited to 'src/sp-cursor.cpp')
| -rw-r--r-- | src/sp-cursor.cpp | 94 |
1 files changed, 7 insertions, 87 deletions
diff --git a/src/sp-cursor.cpp b/src/sp-cursor.cpp index 2069bddbd..ea73da00c 100644 --- a/src/sp-cursor.cpp +++ b/src/sp-cursor.cpp @@ -23,80 +23,6 @@ #include "color.h" #include "sp-cursor.h" -void sp_cursor_bitmap_and_mask_from_xpm(GdkBitmap **bitmap, GdkBitmap **mask, gchar const *const *xpm) -{ - int height = 0; - int width = 0; - int colors = 0; - int pix = 0; - std::stringstream ss; - ss << xpm[0]; - ss >> height; - ss >> width; - ss >> colors; - ss >> pix; - - g_return_if_fail(height == 32); - g_return_if_fail(width == 32); - g_return_if_fail(colors >= 3); - - int transparent_color = ' '; - std::string black_colors; - - char pixmap_buffer[(32 * 32) / 8] = {0}; - char mask_buffer[(32 * 32) / 8] = {0}; - - for (int i = 0; i < colors; i++) { - - char const *p = xpm[1 + i]; - char const ccode = *p; - - p++; - while (isspace(*p)) { - p++; - } - p++; - while (isspace(*p)) { - p++; - } - - if (strcmp(p, "None") == 0) { - transparent_color = ccode; - } - - if (strcmp(p, "Stroke") == 0) { - black_colors.push_back(ccode); - } - - if (strcmp(p, "#000000") == 0) { - black_colors.push_back(ccode); - } - } - - for (int y = 0; y < 32; y++) { - for (int x = 0; x < 32; ) { - char value = 0; - char maskv = 0; - - for (int pix = 0; pix < 8; pix++, x++){ - if (xpm[1 + colors + y][x] != transparent_color) { - maskv |= 1 << pix; - - if (black_colors.find(xpm[1 + colors + y][x]) != std::string::npos) { - value |= 1 << pix; - } - } - } - - pixmap_buffer[(y * 4 + x / 8) - 1] = value; - mask_buffer[(y * 4 + x / 8) - 1] = maskv; - } - } - - *bitmap = gdk_bitmap_create_from_data(NULL, pixmap_buffer, 32, 32); - *mask = gdk_bitmap_create_from_data(NULL, mask_buffer, 32, 32); -} - static void free_cursor_data(guchar *pixels, gpointer /*data*/) { delete [] reinterpret_cast<guint32*>(pixels); } @@ -187,19 +113,13 @@ GdkPixbuf *sp_cursor_pixbuf_from_xpm(gchar const *const *xpm, GdkColor const& bl GdkCursor *sp_cursor_new_from_xpm(gchar const *const *xpm, gint hot_x, gint hot_y) { GdkCursor *cursor = 0; - GdkColor const fg = { 0, 0, 0, 0 }; - GdkColor const bg = { 0, 65535, 65535, 65535 }; - - GdkBitmap *bitmap = 0; - GdkBitmap *mask = 0; - - sp_cursor_bitmap_and_mask_from_xpm(&bitmap, &mask, xpm); - if ( bitmap && mask ) { - cursor = gdk_cursor_new_from_pixmap(bitmap, mask, - &fg, &bg, - hot_x, hot_y); - g_object_unref(bitmap); - g_object_unref(mask); + GdkPixbuf *pixbuf = gdk_pixbuf_new_from_xpm_data((const gchar **)xpm); + + if (pixbuf) { + cursor = gdk_cursor_new_from_pixbuf(gdk_display_get_default(), + pixbuf, hot_x, hot_y); + + g_object_unref(pixbuf); } return cursor; |
