2017-06-05 52 views
6

używam tego kodu, aby utworzyć pole kombi z kolorowym tle/tekst:Jak ustawić tło GTKListStore/GTKComboBox w GTK2?

GtkListStore *liststore; 
GtkWidget *combo; 
GtkCellRenderer *column; 
liststore = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); 
for(int i=0; i<10; i++) { 
    gtk_list_store_insert_with_values(liststore, NULL, -1, 0, "Default", 1, "white", 2, "black", -1); 
} 
combo = gtk_combo_box_new_with_model(GTK_TREE_MODEL(liststore)); 
g_object_unref(liststore); 
column = gtk_cell_renderer_text_new(); 
gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combo), column, TRUE); 
gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo), column, "text", 0, "foreground", 1, "background", 2, NULL); 

i to działa. Wygląda to tak: enter image description here

Moje pytanie brzmi: jak ustawić tło listeksu lub pola kombi tak, aby nie było żadnych spacji, jak widać na obrazku? Dzięki!

Odpowiedz

2

Używam motywu Numix, więc "obramowanie" jest czerwone. Można użyć CSS, aby zastąpić style tematycznych:

GtkCssProvider *provider; 

provider = gtk_css_provider_new(); 
gtk_css_provider_load_from_data (provider, "menuitem { background: #000; } menuitem:hover { background: #FFF; } .combo { background: #000; }", -1, NULL); 
gtk_style_context_add_provider (
    GTK_STYLE_CONTEXT (gtk_widget_get_style_context (GTK_WIDGET (combo))), 
    GTK_STYLE_PROVIDER (provider), 
    GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); 

gtk_style_context_add_provider_for_screen (gtk_widget_get_screen (combo), 
              GTK_STYLE_PROVIDER (provider), 
              GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); 
g_object_unref (provider); 

Oto wynik: screenshot

A oto kod źródłowy całości: https://pastebin.com/wDeUpb8A

wziąć również do obejrzenia GtkInspector, to poręczne narzędzie do takich celów.

+1

Czy to nie działa tylko w przypadku GTK3? Przepraszam, jeśli coś nie rozumiem. –

+0

Odpowiedź zaktualizowana, używam GTK 3.22. – AndreLDM

+0

Proszę wyjaśnić w pytaniu, że używasz wycofanej wersji GTK, łatwo jest przeoczyć tag. – AndreLDM