static void gimp_text_options_editor_notify_font (GimpTextOptions *options, GParamSpec *pspec, GimpTextEditor *editor) { const gchar *font_name; font_name = gimp_context_get_font_name (GIMP_CONTEXT (options)); gimp_text_editor_set_font_name (editor, font_name); }
static void gimp_text_options_notify_font (GimpContext *context, GParamSpec *pspec, GimpText *text) { g_signal_handlers_block_by_func (text, gimp_text_options_notify_text_font, context); g_object_set (text, "font", gimp_context_get_font_name (context), NULL); g_signal_handlers_unblock_by_func (text, gimp_text_options_notify_text_font, context); }
static void gimp_text_style_editor_font_changed (GimpContext *context, GimpFont *font, GimpTextStyleEditor *editor) { GtkTextBuffer *buffer = GTK_TEXT_BUFFER (editor->buffer); GtkTextIter start, end; if (! gtk_text_buffer_get_selection_bounds (buffer, &start, &end)) { return; } gimp_text_buffer_set_font (editor->buffer, &start, &end, gimp_context_get_font_name (context)); }
GtkWidget * gimp_text_options_editor_new (GtkWindow *parent, Gimp *gimp, GimpTextOptions *options, GimpMenuFactory *menu_factory, const gchar *title, GimpText *text, GimpTextBuffer *text_buffer, gdouble xres, gdouble yres) { GtkWidget *editor; const gchar *font_name; g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL); g_return_val_if_fail (GIMP_IS_TEXT_OPTIONS (options), NULL); g_return_val_if_fail (GIMP_IS_MENU_FACTORY (menu_factory), NULL); g_return_val_if_fail (title != NULL, NULL); g_return_val_if_fail (GIMP_IS_TEXT (text), NULL); g_return_val_if_fail (GIMP_IS_TEXT_BUFFER (text_buffer), NULL); editor = gimp_text_editor_new (title, parent, gimp, menu_factory, text, text_buffer, xres, yres); font_name = gimp_context_get_font_name (GIMP_CONTEXT (options)); gimp_text_editor_set_direction (GIMP_TEXT_EDITOR (editor), options->base_dir); gimp_text_editor_set_font_name (GIMP_TEXT_EDITOR (editor), font_name); g_signal_connect_object (editor, "dir-changed", G_CALLBACK (gimp_text_options_editor_dir_changed), options, 0); g_signal_connect_object (options, "notify::base-direction", G_CALLBACK (gimp_text_options_editor_notify_dir), editor, 0); g_signal_connect_object (options, "notify::font", G_CALLBACK (gimp_text_options_editor_notify_font), editor, 0); return editor; }
static void gimp_text_style_editor_font_changed (GimpContext *context, GimpFont *font, GimpTextStyleEditor *editor) { GtkTextBuffer *buffer = GTK_TEXT_BUFFER (editor->buffer); GList *insert_tags; GList *remove_tags; if (gtk_text_buffer_get_has_selection (buffer)) { GtkTextIter start, end; gtk_text_buffer_get_selection_bounds (buffer, &start, &end); gimp_text_buffer_set_font (editor->buffer, &start, &end, gimp_context_get_font_name (context)); } insert_tags = gimp_text_style_editor_list_tags (editor, &remove_tags); gimp_text_buffer_set_insert_tags (editor->buffer, insert_tags, remove_tags); }
/* This function could live in gimptexttool.c also. * But it takes some bloat out of that file... */ void gimp_text_options_connect_text (GimpTextOptions *options, GimpText *text) { GimpContext *context; GimpRGB color; g_return_if_fail (GIMP_IS_TEXT_OPTIONS (options)); g_return_if_fail (GIMP_IS_TEXT (text)); context = GIMP_CONTEXT (options); gimp_context_get_foreground (context, &color); gimp_config_sync (G_OBJECT (options), G_OBJECT (text), 0); g_object_set (text, "color", &color, "font", gimp_context_get_font_name (context), NULL); gimp_config_connect (G_OBJECT (options), G_OBJECT (text), NULL); g_signal_connect_object (options, "notify::font", G_CALLBACK (gimp_text_options_notify_font), text, 0); g_signal_connect_object (text, "notify::font", G_CALLBACK (gimp_text_options_notify_text_font), options, 0); g_signal_connect_object (options, "notify::foreground", G_CALLBACK (gimp_text_options_notify_color), text, 0); g_signal_connect_object (text, "notify::color", G_CALLBACK (gimp_text_options_notify_text_color), options, 0); }
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); }