- const gchar *FMT = "+ c #%2.2X%2.2X%2.2X";
- gchar buf[40];
-
- /* black frame of 1 pixel */
- gchar *dummy_xpm[] = {
- "16 16 3 1",
- " c None",
- ". c #000000",
- "+ c #000000",
- "................",
- ".++++++++++++++.",
- ".++++++++++++++.",
- ".++++++++++++++.",
- ".++++++++++++++.",
- ".++++++++++++++.",
- ".++++++++++++++.",
- ".++++++++++++++.",
- ".++++++++++++++.",
- ".++++++++++++++.",
- ".++++++++++++++.",
- ".++++++++++++++.",
- ".++++++++++++++.",
- ".++++++++++++++.",
- ".++++++++++++++.",
- "................"
- };
-
- GdkBitmap *xpmmask;
- GdkPixmap *xpm;
- GtkPixmap *pixmap;
-
- /* put correct color in xpm data */
- sprintf(buf, FMT, color.red >> 8, color.green >> 8, color.blue >> 8);
- dummy_xpm[3] = buf;
-
- /* XXX: passing NULL as GdkWindow* seems to be possible */
- xpm = gdk_pixmap_create_from_xpm_d
- (GDK_ROOT_PARENT(), &xpmmask, NULL, (gchar **) &dummy_xpm);
- if (xpm == NULL)
- debug_print("*** NO XPM\n");
- pixmap = GTK_PIXMAP(gtk_pixmap_new(xpm, xpmmask));
-
- g_return_val_if_fail(pixmap, NULL);
-
- gdk_pixmap_unref(xpm);
- gdk_bitmap_unref(xpmmask);
-
- return pixmap;
+ GdkDrawable *drawable = widget->window;
+ gulong c = (gulong) GPOINTER_TO_INT(data);
+ GdkColor color;
+ GdkGC *gc;
+
+ color.red = ((c >> 16UL) & 0xFFUL) << 8UL;
+ color.green = ((c >> 8UL) & 0xFFUL) << 8UL;
+ color.blue = ((c) & 0xFFUL) << 8UL;
+
+ gdk_colormap_alloc_color(gtk_widget_get_colormap(widget), &color, FALSE, TRUE);
+
+ gc = gdk_gc_new(drawable);
+
+ gdk_gc_set_foreground(gc, &color);
+ gdk_draw_rectangle(drawable, gc,
+ TRUE, 0, 0, widget->allocation.width,
+ widget->allocation.height);
+ gdk_draw_rectangle(drawable, widget->style->black_gc,
+ FALSE, 0, 0, widget->allocation.width,
+ widget->allocation.height);
+
+ gdk_gc_unref(gc);
+
+ return FALSE;
+}
+
+static GtkWidget *colorlabel_create_color_widget(GdkColor color)
+{
+ GtkWidget *widget;
+
+ widget = gtk_drawing_area_new();
+ gtk_drawing_area_size(GTK_DRAWING_AREA(widget), 16, 16);
+
+#define CL(x) (((gulong) (x) >> (gulong) 8) & 0xFFUL)
+#define CR(r, g, b) ((CL(r) << (gulong) 16) | \
+ (CL(g) << (gulong) 8) | \
+ (CL(b)))
+
+ gtk_signal_connect(GTK_OBJECT(widget), "expose_event",
+ colorlabel_drawing_area_expose_event_cb,
+ GINT_TO_POINTER( (gint) CR(color.red, color.green, color.blue )));
+
+ return widget;