2015-06-11 5 views
5

Ich versuche CSS zu verwenden, um ein GtkLabel zu stylen. Ich möchte die Farbe und Schriftgröße des Etiketts ändern. Hier ist meine C-Code:Wie style ich ein GtkLabel mit CSS?

#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(); 
} 

Hier ist meine CSS in theme.css, zur Zeit sollte dies nur die Farbe der Schrift ändern:

GtkLabel { 
    color: green; 
} 

ich kompilieren mit:

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

Wenn jedoch Ich starte den Code Ich bekomme schwarzen Text. Wenn ich theme.css ändere, um einen Widget-Namen oder eine CSS-Klasse anstelle von GtkLabel zu verwenden, funktioniert es immer noch nicht. Wenn ich jedoch * anstelle von GtkLabel verwende, funktioniert es (obwohl ich nicht möchte, dass dies für alles gilt). Dies bedeutet, dass der C-Code korrekt sein sollte und etwas mit dem CSS nicht stimmt.

+0

Sie ignorieren Fehler von 'gtk_css_provider_load_from_path()'. Benutze das letzte Argument. Wenn die Funktion 'FALSE' zurückgibt, überprüfen Sie, um festzustellen, was falsch ist. Ich habe das Gefühl, der Selektor ist nicht 'GtkLabel' und du vermisst ein'; '... – andlabs

+0

@andlabs Ich fügte die'; '(mein Code hatte es, nur nicht die Frage), und ich überprüfte die Rückkehr Wert. Das ist wahr. – gsingh2011

+0

Hm ... Versuchen Sie, den Style-Provider zum * Style-Kontext des * Labels hinzuzufügen, anstatt zu dem * Fenster *. – andlabs

Antwort

9

Gegenwärtig werden CSS-Provider nicht an die Kontexte des Child-Stils vererbt. So müssen Sie den CSS-Provider auf den Bildschirm hinzufügen mit gtk_style_context_add_provider_for_screen()

Try Ändern

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

zu

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

Ich glaube nicht gtk mehrere Bildschirme in diesen Tagen unterstützt, aber gtk_widget_get_screen() könnte verwendet werden, um gdk_screen_get_default() zu ersetzen.