app: make sure the baseline spinbutton always shows the right value

This commit is contained in:
Michael Natterer 2010-03-31 19:13:46 +02:00
parent ba9b0c12c7
commit 2e1e5393fe
1 changed files with 33 additions and 12 deletions

View File

@ -93,7 +93,7 @@ static void gimp_text_style_editor_set_size (GimpTextStyleEditor *e
static void gimp_text_style_editor_baseline_changed (GtkAdjustment *adjustment,
GimpTextStyleEditor *editor);
static void gimp_text_style_editor_set_baseline (GimpTextStyleEditor *editor,
gint baseline);
GtkTextTag *baseline_tag);
static void gimp_text_style_editor_kerning_changed (GtkAdjustment *adjustment,
GimpTextStyleEditor *editor);
@ -692,8 +692,15 @@ gimp_text_style_editor_baseline_changed (GtkAdjustment *adjustment,
static void
gimp_text_style_editor_set_baseline (GimpTextStyleEditor *editor,
gint baseline)
GtkTextTag *baseline_tag)
{
gint baseline = 0;
if (baseline_tag)
g_object_get (baseline_tag,
"rise", &baseline,
NULL);
g_signal_handlers_block_by_func (editor->baseline_adjustment,
gimp_text_style_editor_baseline_changed,
editor);
@ -780,7 +787,7 @@ gimp_text_style_editor_update_idle (GimpTextStyleEditor *editor)
gboolean kerning_differs = FALSE;
GtkTextTag *font_tag = NULL;
GtkTextTag *size_tag = NULL;
gint baseline;
GtkTextTag *baseline_tag = NULL;
gint kerning;
gtk_text_buffer_get_selection_bounds (buffer, &start, &end);
@ -797,7 +804,8 @@ gimp_text_style_editor_update_idle (GimpTextStyleEditor *editor)
/* and get some initial values */
font_tag = gimp_text_buffer_get_iter_font (editor->buffer, &start, NULL);
size_tag = gimp_text_buffer_get_iter_size (editor->buffer, &start, NULL);
gimp_text_buffer_get_iter_baseline (editor->buffer, &start, &baseline);
baseline_tag = gimp_text_buffer_get_iter_baseline (editor->buffer, &start,
NULL);
gimp_text_buffer_get_iter_kerning (editor->buffer, &start, &kerning);
for (iter = start;
@ -849,12 +857,12 @@ gimp_text_style_editor_update_idle (GimpTextStyleEditor *editor)
if (! baseline_differs)
{
gint tag_baseline;
GtkTextTag *tag;
gimp_text_buffer_get_iter_baseline (editor->buffer, &iter,
&tag_baseline);
tag = gimp_text_buffer_get_iter_baseline (editor->buffer, &iter,
NULL);
if (baseline != tag_baseline)
if (tag != baseline_tag)
baseline_differs = TRUE;
}
@ -883,7 +891,7 @@ gimp_text_style_editor_update_idle (GimpTextStyleEditor *editor)
if (baseline_differs)
gtk_entry_set_text (GTK_ENTRY (editor->baseline_spinbutton), "");
else
gimp_text_style_editor_set_baseline (editor, baseline);
gimp_text_style_editor_set_baseline (editor, baseline_tag);
if (kerning_differs)
gtk_entry_set_text (GTK_ENTRY (editor->kerning_spinbutton), "");
@ -938,6 +946,22 @@ gimp_text_style_editor_update_idle (GimpTextStyleEditor *editor)
if (! list)
gimp_text_style_editor_set_size (editor, NULL);
for (list = editor->buffer->baseline_tags; list; list = g_list_next (list))
{
GtkTextTag *tag = list->data;
if ((g_slist_find (tags, tag) &&
! g_slist_find (tags_on, tag)) ||
g_slist_find (tags_off, tag))
{
gimp_text_style_editor_set_baseline (editor, tag);
break;
}
}
if (! list)
gimp_text_style_editor_set_baseline (editor, NULL);
for (list = editor->toggles; list; list = g_list_next (list))
{
GtkToggleButton *toggle = list->data;
@ -950,9 +974,6 @@ gimp_text_style_editor_update_idle (GimpTextStyleEditor *editor)
g_slist_find (tags_off, tag));
}
gimp_text_buffer_get_iter_baseline (editor->buffer, &cursor, &value);
gimp_text_style_editor_set_baseline (editor, value);
gimp_text_buffer_get_iter_kerning (editor->buffer, &cursor, &value);
gimp_text_style_editor_set_kerning (editor, value);