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_newdepth 参数中,因为图标具有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 绘图问题的主要内容,如果未能解决你的问题,请参考以下文章

R绘图保存 - 机会默认建议的绘图名称

更新 Dash 中多个绘图的绘图

重新启动实时绘图时,pyqtgraph实时绘图中断

ACEDrawingView 的绘图问题

pyQtgraph 绘图延迟串行绘图

使用内部绘图旋转 UIView 的问题