2011-09-29 95 views
0

我在C中使用gtk + -2.0,我必須在我的托盤圖標上寫上一個數字。我做這樣的方式:GtkStatusIcon繪圖問題

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_newdepth的說法,因爲圖標有32位格式,但32是無效的這個函數的參數。在這種情況下,我有跟隨着警告,並在托盤沒有圖標:

GDK-WARNING **:使用開羅渲染要求繪製參數 已指定顏色表。所有窗口都有一個色圖, 但是,如果pixlps的 是使用非NULL窗口參數創建的,則其默認情況下只會使用色彩圖。否則 一個顏色表,必須對它們進行設置與gdk_drawable_set_colormap

GDK-WARNING **:/build/buildd/gtk+2.0-2.24.4/gdk/gdkpixbuf-drawable.c:1249:源繪製有沒有顏色表;無論是傳遞一個顏色表,或者用gdk_drawable_set_colormap()

給我建議,請將顏色表上繪製...

回答

0

我已經解決了我的解決辦法的問題。問題在於創建像素圖 - 它從「天生的」開始是「髒的」。解決方案是不使用pixmap,但通過函數創建cairo上下文:http://www.gtkforums.com/viewtopic.php?t=5204