2015-06-11 42 views
5

我想用CSS來設計一個GtkLabel。我想更改標籤的顏色和字體大小。這裏是我的C代碼:如何使用CSS設計GtkLabel?

#include <gtk/gtk.h> 

int main(int argc, char *argv[]) { 
    gtk_init(&argc, &argv); 

    GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 
    GtkWidget *label = gtk_label_new("Label"); 

    GtkCssProvider *cssProvider = gtk_css_provider_new(); 
    gtk_css_provider_load_from_path(cssProvider, "theme.css", NULL); 
    gtk_style_context_add_provider(gtk_widget_get_style_context(window), 
            GTK_STYLE_PROVIDER(cssProvider), 
            GTK_STYLE_PROVIDER_PRIORITY_USER); 

    g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); 
    gtk_container_add(GTK_CONTAINER(window), label); 
    gtk_widget_show_all(window); 

    gtk_main(); 
} 

這是我在theme.css CSS,目前這隻能改變字體顏色:

GtkLabel { 
    color: green; 
} 

我編譯:

gcc `pkg-config gtk+-3.0 --cflags` test.c -o test `pkg-config --libs gtk+-3.0` 

然而,當我運行代碼,我得到黑色文本。如果我更改theme.css以使用小部件名稱或CSS類而不是GtkLabel,它仍然不起作用。但是,如果我使用*而不是GtkLabel,它可以工作(儘管我不希望這適用於所有內容)。這意味着C代碼應該是正確的,並且CSS有問題。

+0

您忽略了'gtk_css_provider_load_from_path()'中的錯誤。使用最後的參數;如果函數返回'FALSE',檢查它看看有什麼問題。我有一種感覺,選擇器不是'GtkLabel',你錯過了';'... – andlabs

+0

@andlabs我添加了';'(我的代碼有它,只是不是問題),我檢查了返回值。這是真的。 – gsingh2011

+0

嗯......嘗試將樣式提供程序添加到*標籤的*樣式上下文中,而不是*窗口的*。 – andlabs

回答

9

目前,CSS提供者沒有被繼承到子樣式上下文中。所以,你需要的CSS提供程序添加到使用gtk_style_context_add_provider_for_screen()

嘗試改變屏幕的

gtk_style_context_add_provider(gtk_widget_get_style_context(window), GTK_STYLE_PROVIDER(cssProvider), GTK_STYLE_PROVIDER_PRIORITY_USER);

gtk_style_context_add_provider_for_screen(gdk_screen_get_default(), GTK_STYLE_PROVIDER(cssProvider), GTK_STYLE_PROVIDER_PRIORITY_USER);

我不認爲GTK支持多個屏幕的這些天,但gtk_widget_get_screen()可用於替換gdk_screen_get_default()