2016-10-25 6 views
1

Хорошо, я недавно начал программирование с GTK + в C. У меня есть GdkToggleButton в моем коде, и я хочу добавить к нему стиль css. Я читал почти всю документацию GTK3 + здесь https://developer.gnome.org/gtk3/stable, но ничего не нашел, что подходит моему делу. На самом деле есть часть документации о CSS, но я не смог найти эту часть, чтобы на самом деле разобрать файл css.CSS Styling в GTK +

Все, что я хочу сделать, это изменить цвет GdkToggleButton либо с помощью CSS, либо с помощью любого другого метода.

Я хочу знать, где положить файл css и как его разобрать и добавить в виджет.

Я действительно мог получить GdkRGBA (цвет) кнопки, но изменения не имеют никакого эффекта. Вот как я изменяю кнопку GdkRGBA.

GdkRGBA *color ; 
GtkWidget *button; 
GtkStyleContext *context; 

color = gdk_rgba_copy (color); // I don't know to initialize GdkRGBA :(

context = gtk_widget_get_style_context(button);  
button = gtk_toggle_button_new_with_label ("Hello World"); 
gtk_style_context_get_color(context, 
          GTK_STATE_FLAG_NORMAL, 
          color); 
gdk_rgba_parse(color, 
       "red"); 

решаемые

gtk_css_provider_load_from_path (cssProvider, 
            "/home/shadow_m2/code.css", 
            NULL); 
gtk_style_context_add_provider (context, 
            GTK_STYLE_PROVIDER(cssProvider), 
            GTK_STYLE_PROVIDER_PRIORITY_USER); // I had used wrong priority on first try 
gtk_style_context_save (context); 
+0

Вы ищете GtkCssProvider. – andlabs

+0

Я также пробовал это, и он загружает файл css, но не знает, как создать виджет с помощью GtkCssProvider. @andlabs –

+0

Вы можете загрузить CSS из памяти с помощью GtkCssProvider. Чтобы применить его к виджету, см. GtkStyleContext (все GtkWidgets). – andlabs

ответ

1

Вы можете загрузить пользовательские CSS встроенный в программу с gtk_css_provider_load_from_data(). GtkCssProvider - как загрузить CSS в целом.

Затем вы получаете контекст стиля GtkWidget и вызываете на нем add_provider(). Используйте приоритет APPLICATION; это то, что вы добавляете в любом случае (специфичный для приложения CSS).

Также звонок save() не требуется.

+0

да моя проблема была в приоритете, которую я использовал. спасибо –