changeset 1847:ff80ad40a5d6

Initial attempt at allowing DW_CLR_DEFAULT clear color style overrides on GTK2/3.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Fri, 28 Dec 2012 01:24:39 +0000
parents 905f8632005b
children 68f923e57542
files gtk/dw.c gtk3/dw.c
diffstat 2 files changed, 28 insertions(+), 43 deletions(-) [+]
line wrap: on
line diff
--- a/gtk/dw.c	Thu Dec 27 13:03:47 2012 +0000
+++ b/gtk/dw.c	Fri Dec 28 01:24:39 2012 +0000
@@ -3358,30 +3358,24 @@
    GtkStyle *style = gtk_style_copy(gtk_widget_get_style(handle));
 #endif
 
-   if(fore != DW_CLR_DEFAULT)
-   {
-#if GTK_MAJOR_VERSION > 1
-      gtk_widget_modify_text(handle, 0, &forecolor);
-      gtk_widget_modify_text(handle, 1, &forecolor);
-      gtk_widget_modify_fg(handle, 0, &forecolor);
-      gtk_widget_modify_fg(handle, 1, &forecolor);
-#else
-      if(style)
-         style->text[0] = style->text[1] = style->fg[0] = style->fg[1] = forecolor;
-#endif
-   }
-   if(back != DW_CLR_DEFAULT)
-   {
-#if GTK_MAJOR_VERSION > 1
-      gtk_widget_modify_base(handle, 0, &backcolor);
-      gtk_widget_modify_base(handle, 1, &backcolor);
-      gtk_widget_modify_bg(handle, 0, &backcolor);
-      gtk_widget_modify_bg(handle, 1, &backcolor);
-#else
-      if(style)
-         style->base[0] = style->base[1] = style->bg[0] = style->bg[1] = backcolor;
-#endif
-   }
+#if GTK_MAJOR_VERSION > 1
+   gtk_widget_modify_text(handle, 0, fore != DW_CLR_DEFAULT ? &forecolor : NULL);
+   gtk_widget_modify_text(handle, 1, fore != DW_CLR_DEFAULT ? &forecolor : NULL);
+   gtk_widget_modify_fg(handle, 0, fore != DW_CLR_DEFAULT ? &forecolor : NULL);
+   gtk_widget_modify_fg(handle, 1, fore != DW_CLR_DEFAULT ? &forecolor : NULL);
+#else
+   if(fore != DW_CLR_DEFAULT && style)
+      style->text[0] = style->text[1] = style->fg[0] = style->fg[1] = forecolor;
+#endif
+#if GTK_MAJOR_VERSION > 1
+   gtk_widget_modify_base(handle, 0, back != DW_CLR_DEFAULT ? &backcolor : NULL);
+   gtk_widget_modify_base(handle, 1, back != DW_CLR_DEFAULT ? &backcolor : NULL);
+   gtk_widget_modify_bg(handle, 0, back != DW_CLR_DEFAULT ? &backcolor : NULL);
+   gtk_widget_modify_bg(handle, 1, back != DW_CLR_DEFAULT ? &backcolor : NULL);
+#else
+   if(back != DW_CLR_DEFAULT && style)
+      style->base[0] = style->base[1] = style->bg[0] = style->bg[1] = backcolor;
+#endif
 
    _save_gdk_colors(handle, forecolor, backcolor);
 
@@ -3391,8 +3385,8 @@
 
       for(z=0;z<rowcount;z++)
       {
-         gtk_clist_set_foreground(GTK_CLIST(handle), z, &forecolor);
-         gtk_clist_set_background(GTK_CLIST(handle), z, &backcolor);
+         gtk_clist_set_foreground(GTK_CLIST(handle), z, fore != DW_CLR_DEFAULT ? &forecolor : NULL);
+         gtk_clist_set_background(GTK_CLIST(handle), z, back != DW_CLR_DEFAULT ? &backcolor : NULL);
       }
    }
 
--- a/gtk3/dw.c	Thu Dec 27 13:03:47 2012 +0000
+++ b/gtk3/dw.c	Fri Dec 28 01:24:39 2012 +0000
@@ -2736,7 +2736,7 @@
    /* Remember that each color component in X11 use 16 bit no matter
     * what the destination display supports. (and thus GDK)
     */
-   GdkRGBA forecolor, backcolor;
+   GdkRGBA forecolor = {0}, backcolor = {0};
 
    if(fore & DW_RGB_COLOR)
    {
@@ -2744,34 +2744,25 @@
       forecolor.red = (gdouble)DW_RED_VALUE(fore) / 255.0;
       forecolor.green = (gdouble)DW_GREEN_VALUE(fore) / 255.0;
       forecolor.blue = (gdouble)DW_BLUE_VALUE(fore) / 255.0;
-
-      gtk_widget_override_color(handle, GTK_STATE_NORMAL, &forecolor);
-      gtk_widget_override_color(handle, GTK_STATE_ACTIVE, &forecolor);
    }
    else if(fore != DW_CLR_DEFAULT)
-   {
       forecolor = _colors[fore];
-
-      gtk_widget_override_color(handle, GTK_STATE_NORMAL, &forecolor);
-      gtk_widget_override_color(handle, GTK_STATE_ACTIVE, &forecolor);
-   }
+      
+   gtk_widget_override_color(handle, GTK_STATE_NORMAL, fore != DW_CLR_DEFAULT ? &forecolor : NULL);
+   gtk_widget_override_color(handle, GTK_STATE_ACTIVE, fore != DW_CLR_DEFAULT ? &forecolor : NULL);
+   
    if(back & DW_RGB_COLOR)
    {
       backcolor.alpha = 1.0;
       backcolor.red = (gdouble)DW_RED_VALUE(back) / 255.0;
       backcolor.green = (gdouble)DW_GREEN_VALUE(back) / 255.0;
       backcolor.blue = (gdouble)DW_BLUE_VALUE(back) / 255.0;
-
-      gtk_widget_override_background_color(handle, GTK_STATE_NORMAL, &backcolor);
-      gtk_widget_override_background_color(handle, GTK_STATE_ACTIVE, &backcolor);
    }
    else if(back != DW_CLR_DEFAULT)
-   {
       backcolor = _colors[back];
-
-      gtk_widget_override_background_color(handle, GTK_STATE_NORMAL, &backcolor);
-      gtk_widget_override_background_color(handle, GTK_STATE_ACTIVE, &backcolor);
-   }
+      
+   gtk_widget_override_background_color(handle, GTK_STATE_NORMAL, back != DW_CLR_DEFAULT ? &backcolor : NULL);
+   gtk_widget_override_background_color(handle, GTK_STATE_ACTIVE, back != DW_CLR_DEFAULT ? &backcolor : NULL);
 
    _save_gdk_colors(handle, forecolor, backcolor);