aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--widgets/misc/e-colors.c67
-rw-r--r--widgets/misc/e-colors.h14
2 files changed, 81 insertions, 0 deletions
diff --git a/widgets/misc/e-colors.c b/widgets/misc/e-colors.c
new file mode 100644
index 0000000000..4d09ecfa85
--- /dev/null
+++ b/widgets/misc/e-colors.c
@@ -0,0 +1,67 @@
+/*
+ * color.c: Color allocation on the Gnumeric spreadsheet
+ *
+ * Author:
+ * Miguel de Icaza (miguel@kernel.org)
+ *
+ * We keep our own color context, as the color allocation might take place
+ * before any of our Canvases are realized.
+ */
+#include <config.h>
+#include <gnome.h>
+#include "color.h"
+
+static int color_inited;
+GdkColorContext *gnumeric_color_context;
+
+int
+color_alloc (gushort red, gushort green, gushort blue)
+{
+ int failed;
+
+ if (!color_inited)
+ color_init ();
+
+ return gdk_color_context_get_pixel (gnumeric_color_context,
+ red, green, blue, &failed);
+}
+
+void
+color_alloc_gdk (GdkColor *c)
+{
+ int failed;
+
+ g_return_if_fail (c != NULL);
+
+ c->pixel = gdk_color_context_get_pixel (gnumeric_color_context, c->red, c->green, c->blue, &failed);
+}
+
+void
+color_alloc_name (char *name, GdkColor *c)
+{
+ int failed;
+
+ g_return_if_fail (name != NULL);
+ g_return_if_fail (c != NULL);
+
+ gdk_color_parse (name, c);
+ c->pixel = 0;
+ c->pixel = gdk_color_context_get_pixel (gnumeric_color_context, c->red, c->green, c->blue, &failed);
+}
+
+void
+color_init (void)
+{
+ GdkColormap *colormap = gtk_widget_get_default_colormap ();
+
+ /* Initialize the color context */
+ gnumeric_color_context = gdk_color_context_new (
+ gtk_widget_get_default_visual (), colormap);
+
+ /* Allocate the default colors */
+ gdk_color_white (colormap, &gs_white);
+ gdk_color_black (colormap, &gs_black);
+
+ color_alloc_name ("gray60", &gs_light_gray);
+ color_alloc_name ("gray20", &gs_dark_gray);
+}
diff --git a/widgets/misc/e-colors.h b/widgets/misc/e-colors.h
new file mode 100644
index 0000000000..738d0aec55
--- /dev/null
+++ b/widgets/misc/e-colors.h
@@ -0,0 +1,14 @@
+#ifndef COLOR_H
+#define COLOR_H
+
+void color_init (void);
+
+/* Return the pixel value for the given red, green and blue */
+int color_alloc (gushort red, gushort green, gushort blue);
+void color_alloc_name (char *name, GdkColor *color);
+void color_alloc_gdk (GdkColor *color);
+
+/* Colors used by any GnumericSheet item */
+extern GdkColor gs_white, gs_light_gray, gs_dark_gray, gs_black;
+
+#endif