static gboolean gimp_color_hex_entry_events (GtkWidget *widget, GdkEvent *event) { GimpColorHexEntry *entry = GIMP_COLOR_HEX_ENTRY (widget); switch (event->type) { case GDK_KEY_PRESS: { GdkEventKey *kevent = (GdkEventKey *) event; if (kevent->keyval != GDK_KEY_Return && kevent->keyval != GDK_KEY_KP_Enter && kevent->keyval != GDK_KEY_ISO_Enter) break; /* else fall through */ } case GDK_FOCUS_CHANGE: { const gchar *text; gchar buffer[8]; guchar r, g, b; text = gtk_entry_get_text (GTK_ENTRY (widget)); gimp_rgb_get_uchar (&entry->color, &r, &g, &b); g_snprintf (buffer, sizeof (buffer), "%.2x%.2x%.2x", r, g, b); if (g_ascii_strcasecmp (buffer, text) != 0) { GimpRGB color; gsize len = strlen (text); if (len > 0 && (gimp_rgb_parse_hex (&color, text, len) || gimp_rgb_parse_name (&color, text, -1))) { gimp_color_hex_entry_set_color (entry, &color); } else { gtk_entry_set_text (GTK_ENTRY (entry), buffer); } } } break; default: /* do nothing */ break; } return FALSE; }
static VALUE rb_gimp_rgb_parse_name (VALUE self, VALUE name) { GimpRGB color; gboolean success; success = gimp_rgb_parse_name(&color, (gchar *)StringValuePtr(name), (gint)-1); if(!success) return Qnil; return GimpRGB2rb(&color); }
static gboolean gimp_color_hex_entry_matched (GtkEntryCompletion *completion, GtkTreeModel *model, GtkTreeIter *iter, GimpColorHexEntry *entry) { gchar *name; GimpRGB color; gtk_tree_model_get (model, iter, COLUMN_NAME, &name, -1); if (gimp_rgb_parse_name (&color, name, -1)) gimp_color_hex_entry_set_color (entry, &color); g_free (name); return TRUE; }
static PyObject * pygimp_rgb_parse_name(PyObject *self, PyObject *args, PyObject *kwargs) { char *name; int len; GimpRGB rgb; gboolean success; static char *kwlist[] = { "name", NULL }; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s#:rgb_parse_name", kwlist, &name, &len)) return NULL; rgb.a = 1.0; success = gimp_rgb_parse_name(&rgb, name, len); if (!success) { PyErr_SetString(PyExc_ValueError, "unable to parse color name"); return NULL; } return pygimp_rgb_new(&rgb); }
static void color_init (GimpRGB *rgb) { gimp_rgb_parse_name (rgb, "goldenrod", -1); gimp_rgb_set_alpha (rgb, 0.7); }