Я использую gtk + -2.0 в C. и мне нужно написать цифру на иконке в трее.я делаю это так:
static GdkPixbuf * transform_pixbuf(GdkPixbuf *pixbuf) {
cairo_t *cr;
int width = gdk_pixbuf_get_width(pixbuf);
int height = gdk_pixbuf_get_height(pixbuf);
GdkPixmap *pixmap = gdk_pixmap_new(NULL, width, height, 24);
cr = gdk_cairo_create(pixmap);
gdk_cairo_set_source_pixbuf(cr, pixbuf, 0, 0);
cairo_paint(cr);
cairo_select_font_face (cr, "serif", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);
cairo_set_font_size (cr, 15.0);
cairo_set_source_rgb (cr, 1.0, 0, 0);
cairo_move_to (cr, 10, 20);
cairo_show_text (cr, "8");
cairo_destroy(cr);
GdkPixbuf *pixbuf_new = gdk_pixbuf_get_from_drawable(NULL, pixmap, NULL,
0, 0, 0, 0, width, height);
return pixbuf_new;
}
, где GdkPixbuf *pixbuf
- это GdkPixbuf, который я хочу установить в трей.я могу нарисовать цифру, но фон иконы стал «танцующим» - .
Я думаю, проблема в аргументе gdk_pixmap_new
depth
, потому что значок имеет 32-битный формат, но 32
не является допустимым аргументом для этой функции.в этом случае у меня появляется следующее предупреждение и в трее нет значка:
Gdk-WARNING **: при использовании рендеринга в Каире для аргумента drawable требуется указанная цветовая карта.У всех окон есть цветовая карта, однако у растровых изображений есть цветовая карта по умолчанию, только если они были созданы с ненулевым аргументом окна.В противном случае для них должна быть установлена цветовая карта с помощью gdk_drawable_set_colormap
Gdk-WARNING **: /build/buildd/gtk+2.0-2.24.4/gdk/gdkpixbuf-drawable.c:1249: исходный чертеж не имеет цветовой карты;либо передайте цветовую карту, либо установите цветовую карту для рисования с помощью gdk_drawable_set_colormap ()
Предложите мне, пожалуйста ...