43 #include "gnucash-color.h"
45 static int color_inited;
48 GdkColor gn_white, gn_black, gn_light_gray;
49 GdkColor gn_dark_gray, gn_blue, gn_red, gn_yellow;
51 static GHashTable *color_hash_table = NULL;
54 color_hash (gconstpointer v)
56 const guint32 *c = (guint32 *) v;
63 color_equal (gconstpointer v, gconstpointer w)
65 const guint32 *c1 = (guint32 *) v;
66 const guint32 *c2 = (guint32 *) w;
73 gnucash_color_alloc (gushort red, gushort green, gushort blue)
75 GdkColormap *colormap = gtk_widget_get_default_colormap ();
79 gnucash_color_init ();
81 c = g_new0 (GdkColor, 1);
86 g_return_val_if_fail (gdk_colormap_alloc_color (colormap, c, FALSE, TRUE), 0);
93 gnucash_color_alloc_gdk (GdkColor *c)
95 GdkColormap *colormap = gtk_widget_get_default_colormap ();
97 g_return_if_fail (c != NULL);
99 g_assert (gdk_colormap_alloc_color (colormap, c,
105 gnucash_color_alloc_name (
const char *name, GdkColor *c)
107 GdkColormap *colormap = gtk_widget_get_default_colormap ();
109 g_return_if_fail (name != NULL);
110 g_return_if_fail (c != NULL);
112 gdk_color_parse (name, c);
114 g_assert (gdk_colormap_alloc_color (colormap, c,
124 gnucash_color_argb_to_gdk (guint32 argb)
127 const guint32 key = argb;
130 color = g_hash_table_lookup (color_hash_table, &key);
135 color = g_new0(GdkColor, 1);
136 newkey = g_new0(guint32, 1);
140 color->red = (argb & 0xff0000) >> 8;
141 color->green = argb & 0xff00;
142 color->blue = (argb & 0xff) << 8;
144 gnucash_color_alloc_gdk(color);
146 g_hash_table_insert (color_hash_table, newkey, color);
153 gnucash_color_init (
void)
156 gnucash_color_alloc_name (
"white", &gn_white);
157 gnucash_color_alloc_name (
"black", &gn_black);
159 gnucash_color_alloc_name (
"gray60", &gn_light_gray);
160 gnucash_color_alloc_name (
"gray40", &gn_dark_gray);
161 gnucash_color_alloc_name (
"blue", &gn_blue);
162 gnucash_color_alloc_name (
"red", &gn_red);
163 gnucash_color_alloc_name (
"yellow", &gn_yellow);
165 if (!color_hash_table)
166 color_hash_table = g_hash_table_new (color_hash, color_equal);