static gboolean remove_color_to_names_sets (GstylePalette *self, GstyleColor *color) { const gchar *name; GPtrArray *set; gboolean ret = FALSE; g_assert (GSTYLE_IS_PALETTE (self)); g_assert (GSTYLE_IS_COLOR (color)); name = gstyle_color_get_name (color); if (gstyle_str_empty0 (name)) return FALSE; set = g_hash_table_lookup (self->color_names, name); if (set == NULL) return FALSE; ret = g_ptr_array_remove (set, color); if (set->len == 0) { g_ptr_array_unref (set); g_hash_table_remove (self->color_names, name); } return ret; }
/** * gstyle_palette_lookup: * @self: a #GstylePalette * @name: A #GstyleColor name * * Search for one or several #GstyleColor named @name in the palette. * * Returns: (transfer none) (nullable) (element-type GstyleColor): a #GstyleColor pointer array. */ GPtrArray * gstyle_palette_lookup (GstylePalette *self, const gchar *name) { GPtrArray *set; g_return_val_if_fail (GSTYLE_IS_PALETTE (self), NULL); g_return_val_if_fail (!gstyle_str_empty0 (name), NULL); set = g_hash_table_lookup (self->color_names, name); return set; }
/** * gstyle_palette_set_id: * @self: a #GstylePalette * @id: palette id * */ void gstyle_palette_set_id (GstylePalette *self, const gchar *id) { gint64 num_id; g_return_if_fail (GSTYLE_IS_PALETTE (self)); if (gstyle_str_empty0 (id)) { num_id = g_get_real_time (); self->id = g_strdup_printf ("gb-cp-%"G_GINT64_FORMAT, num_id); gstyle_palette_set_changed (self, TRUE); } else if (g_strcmp0 (self->id, id) != 0) { g_free (self->id); self->id = g_strdup (id); gstyle_palette_set_changed (self, TRUE); } }
static gboolean gstyle_palette_xml_get_header (xmlTextReaderPtr reader, gchar **id, gchar **name, gchar **domain) { g_assert (reader != NULL); g_assert (id != NULL); g_assert (name != NULL); g_assert (domain != NULL); *id = *name = *domain = NULL; if (xmlTextReaderRead(reader) == 1 && xmlTextReaderNodeType (reader) == XML_READER_TYPE_ELEMENT && !g_strcmp0 (XML_TO_CHAR (xmlTextReaderConstName (reader)), "palette") && xmlTextReaderDepth (reader) == 0) { *id = strdup_and_xmlfree (xmlTextReaderGetAttribute (reader, CHAR_TO_XML ("id"))); *name = strdup_and_xmlfree (xmlTextReaderGetAttribute (reader, CHAR_TO_XML ("name"))); if (*name == NULL) { *name = strdup_and_xmlfree (xmlTextReaderGetAttribute (reader, CHAR_TO_XML ("_name"))); *domain = strdup_and_xmlfree (xmlTextReaderGetAttribute (reader, CHAR_TO_XML ("gettext-domain"))); } if (gstyle_str_empty0 (*id) || gstyle_utf8_is_spaces (*id)) { g_warning ("Palette '%s'has an empty or NULL id\n", *name); return FALSE; } if (gstyle_utf8_is_spaces (*name)) g_clear_pointer (name, g_free); } return (*id != NULL); }
/* TODO: add an unnamed category ? */ static gboolean add_color_to_names_sets (GstylePalette *self, GstyleColor *color) { const gchar *name; GPtrArray *set; g_assert (GSTYLE_IS_PALETTE (self)); g_assert (GSTYLE_IS_COLOR (color)); name = gstyle_color_get_name (color); if (gstyle_str_empty0 (name)) return FALSE; set = g_hash_table_lookup (self->color_names, name); if (set == NULL) { set = g_ptr_array_new (); g_hash_table_insert (self->color_names, (gpointer)name, set); } g_ptr_array_add (set, color); return TRUE; }
static GstyleColor * gstyle_palette_xml_get_color (xmlTextReaderPtr reader) { GstyleColor *color = NULL; g_autofree gchar *name; g_autofree gchar *value; g_assert (reader != NULL); if (xmlTextReaderNodeType (reader) == XML_READER_TYPE_ELEMENT && !g_strcmp0 (XML_TO_CHAR (xmlTextReaderConstName (reader)), "color") && xmlTextReaderDepth (reader) == 1) { name = strdup_and_xmlfree (xmlTextReaderGetAttribute (reader, CHAR_TO_XML ("name"))); if (gstyle_utf8_is_spaces (name)) g_clear_pointer (&name, g_free); value = strdup_and_xmlfree (xmlTextReaderGetAttribute (reader, CHAR_TO_XML ("value"))); if (!gstyle_str_empty0 (value)) color = gstyle_color_new_from_string (name, value); } return color; }
static void gstyle_color_widget_on_drag_data_received (GtkWidget *widget, GdkDragContext *context, gint x, gint y, GtkSelectionData *data, guint info, guint time) { GstyleColorWidget *self = GSTYLE_COLOR_WIDGET (widget); GstyleColor * const *src_color; g_autofree gchar *color_string = NULL; GstyleColorKind kind; GdkAtom target; guint16 *data_rgba; GdkRGBA rgba; gint len; g_assert (GSTYLE_IS_COLOR_WIDGET (self)); g_assert (GDK_IS_DRAG_CONTEXT (context)); target = gtk_selection_data_get_target (data); if (target == gdk_atom_intern_static_string ("GSTYLE_COLOR_WIDGET")) { /* TODO: check if the color widget is coming from a PaletteWidget container */ src_color = (void*)gtk_selection_data_get_data (data); if (*src_color != self->color) dnd_color_fill (self, *src_color, self->color); gtk_drag_finish (context, TRUE, FALSE, time); return; } else if (target == gdk_atom_intern_static_string ("application/x-color")) { len = gtk_selection_data_get_length (data); if (len < 0 ) goto failed; #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wcast-align" data_rgba = (guint16 *)gtk_selection_data_get_data (data); #pragma GCC diagnostic pop rgba.red = data_rgba[0] / 65535.; rgba.green = data_rgba[1] / 65535.; rgba.blue = data_rgba[2] / 65535.; rgba.alpha = data_rgba[3] / 65535.; gstyle_color_set_rgba (self->color, &rgba); gtk_drag_finish (context, TRUE, FALSE, time); return; } else if (gtk_targets_include_text (&target, 1)) { color_string = (gchar *)gtk_selection_data_get_text (data); if (!gstyle_str_empty0 (color_string)) { if (!gstyle_color_parse_color_string (color_string, &rgba, &kind)) goto failed; gstyle_color_set_rgba (self->color, &rgba); gtk_drag_finish (context, TRUE, FALSE, time); } } failed: gtk_drag_finish (context, FALSE, FALSE, time); }