GtkStatusIcon绘图问题

时间:2011-09-29 14:44:49

标签: c linux ubuntu gtk cairo

我在C中使用gtk + -2.0,我必须在托盘图标上写一个数字。我这样做:

 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的{​​{1}}参数中,因为该图标的格式为32位,但depth不是此函数的有效参数。在这种情况下,我有跟随警告,托盘中没有图标:

  

Gdk-WARNING **:使用Cairo渲染需要drawable参数   有一个指定的色彩映射。所有窗口都有一个色彩图,   但是,pixmaps默认情况下只有colormap   是使用非NULL窗口参数创建的。除此以外   必须使用gdk_drawable_set_colormap

在其上设置色彩映射      

Gdk-WARNING **:/build/buildd/gtk+2.0-2.24.4/gdk/gdkpixbuf-drawable.c:1249:Source drawable没有colormap;传入一个colormap,或者用gdk_drawable_set_colormap()

在drawable上设置colormap

建议我,请...

1 个答案:

答案 0 :(得分:0)

我用解决方法解决了我的问题。问题在于创建像素图 - 它是“肮脏的”它的“天生”。解决方案是不使用pixmap,而是通过函数创建cairo上下文:http://www.gtkforums.com/viewtopic.php?t=5204