Commit abd2e78b authored by Michael Natterer's avatar Michael Natterer 😴
Browse files

Bug 683011 - Text tool discards text attributes in the on-canvas dialog...

When font, size or color were changed, set the text buffer's current
insert_tags just as we already do for the bold, italic etc. toggle
buttons.  Changed gimp_text_style_editor_list_tags() to also return
the tags for font, size or color.
parent 76b05c2a
......@@ -357,7 +357,7 @@ gimp_text_buffer_get_iter_size (GimpTextBuffer *buffer,
return NULL;
}
static GtkTextTag *
GtkTextTag *
gimp_text_buffer_get_size_tag (GimpTextBuffer *buffer,
gint size)
{
......@@ -837,7 +837,7 @@ gimp_text_buffer_get_iter_font (GimpTextBuffer *buffer,
return NULL;
}
static GtkTextTag *
GtkTextTag *
gimp_text_buffer_get_font_tag (GimpTextBuffer *buffer,
const gchar *font)
{
......@@ -931,7 +931,7 @@ gimp_text_buffer_get_iter_color (GimpTextBuffer *buffer,
return NULL;
}
static GtkTextTag *
GtkTextTag *
gimp_text_buffer_get_color_tag (GimpTextBuffer *buffer,
const GimpRGB *color)
{
......
......@@ -76,6 +76,8 @@ gboolean gimp_text_buffer_has_markup (GimpTextBuffer *buffer);
GtkTextTag * gimp_text_buffer_get_iter_size (GimpTextBuffer *buffer,
const GtkTextIter *iter,
gint *size);
GtkTextTag * gimp_text_buffer_get_size_tag (GimpTextBuffer *buffer,
gint size);
void gimp_text_buffer_set_size (GimpTextBuffer *buffer,
const GtkTextIter *start,
const GtkTextIter *end,
......@@ -112,6 +114,8 @@ void gimp_text_buffer_change_kerning (GimpTextBuffer *buffer,
GtkTextTag * gimp_text_buffer_get_iter_font (GimpTextBuffer *buffer,
const GtkTextIter *iter,
gchar **font);
GtkTextTag * gimp_text_buffer_get_font_tag (GimpTextBuffer *buffer,
const gchar *font);
void gimp_text_buffer_set_font (GimpTextBuffer *buffer,
const GtkTextIter *start,
const GtkTextIter *end,
......@@ -120,6 +124,8 @@ void gimp_text_buffer_set_font (GimpTextBuffer *buffer,
GtkTextTag * gimp_text_buffer_get_iter_color (GimpTextBuffer *buffer,
const GtkTextIter *iter,
GimpRGB *color);
GtkTextTag * gimp_text_buffer_get_color_tag (GimpTextBuffer *buffer,
const GimpRGB *color);
void gimp_text_buffer_set_color (GimpTextBuffer *buffer,
const GtkTextIter *start,
const GtkTextIter *end,
......
......@@ -57,17 +57,17 @@ enum
};
static void gimp_text_style_editor_constructed (GObject *object);
static void gimp_text_style_editor_dispose (GObject *object);
static void gimp_text_style_editor_finalize (GObject *object);
static void gimp_text_style_editor_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec);
static void gimp_text_style_editor_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec);
static void gimp_text_style_editor_constructed (GObject *object);
static void gimp_text_style_editor_dispose (GObject *object);
static void gimp_text_style_editor_finalize (GObject *object);
static void gimp_text_style_editor_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec);
static void gimp_text_style_editor_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec);
static GtkWidget * gimp_text_style_editor_create_toggle (GimpTextStyleEditor *editor,
GtkTextTag *tag,
......@@ -559,6 +559,54 @@ gimp_text_style_editor_list_tags (GimpTextStyleEditor *editor,
}
}
{
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);
......@@ -623,15 +671,25 @@ gimp_text_style_editor_font_changed (GimpContext *context,
GimpTextStyleEditor *editor)
{
GtkTextBuffer *buffer = GTK_TEXT_BUFFER (editor->buffer);
GtkTextIter start, end;
GList *insert_tags;
GList *remove_tags;
if (! gtk_text_buffer_get_selection_bounds (buffer, &start, &end))
if (gtk_text_buffer_get_has_selection (buffer))
{
return;
GtkTextIter start, end;
gtk_text_buffer_get_selection_bounds (buffer, &start, &end);
gtk_text_buffer_begin_user_action (buffer);
gimp_text_buffer_set_font (editor->buffer, &start, &end,
gimp_context_get_font_name (context));
gtk_text_buffer_end_user_action (buffer);
}
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);
}
static void
......@@ -675,16 +733,26 @@ gimp_text_style_editor_color_changed (GimpColorButton *button,
GimpTextStyleEditor *editor)
{
GtkTextBuffer *buffer = GTK_TEXT_BUFFER (editor->buffer);
GtkTextIter start, end;
GimpRGB color;
GList *insert_tags;
GList *remove_tags;
if (! gtk_text_buffer_get_selection_bounds (buffer, &start, &end))
if (gtk_text_buffer_get_has_selection (buffer))
{
return;
GtkTextIter start, end;
GimpRGB color;
gtk_text_buffer_get_selection_bounds (buffer, &start, &end);
gtk_text_buffer_begin_user_action (buffer);
gimp_color_button_get_color (button, &color);
gimp_text_buffer_set_color (editor->buffer, &start, &end, &color);
gtk_text_buffer_end_user_action (buffer);
}
gimp_color_button_get_color (button, &color);
gimp_text_buffer_set_color (editor->buffer, &start, &end, &color);
insert_tags = gimp_text_style_editor_list_tags (editor, &remove_tags);
gimp_text_buffer_set_insert_tags (editor->buffer, insert_tags, remove_tags);
}
static void
......@@ -779,20 +847,30 @@ gimp_text_style_editor_size_changed (GimpSizeEntry *entry,
GimpTextStyleEditor *editor)
{
GtkTextBuffer *buffer = GTK_TEXT_BUFFER (editor->buffer);
GtkTextIter start, end;
gdouble points;
GList *insert_tags;
GList *remove_tags;
if (! gtk_text_buffer_get_selection_bounds (buffer, &start, &end))
if (gtk_text_buffer_get_has_selection (buffer))
{
return;
}
GtkTextIter start, end;
gdouble points;
points = gimp_units_to_points (gimp_size_entry_get_refval (entry, 0),
GIMP_UNIT_PIXEL,
editor->resolution_y);
gtk_text_buffer_get_selection_bounds (buffer, &start, &end);
gtk_text_buffer_begin_user_action (buffer);
gimp_text_buffer_set_size (editor->buffer, &start, &end,
PANGO_SCALE * points);
points = gimp_units_to_points (gimp_size_entry_get_refval (entry, 0),
GIMP_UNIT_PIXEL,
editor->resolution_y);
gimp_text_buffer_set_size (editor->buffer, &start, &end,
PANGO_SCALE * points);
gtk_text_buffer_end_user_action (buffer);
}
insert_tags = gimp_text_style_editor_list_tags (editor, &remove_tags);
gimp_text_buffer_set_insert_tags (editor->buffer, insert_tags, remove_tags);
}
static void
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment