From 950c8c6e41cac24029bf3acd79a811623504baca Mon Sep 17 00:00:00 2001 From: cazfi Date: Mon, 7 Nov 2016 04:42:35 +0000 Subject: [PATCH] Replaced deprecated gtk_widget_override_color() calls with modern solutions in gtk3.22-client See patch #6796 git-svn-id: svn://svn.gna.org/svn/freeciv/branches/S2_6@34427 a0f10bec-cc02-0410-94fc-a9cfff90b4cd --- client/gui-gtk-3.22/citydlg.c | 56 ++++++++++++++++++++++++++++++++--------- client/gui-gtk-3.22/gui_main.c | 2 ++ client/gui-gtk-3.22/gui_stuff.c | 31 +++++++++++++++++++---- client/gui-gtk-3.22/gui_stuff.h | 2 ++ client/gui-gtk-3.22/mapview.c | 30 ++++++++++++++++------ 5 files changed, 96 insertions(+), 25 deletions(-) diff --git a/client/gui-gtk-3.22/citydlg.c b/client/gui-gtk-3.22/citydlg.c index 1e0274c386..a431beaf67 100644 --- a/client/gui-gtk-3.22/citydlg.c +++ b/client/gui-gtk-3.22/citydlg.c @@ -1761,8 +1761,7 @@ static void city_dialog_update_information(GtkWidget **info_ebox, char buf[NUM_INFO_FIELDS][512]; struct city *pcity = pdialog->pcity; int granaryturns; - GdkRGBA red = {1.0, 0, 0, 1.0}; - GdkRGBA *color; + static GtkCssProvider *emergency_provider = NULL; enum { FOOD, SHIELD, TRADE, GOLD, LUXURY, SCIENCE, GRANARY, GROWTH, CORRUPTION, WASTE, CULTURE, @@ -1824,24 +1823,57 @@ static void city_dialog_update_information(GtkWidget **info_ebox, gtk_label_set_text(GTK_LABEL(info_label[i]), buf[i]); } - /* + /* * Special style stuff for granary, growth and pollution below. The * "4" below is arbitrary. 3 turns should be enough of a warning. */ - color = (granaryturns > -4 && granaryturns < 0) ? &red : NULL; - gtk_widget_override_color(info_label[GRANARY], GTK_STATE_FLAG_NORMAL, color); - color = (granaryturns == 0 || pcity->surplus[O_FOOD] < 0) ? &red : NULL; - gtk_widget_override_color(info_label[GROWTH], GTK_STATE_FLAG_NORMAL, color); + if (emergency_provider == NULL) { + emergency_provider = gtk_css_provider_new(); + + gtk_css_provider_load_from_data(emergency_provider, + ".emergency {\n color: rgba(255, 0.0, 0.0, 255);\n}", + -1, NULL); + + gtk_style_context_add_provider(gtk_widget_get_style_context(info_label[GRANARY]), + GTK_STYLE_PROVIDER(emergency_provider), + GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); + gtk_style_context_add_provider(gtk_widget_get_style_context(info_label[GROWTH]), + GTK_STYLE_PROVIDER(emergency_provider), + GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); + gtk_style_context_add_provider(gtk_widget_get_style_context(info_label[POLLUTION]), + GTK_STYLE_PROVIDER(emergency_provider), + GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); + gtk_style_context_add_provider(gtk_widget_get_style_context(info_label[ILLNESS]), + GTK_STYLE_PROVIDER(emergency_provider), + GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); + } + + if (granaryturns > -4 && granaryturns < 0) { + gtk_style_context_add_class(gtk_widget_get_style_context(info_label[GRANARY]), "emergency"); + } else { + gtk_style_context_remove_class(gtk_widget_get_style_context(info_label[GRANARY]), "emergency"); + } - /* someone could add the color &orange for better granularity here */ + if (granaryturns == 0 || pcity->surplus[O_FOOD] < 0) { + gtk_style_context_add_class(gtk_widget_get_style_context(info_label[GROWTH]), "emergency"); + } else { + gtk_style_context_remove_class(gtk_widget_get_style_context(info_label[GROWTH]), "emergency"); + } - color = (pcity->pollution >= 10) ? &red : NULL; - gtk_widget_override_color(info_label[POLLUTION], GTK_STATE_FLAG_NORMAL, color); + /* someone could add the color &orange for better granularity here */ + if (pcity->pollution >= 10) { + gtk_style_context_add_class(gtk_widget_get_style_context(info_label[POLLUTION]), "emergency"); + } else { + gtk_style_context_remove_class(gtk_widget_get_style_context(info_label[POLLUTION]), "emergency"); + } /* illness is in tenth of percent, i.e 100 != 10.0% */ - color = (illness >= 100) ? &red : NULL; - gtk_widget_override_color(info_label[ILLNESS], GTK_STATE_FLAG_NORMAL, color); + if (illness >= 100) { + gtk_style_context_add_class(gtk_widget_get_style_context(info_label[ILLNESS]), "emergency"); + } else { + gtk_style_context_remove_class(gtk_widget_get_style_context(info_label[ILLNESS]), "emergency"); + } } /**************************************************************** diff --git a/client/gui-gtk-3.22/gui_main.c b/client/gui-gtk-3.22/gui_main.c index e3c39dfe85..f7909a04f4 100644 --- a/client/gui-gtk-3.22/gui_main.c +++ b/client/gui-gtk-3.22/gui_main.c @@ -1737,6 +1737,8 @@ void ui_main(int argc, char **argv) /* GTK withdraw gtk options. Process GTK arguments */ gtk_init(&argc, &argv); + dlg_tab_provider_prepare(); + toplevel = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_position(GTK_WINDOW(toplevel), GTK_WIN_POS_CENTER); if (vmode.width > 0 && vmode.height > 0) { diff --git a/client/gui-gtk-3.22/gui_stuff.c b/client/gui-gtk-3.22/gui_stuff.c index a8c1559250..b8e13fb8b8 100644 --- a/client/gui-gtk-3.22/gui_stuff.c +++ b/client/gui-gtk-3.22/gui_stuff.c @@ -43,6 +43,8 @@ static GList *dialog_list; static GtkSizeGroup *gui_action; +static GtkCssProvider *dlg_tab_provider = NULL; + /************************************************************************** Draw widget now @@ -429,7 +431,8 @@ static void gui_dialog_switch_page_handler(GtkNotebook *notebook, n = gtk_notebook_page_num(GTK_NOTEBOOK(dlg->v.tab.notebook), dlg->vbox); if (n == num) { - gtk_widget_override_color(dlg->v.tab.label, GTK_STATE_FLAG_NORMAL, NULL); + gtk_style_context_remove_class(gtk_widget_get_style_context(dlg->v.tab.label), + "alert"); } } @@ -622,6 +625,9 @@ void gui_dialog_new(struct gui_dialog **pdlg, GtkNotebook *notebook, G_CALLBACK(gui_dialog_switch_page_handler), dlg); dlg->v.tab.child = vbox; + gtk_style_context_add_provider(gtk_widget_get_style_context(label), + GTK_STYLE_PROVIDER(dlg_tab_provider), + GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); dlg->v.tab.label = label; dlg->v.tab.notebook = GTK_WIDGET(notebook); @@ -838,9 +844,9 @@ void gui_dialog_present(struct gui_dialog *dlg) if (current != n) { GtkWidget *label = dlg->v.tab.label; - GdkRGBA color = {.red = 1.0, .green = 0, .blue = 0, .alpha = 1.0}; - gtk_widget_override_color(label, GTK_STATE_FLAG_NORMAL, &color); + gtk_style_context_add_class(gtk_widget_get_style_context(label), + "alert"); } } break; @@ -890,9 +896,9 @@ void gui_dialog_alert(struct gui_dialog *dlg) if (current != n) { GtkWidget *label = dlg->v.tab.label; - GdkRGBA color = {.red = 0, .green = 0, .blue =1.0, .alpha = 1.0}; - gtk_widget_override_color(label, GTK_STATE_FLAG_NORMAL, &color); + gtk_style_context_add_class(gtk_widget_get_style_context(label), + "alert"); } } break; @@ -1126,5 +1132,20 @@ GtkTreeViewColumn *add_treeview_column(GtkWidget *view, const char *title, col = gtk_tree_view_column_new_with_attributes(title, rend, attr, model_index, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(view), col); + return col; } + +/************************************************************************** + Prepare dialog tab style provider. +**************************************************************************/ +void dlg_tab_provider_prepare(void) +{ + dlg_tab_provider = gtk_css_provider_new(); + + gtk_css_provider_load_from_data(dlg_tab_provider, + ".alert {\n" + "color: rgba(255, 0, 0, 255);\n" + "}\n", + -1, NULL); +} diff --git a/client/gui-gtk-3.22/gui_stuff.h b/client/gui-gtk-3.22/gui_stuff.h index 98a1635b21..bb936ea8e0 100644 --- a/client/gui-gtk-3.22/gui_stuff.h +++ b/client/gui-gtk-3.22/gui_stuff.h @@ -99,6 +99,8 @@ struct gui_dialog GtkSizeGroup *gui_button; }; +void dlg_tab_provider_prepare(void); + void gui_dialog_new(struct gui_dialog **pdlg, GtkNotebook *notebook, gpointer user_data, bool check_top); void gui_dialog_set_default_response(struct gui_dialog *dlg, int response); diff --git a/client/gui-gtk-3.22/mapview.c b/client/gui-gtk-3.22/mapview.c index acd33a1d95..2594e7cbdb 100644 --- a/client/gui-gtk-3.22/mapview.c +++ b/client/gui-gtk-3.22/mapview.c @@ -81,15 +81,29 @@ void update_turn_done_button(bool do_restore) } if ((do_restore && flip) || !do_restore) { - GdkRGBA fore; - GdkRGBA back; - GtkStyleContext *context = gtk_widget_get_style_context(turn_done_button); - - gtk_style_context_get_color(context, GTK_STATE_FLAG_NORMAL, &fore); - gtk_style_context_get_background_color(context, GTK_STATE_FLAG_NORMAL, &back); + static GtkCssProvider *tdb_provider = NULL; + GtkStyleContext *scontext = gtk_widget_get_style_context(turn_done_button); + + if (tdb_provider == NULL) { + tdb_provider = gtk_css_provider_new(); + + gtk_css_provider_load_from_data(tdb_provider, + ".lighted {\n" + "color: rgba(235, 127, 235, 255);\n" + "background-color: rgba(127, 127, 127, 255);\n" + "}\n", + -1, NULL); + + gtk_style_context_add_provider(scontext, + GTK_STYLE_PROVIDER(tdb_provider), + GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); + } - gtk_widget_override_color(turn_done_button, GTK_STATE_FLAG_NORMAL, &back); - gtk_widget_override_background_color(turn_done_button, GTK_STATE_FLAG_NORMAL, &fore); + if (flip) { + gtk_style_context_add_class(scontext, "lighted"); + } else { + gtk_style_context_remove_class(scontext, "lighted"); + } flip = !flip; } -- 2.11.4.GIT