diff -ru was/dia-0.86/app/interface.c fixed/dia-0.86/app/interface.c --- was/dia-0.86/app/interface.c Mon Jul 31 11:12:47 2000 +++ fixed/dia-0.86/app/interface.c Fri Dec 22 02:02:07 2000 @@ -29,6 +29,10 @@ #include "dia_dirs.h" +#include +#include +#include + ToolButton tool_data[] = { { (char **) arrow_xpm, @@ -349,6 +353,148 @@ } } +/* + The two functions below are by Vlad Harchev + Their task is to substitute the black colors on the icons with the + color of current theme's text foreground of the widget with name + "magic-icon-foreground-color", or if no such widget style is defined, with + current theme's text foreground of GtkLabel. This is very important if + the gtk theme is the dark one - without these 2 functions black color in icons + would be indistinguishable from the dark button the icon is painted on. + + So, to substitute black with say, yellow, add the following to your + theme or ~/.gtkrc + +style "magic-icon-style" +{ + text[NORMAL] = { 1.0, 1.0, 0 } #this is the spec of the color +} +widget "magic-icon-foreground-color" style "magic-icon-style" + + The spread of the use of these 2 functions for loading icons is appreciated. +*/ +static GdkPixmap* themed_pixmap_colormap_create_from_xpm_d + (GdkWindow *window, + GdkColormap *colormap, + GdkBitmap **mask, + GdkColor *transparent_color, + gchar **data) +{ + int w,h,nc; + static GtkWidget* aux_label = NULL; + static char magic_color_spec[50]; + char** dynamic_buffer = NULL; + char** buffer = data; + GdkPixmap* retval; + + if (!aux_label) { + GdkColor* c; + + aux_label = gtk_label_new(""); + gtk_widget_set_name(aux_label, "magic-icon-foreground-color"); + gtk_widget_ensure_style(aux_label); + c = aux_label->style->text + GTK_STATE_NORMAL; + sprintf(magic_color_spec,"%02x%02x%02x",(unsigned + int)c->red>>8,(unsigned int) c->green>>8,(unsigned int) c->blue>>8); + }; + + if (sscanf(data[0],"%d %d %d",&h,&w,&nc)==3) { + int magic_color_index = -1; + if (nc==2) { + int line; + for (line = 1; line<=2;++line) { + if (!strcmp(data[line]+2,"c #000000") || !strcmp(data[line]+2,"c black")) { + magic_color_index = line - 1; + break; + }; + }; + } else if (data[1][0]=='?') { + int idx=-1; + if (sscanf(data[1]+strlen(".\tc #"),"%x",&idx)==1 && idx>0 && idx < nc) { + magic_color_index = idx; + }; + } + if (magic_color_index!=-1) { + static char replacement_line[100]; + static char* static_buffer[100]; + + if (h+1+nc > sizeof(static_buffer)/sizeof(static_buffer[0])) { + buffer = dynamic_buffer = g_new(char*,h+1+nc); + } else + buffer = static_buffer; + memcpy(buffer,data,sizeof(char*)*(h+1+nc)); + sprintf(replacement_line,"%c\tc #%s",data[1+magic_color_index][0], + magic_color_spec); + buffer[1+magic_color_index] = replacement_line; + }; + }; + retval = gdk_pixmap_colormap_create_from_xpm_d (window, + colormap, mask, transparent_color, (gchar**)buffer); + if (dynamic_buffer) + g_free(dynamic_buffer); + return retval; +}; + +static GdkPixmap* themed_pixmap_colormap_create_from_xpm + (GdkWindow *window, + GdkColormap *colormap, + GdkBitmap **mask, + GdkColor *transparent_color, + const gchar *filename) +{ + char buf[2048]; + int cnt; + { + FILE* f = fopen(filename,"rt"); + if (!f) + return NULL; + cnt = fread(buf,1,sizeof(buf),f); + if (!cnt || cnt == sizeof(buf)) + return NULL;/*too big or small*/ + fclose(f); + buf[cnt] = '\0'; + } + { + char** strings = g_strsplit(buf,"\n",0); + char** p; + int nlines; + void* retval = NULL; + char** data; + int i; + + for(p=strings;*p;++p); + --p; + for(;p>strings;--p) + if (strchr(*p,'"')) + break; + ++p; + nlines = p - strings - 2; + data = g_new(char*,nlines+1); + data[nlines] = NULL; + + for(i=0;ibg[GTK_STATE_NORMAL], pixmap_data); @@ -546,17 +692,17 @@ ToolButtonData *data; if (sheet_obj->pixmap != NULL) { - pixmap = gdk_pixmap_colormap_create_from_xpm_d(NULL, + pixmap = themed_pixmap_colormap_create_from_xpm_d(NULL, gtk_widget_get_colormap(sheet_wbox), &mask, &style->bg[GTK_STATE_NORMAL], sheet_obj->pixmap); } else if (sheet_obj->pixmap_file != NULL) { - pixmap = gdk_pixmap_colormap_create_from_xpm(NULL, + pixmap = themed_pixmap_colormap_create_from_xpm(NULL, gtk_widget_get_colormap(sheet_wbox), &mask, &style->bg[GTK_STATE_NORMAL], sheet_obj->pixmap_file); } else { ObjectType *type; type = object_get_type(sheet_obj->object_type); - pixmap = gdk_pixmap_colormap_create_from_xpm_d(NULL, + pixmap = themed_pixmap_colormap_create_from_xpm_d(NULL, gtk_widget_get_colormap(sheet_wbox), &mask, &style->bg[GTK_STATE_NORMAL], type->pixmap); } @@ -691,7 +837,7 @@ gtk_widget_get_colormap(parent), &mask, &style->bg[GTK_STATE_NORMAL], default_xpm); swap_pixmap = - gdk_pixmap_colormap_create_from_xpm_d(NULL, + themed_pixmap_colormap_create_from_xpm_d(NULL, gtk_widget_get_colormap(parent), &mask, &style->bg[GTK_STATE_NORMAL], swap_xpm); Only in fixed/dia-0.86/app: interface.c-was diff -ru was/dia-0.86/app/pixmaps/swap.xpm fixed/dia-0.86/app/pixmaps/swap.xpm --- was/dia-0.86/app/pixmaps/swap.xpm Thu Jun 3 15:09:49 1999 +++ fixed/dia-0.86/app/pixmaps/swap.xpm Thu Dec 21 18:21:02 2000 @@ -1,6 +1,7 @@ /* XPM */ static char * swap_xpm[] = { -"13 13 3 1", +"13 13 4 1", +"? c #000003", " c None", ". c #919191", "+ c #000000", diff -ru was/dia-0.86/objects/FS/pixmaps/flow.xpm fixed/dia-0.86/objects/FS/pixmaps/flow.xpm --- was/dia-0.86/objects/FS/pixmaps/flow.xpm Sun Jul 25 12:30:15 1999 +++ fixed/dia-0.86/objects/FS/pixmaps/flow.xpm Fri Dec 22 01:10:53 2000 @@ -1,6 +1,7 @@ /* XPM */ static char * flow_xpm[] = { -"22 22 3 1", +"22 22 4 1", +"? c #000003", " c None", ". c white", "X c black", diff -ru was/dia-0.86/objects/FS/pixmaps/orthflow.xpm fixed/dia-0.86/objects/FS/pixmaps/orthflow.xpm --- was/dia-0.86/objects/FS/pixmaps/orthflow.xpm Sun Jul 25 12:30:15 1999 +++ fixed/dia-0.86/objects/FS/pixmaps/orthflow.xpm Fri Dec 22 01:17:15 2000 @@ -1,6 +1,7 @@ /* XPM */ static char * orthflow_xpm[] = { -"22 22 3 1", +"22 22 4 1", +"? c #000003", " c None", ". c white", "X c black", diff -ru was/dia-0.86/objects/GRAFCET/pixmaps/condition.xpm fixed/dia-0.86/objects/GRAFCET/pixmaps/condition.xpm --- was/dia-0.86/objects/GRAFCET/pixmaps/condition.xpm Wed Feb 2 20:25:28 2000 +++ fixed/dia-0.86/objects/GRAFCET/pixmaps/condition.xpm Fri Dec 22 01:18:28 2000 @@ -1,6 +1,7 @@ /* XPM */ static char * condition_xpm[] = { -"22 22 3 1", +"22 22 4 1", +"? c #000002", " c None", ". c #000000", "+ c #5F5F5F", diff -ru was/dia-0.86/objects/SADT/pixmaps/arrow.xpm fixed/dia-0.86/objects/SADT/pixmaps/arrow.xpm --- was/dia-0.86/objects/SADT/pixmaps/arrow.xpm Thu Jan 27 00:58:12 2000 +++ fixed/dia-0.86/objects/SADT/pixmaps/arrow.xpm Fri Dec 22 01:19:34 2000 @@ -1,6 +1,7 @@ /* XPM */ static char * arrow_xpm[] = { -"22 22 4 1", +"22 22 5 1", +"? c #000003", " c None", ". c #00FC00", "+ c #000000", diff -ru was/dia-0.86/objects/SADT/pixmaps/sadtbox.xpm fixed/dia-0.86/objects/SADT/pixmaps/sadtbox.xpm --- was/dia-0.86/objects/SADT/pixmaps/sadtbox.xpm Thu Jan 27 00:58:12 2000 +++ fixed/dia-0.86/objects/SADT/pixmaps/sadtbox.xpm Fri Dec 22 01:19:56 2000 @@ -1,6 +1,7 @@ /* XPM */ static char * sadtbox_xpm[] = { -"22 22 3 1", +"22 22 4 1", +"? c #000002", " c None", ". c #000000", "+ c #FFFFFF", diff -ru was/dia-0.86/objects/UML/pixmaps/classicon.xpm fixed/dia-0.86/objects/UML/pixmaps/classicon.xpm --- was/dia-0.86/objects/UML/pixmaps/classicon.xpm Thu Jun 3 15:12:08 1999 +++ fixed/dia-0.86/objects/UML/pixmaps/classicon.xpm Fri Dec 22 01:21:36 2000 @@ -1,6 +1,7 @@ /* XPM */ static char * classicon_xpm[] = { -"22 22 3 1", +"22 22 4 1", +"? c #000002", " c none", ". c black", "X c white", diff -ru was/dia-0.86/objects/UML/pixmaps/generalization.xpm fixed/dia-0.86/objects/UML/pixmaps/generalization.xpm --- was/dia-0.86/objects/UML/pixmaps/generalization.xpm Thu Jun 3 15:12:08 1999 +++ fixed/dia-0.86/objects/UML/pixmaps/generalization.xpm Fri Dec 22 01:22:16 2000 @@ -1,6 +1,7 @@ /* XPM */ static char * generalization_xpm[] = { -"22 22 3 1", +"22 22 4 1", +"? c #000002", " c None", ". c #000000", "+ c #FFFFFF", diff -ru was/dia-0.86/objects/UML/pixmaps/implements.xpm fixed/dia-0.86/objects/UML/pixmaps/implements.xpm --- was/dia-0.86/objects/UML/pixmaps/implements.xpm Thu Jun 3 15:12:08 1999 +++ fixed/dia-0.86/objects/UML/pixmaps/implements.xpm Fri Dec 22 01:22:34 2000 @@ -1,6 +1,7 @@ /* XPM */ static char * implements_xpm[] = { -"22 22 3 1", +"22 22 4 1", +"? c #000002", " c None", ". c #000000", "+ c #FFFFFF", diff -ru was/dia-0.86/objects/UML/pixmaps/lifeline.xpm fixed/dia-0.86/objects/UML/pixmaps/lifeline.xpm --- was/dia-0.86/objects/UML/pixmaps/lifeline.xpm Thu Jun 3 15:12:08 1999 +++ fixed/dia-0.86/objects/UML/pixmaps/lifeline.xpm Fri Dec 22 01:22:58 2000 @@ -1,6 +1,7 @@ /* XPM */ static char * lifeline_xpm[] = { -"22 22 3 1", +"22 22 4 1", +"? c #000002", " c None", ". c black", "X c white", diff -ru was/dia-0.86/objects/UML/pixmaps/message.xpm fixed/dia-0.86/objects/UML/pixmaps/message.xpm --- was/dia-0.86/objects/UML/pixmaps/message.xpm Thu Jun 3 15:12:08 1999 +++ fixed/dia-0.86/objects/UML/pixmaps/message.xpm Fri Dec 22 01:33:36 2000 @@ -1,8 +1,7 @@ /* XPM */ static char * message_xpm[] = { -"22 22 3 1", +"22 22 2 1", " c None", -". c white", "X c black", " ", " ", diff -ru was/dia-0.86/objects/UML/pixmaps/realizes.xpm fixed/dia-0.86/objects/UML/pixmaps/realizes.xpm --- was/dia-0.86/objects/UML/pixmaps/realizes.xpm Thu Jun 3 15:12:09 1999 +++ fixed/dia-0.86/objects/UML/pixmaps/realizes.xpm Fri Dec 22 01:24:13 2000 @@ -1,6 +1,7 @@ /* XPM */ static char * realizes_xpm[] = { -"22 22 3 1", +"22 22 4 1", +"? c #000002", " c None", ". c #000000", "+ c #FFFFFF", diff -ru was/dia-0.86/objects/chronogram/pixmaps/chronoline.xpm fixed/dia-0.86/objects/chronogram/pixmaps/chronoline.xpm --- was/dia-0.86/objects/chronogram/pixmaps/chronoline.xpm Wed Jan 26 03:54:38 2000 +++ fixed/dia-0.86/objects/chronogram/pixmaps/chronoline.xpm Fri Dec 22 01:40:26 2000 @@ -1,6 +1,7 @@ /* XPM */ static char * chronoline_xpm[] = { -"22 22 4 1", +"22 22 5 1", +"#? c #000004", " c None", ". c #FF0000", "+ c #FF8080", diff -ru was/dia-0.86/objects/standard/pixmaps/arc.xpm fixed/dia-0.86/objects/standard/pixmaps/arc.xpm --- was/dia-0.86/objects/standard/pixmaps/arc.xpm Thu Jun 3 15:12:26 1999 +++ fixed/dia-0.86/objects/standard/pixmaps/arc.xpm Fri Dec 22 01:26:12 2000 @@ -1,6 +1,7 @@ /* XPM */ static char * arc_xpm[] = { -"22 22 4 1", +"22 22 5 1", +"? c #000003", " c None", ". c #00FC00", "+ c #000000", diff -ru was/dia-0.86/objects/standard/pixmaps/bezier.xpm fixed/dia-0.86/objects/standard/pixmaps/bezier.xpm --- was/dia-0.86/objects/standard/pixmaps/bezier.xpm Sun Dec 5 11:25:06 1999 +++ fixed/dia-0.86/objects/standard/pixmaps/bezier.xpm Fri Dec 22 01:26:34 2000 @@ -1,6 +1,7 @@ /* XPM */ static char * bezier_xpm[] = { -"22 22 4 1", +"22 22 5 1", +"? c #000004", " c None", ". c #F88010", "+ c #00FC00", diff -ru was/dia-0.86/objects/standard/pixmaps/line.xpm fixed/dia-0.86/objects/standard/pixmaps/line.xpm --- was/dia-0.86/objects/standard/pixmaps/line.xpm Thu Jun 3 15:12:26 1999 +++ fixed/dia-0.86/objects/standard/pixmaps/line.xpm Fri Dec 22 01:27:14 2000 @@ -1,6 +1,7 @@ /* XPM */ static char * line_xpm[] = { -"22 22 3 1", +"22 22 4 1", +"? c #000003", " c None", ". c #00FF00", "+ c #000000", diff -ru was/dia-0.86/objects/standard/pixmaps/polyline.xpm fixed/dia-0.86/objects/standard/pixmaps/polyline.xpm --- was/dia-0.86/objects/standard/pixmaps/polyline.xpm Thu Jun 3 15:12:26 1999 +++ fixed/dia-0.86/objects/standard/pixmaps/polyline.xpm Fri Dec 22 01:27:55 2000 @@ -1,6 +1,7 @@ /* XPM */ static char * polyline_xpm[] = { -"22 22 4 1", +"22 22 5 1", +"? c #000003", " c None", ". c #00FC00", "+ c #000000", diff -ru was/dia-0.86/objects/standard/pixmaps/zigzag.xpm fixed/dia-0.86/objects/standard/pixmaps/zigzag.xpm --- was/dia-0.86/objects/standard/pixmaps/zigzag.xpm Thu Jun 3 15:12:26 1999 +++ fixed/dia-0.86/objects/standard/pixmaps/zigzag.xpm Fri Dec 22 01:28:03 2000 @@ -1,6 +1,7 @@ /* XPM */ static char * zigzag_xpm[] = { -"22 22 4 1", +"22 22 5 1", +"? c #000003", " c None", ". c #00FC00", "+ c #000000", diff -ru was/dia-0.86/sheets/UML/aggregation.xpm fixed/dia-0.86/sheets/UML/aggregation.xpm --- was/dia-0.86/sheets/UML/aggregation.xpm Fri Nov 12 03:32:15 1999 +++ fixed/dia-0.86/sheets/UML/aggregation.xpm Fri Dec 22 01:36:19 2000 @@ -1,6 +1,7 @@ /* XPM */ static char * aggregation_xpm[] = { -"22 22 3 1", +"22 22 4 1", +#? c #000002", " c None", ". c #000000", "+ c #FFFFFF",