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);