GtkStatusIcon 绘图问题
Posted
技术标签:
【中文标题】GtkStatusIcon 绘图问题【英文标题】:GtkStatusIcon drawing issue 【发布时间】:2011-09-29 14:44:49 【问题描述】:我在 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
的depth
参数中,因为图标具有32 位格式,但32
不是此函数的有效参数。在这种情况下,我有以下警告并且托盘中没有图标:
Gdk-WARNING **: 使用 Cairo 渲染需要 drawable 参数 有一个指定的颜色图。所有窗口都有一个颜色图, 但是,像素图默认情况下只有颜色图,如果它们 是使用非 NULL 窗口参数创建的。除此以外 必须使用 gdk_drawable_set_colormap 在它们上设置颜色图
Gdk-WARNING **: /build/buildd/gtk+2.0-2.24.4/gdk/gdkpixbuf-drawable.c:1249: 源绘图没有颜色图;要么传入颜色图,要么使用 gdk_drawable_set_colormap() 在可绘制对象上设置颜色图
请给我建议...
【问题讨论】:
【参考方案1】:我已经通过解决方法解决了我的问题。问题在于创建像素图 - 它是“脏”的,因为它是“出生”的。解决方案是不使用 pixmap,而是通过函数创建 cairo 上下文:http://www.gtkforums.com/viewtopic.php?t=5204
【讨论】:
以上是关于GtkStatusIcon 绘图问题的主要内容,如果未能解决你的问题,请参考以下文章