GtkStatusIcon проблема с рисованием - PullRequest
0 голосов
/ 29 сентября 2011

Я использую 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, который я хочу установить в трей.я могу нарисовать цифру, но фон иконы стал «танцующим» - enter image description here.

Я думаю, проблема в аргументе 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 ()

Предложите мне, пожалуйста ...

1 Ответ

0 голосов
/ 30 сентября 2011

Я решил мою проблему с обходным путем. проблема заключалась в создании растрового изображения - оно было «грязным» из-за его «рождения». решение состоит в том, чтобы не использовать растровое изображение, а создать каирский контекст с помощью функций: http://www.gtkforums.com/viewtopic.php?t=5204

...