我在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,我想在托盘中设置。我可以绘制一个数字,但图标的背景变成了“跳舞” - 。
我猜这个问题出现在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
建议我,请...
答案 0 :(得分:0)
我用解决方法解决了我的问题。问题在于创建像素图 - 它是“肮脏的”它的“天生”。解决方案是不使用pixmap,而是通过函数创建cairo上下文:http://www.gtkforums.com/viewtopic.php?t=5204