void gimp_text_buffer_set_color (GimpTextBuffer *buffer, const GtkTextIter *start, const GtkTextIter *end, const GimpRGB *color) { GList *list; g_return_if_fail (GIMP_IS_TEXT_BUFFER (buffer)); g_return_if_fail (start != NULL); g_return_if_fail (end != NULL); if (gtk_text_iter_equal (start, end)) return; gtk_text_buffer_begin_user_action (GTK_TEXT_BUFFER (buffer)); for (list = buffer->color_tags; list; list = g_list_next (list)) { gtk_text_buffer_remove_tag (GTK_TEXT_BUFFER (buffer), list->data, start, end); } if (color) { GtkTextTag *tag = gimp_text_buffer_get_color_tag (buffer, color); gtk_text_buffer_apply_tag (GTK_TEXT_BUFFER (buffer), tag, start, end); } gtk_text_buffer_end_user_action (GTK_TEXT_BUFFER (buffer)); }
GtkTextTag * gimp_text_buffer_name_to_tag (GimpTextBuffer *buffer, const gchar *name, const gchar *attribute, const gchar *value) { g_return_val_if_fail (GIMP_IS_TEXT_BUFFER (buffer), NULL); g_return_val_if_fail (name != NULL, NULL); if (! strcmp (name, "b")) { return buffer->bold_tag; } else if (! strcmp (name, "i")) { return buffer->italic_tag; } else if (! strcmp (name, "u")) { return buffer->underline_tag; } else if (! strcmp (name, "s")) { return buffer->strikethrough_tag; } else if (! strcmp (name, "span") && attribute != NULL && value != NULL) { if (! strcmp (attribute, GIMP_TEXT_ATTR_NAME_SIZE)) { return gimp_text_buffer_get_size_tag (buffer, atoi (value)); } else if (! strcmp (attribute, GIMP_TEXT_ATTR_NAME_BASELINE)) { return gimp_text_buffer_get_baseline_tag (buffer, atoi (value)); } else if (! strcmp (attribute, GIMP_TEXT_ATTR_NAME_KERNING)) { return gimp_text_buffer_get_kerning_tag (buffer, atoi (value)); } else if (! strcmp (attribute, GIMP_TEXT_ATTR_NAME_FONT)) { return gimp_text_buffer_get_font_tag (buffer, value); } else if (! strcmp (attribute, GIMP_TEXT_ATTR_NAME_COLOR)) { GimpRGB color; guint r, g, b; sscanf (value, "#%02x%02x%02x", &r, &g, &b); gimp_rgb_set_uchar (&color, r, g, b); return gimp_text_buffer_get_color_tag (buffer, &color); } } return NULL; }
GList * gimp_text_style_editor_list_tags (GimpTextStyleEditor *editor, GList **remove_tags) { GList *toggles; GList *tags = NULL; g_return_val_if_fail (GIMP_IS_TEXT_STYLE_EDITOR (editor), NULL); g_return_val_if_fail (remove_tags != NULL, NULL); *remove_tags = NULL; for (toggles = editor->toggles; toggles; toggles = g_list_next (toggles)) { GtkTextTag *tag = g_object_get_data (toggles->data, "tag"); if (gtk_toggle_button_get_active (toggles->data)) { tags = g_list_prepend (tags, tag); } else { *remove_tags = g_list_prepend (*remove_tags, tag); } } { GtkTextTag *tag; GList *list; gdouble pixels; gdouble points; for (list = editor->buffer->size_tags; list; list = g_list_next (list)) *remove_tags = g_list_prepend (*remove_tags, list->data); pixels = gimp_size_entry_get_refval (GIMP_SIZE_ENTRY (editor->size_entry), 0); points = gimp_units_to_points (pixels, GIMP_UNIT_PIXEL, editor->resolution_y); tag = gimp_text_buffer_get_size_tag (editor->buffer, PANGO_SCALE * points); tags = g_list_prepend (tags, tag); } { GtkTextTag *tag; GList *list; const gchar *font_name; for (list = editor->buffer->font_tags; list; list = g_list_next (list)) *remove_tags = g_list_prepend (*remove_tags, list->data); font_name = gimp_context_get_font_name (editor->context); tag = gimp_text_buffer_get_font_tag (editor->buffer, font_name); tags = g_list_prepend (tags, tag); } { GtkTextTag *tag; GList *list; GimpRGB color; for (list = editor->buffer->color_tags; list; list = g_list_next (list)) *remove_tags = g_list_prepend (*remove_tags, list->data); gimp_color_button_get_color (GIMP_COLOR_BUTTON (editor->color_button), &color); tag = gimp_text_buffer_get_color_tag (editor->buffer, &color); tags = g_list_prepend (tags, tag); } *remove_tags = g_list_reverse (*remove_tags); return g_list_reverse (tags); }