Mercurial > dwindows
changeset 1915:98579be1198e
Experimental change to use CSS to change widget colors on GTK3.
This should remove some build warnings.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Wed, 28 Sep 2016 20:50:20 +0000 |
parents | 3872ab37297b |
children | eafaab13d0db |
files | gtk3/dw.c |
diffstat | 1 files changed, 32 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/gtk3/dw.c Wed Sep 28 18:36:53 2016 +0000 +++ b/gtk3/dw.c Wed Sep 28 20:50:20 2016 +0000 @@ -2586,6 +2586,34 @@ } } +/* Internal functions to convert to GTK3 style CSS */ +static void _dw_override_color(GtkWidget *widget, const char *element, GdkRGBA *color) +{ + if(color) + { + GtkCssProvider *provider = gtk_css_provider_new(); + gchar *scolor = gdk_rgba_to_string(color); + gchar *css = g_strdup_printf ("* { %s: %s; }", element, scolor); + + g_free(scolor); + gtk_css_provider_load_from_data(provider, css, -1, NULL); + g_free(css); + gtk_style_context_add_provider(gtk_widget_get_style_context(widget), GTK_STYLE_PROVIDER(provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); + g_object_unref(provider); + } +} + +static void _dw_override_font(GtkWidget *widget, const char *font) +{ + GtkCssProvider *provider = gtk_css_provider_new(); + gchar *css = g_strdup_printf ("* { font: %s; }", font); + + gtk_css_provider_load_from_data(provider, css, -1, NULL); + g_free(css); + gtk_style_context_add_provider(gtk_widget_get_style_context(widget), GTK_STYLE_PROVIDER(provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); + g_object_unref(provider); +} + /* * Sets the font used by a specified window (widget) handle. * Parameters: @@ -2594,7 +2622,6 @@ */ int dw_window_set_font(HWND handle, char *fontname) { - PangoFontDescription *pfont; GtkWidget *handle2 = handle; char *font = strdup(fontname); int _locked_by_me = FALSE; @@ -2629,13 +2656,8 @@ if(data) free(data); - pfont = pango_font_description_from_string(fontname); - - if(pfont) - { - gtk_widget_override_font(handle2, pfont); - pango_font_description_free(pfont); - } + _dw_override_font(handle2, font); + DW_MUTEX_UNLOCK; return TRUE; } @@ -2823,8 +2845,7 @@ else if(fore != DW_CLR_DEFAULT) forecolor = _colors[fore]; - gtk_widget_override_color(handle, GTK_STATE_FLAG_NORMAL, fore != DW_CLR_DEFAULT ? &forecolor : NULL); - gtk_widget_override_color(handle, GTK_STATE_FLAG_ACTIVE, fore != DW_CLR_DEFAULT ? &forecolor : NULL); + _dw_override_color(handle, "color", fore != DW_CLR_DEFAULT ? &forecolor : NULL); if(back & DW_RGB_COLOR) { @@ -2836,8 +2857,7 @@ else if(back != DW_CLR_DEFAULT) backcolor = _colors[back]; - gtk_widget_override_background_color(handle, GTK_STATE_FLAG_NORMAL, back != DW_CLR_DEFAULT ? &backcolor : NULL); - gtk_widget_override_background_color(handle, GTK_STATE_FLAG_ACTIVE, back != DW_CLR_DEFAULT ? &backcolor : NULL); + _dw_override_background_color(handle, "background-color", back != DW_CLR_DEFAULT ? &backcolor : NULL); _save_gdk_colors(handle, forecolor, backcolor);