mirror of https://github.com/GNOME/gimp.git
app: redo the buffer's tag-at-iter APIs and fix editor state update
This commit is contained in:
parent
bea0c7f3d4
commit
1ddef5d375
|
@ -303,10 +303,10 @@ gimp_text_buffer_get_markup (GimpTextBuffer *buffer)
|
|||
return markup;
|
||||
}
|
||||
|
||||
gint
|
||||
gimp_text_buffer_get_baseline (GimpTextBuffer *buffer,
|
||||
const GtkTextIter *iter,
|
||||
GtkTextTag **baseline_tag)
|
||||
GtkTextTag *
|
||||
gimp_text_buffer_get_iter_baseline (GimpTextBuffer *buffer,
|
||||
const GtkTextIter *iter,
|
||||
gint *baseline)
|
||||
{
|
||||
GList *list;
|
||||
|
||||
|
@ -316,21 +316,19 @@ gimp_text_buffer_get_baseline (GimpTextBuffer *buffer,
|
|||
|
||||
if (gtk_text_iter_has_tag (iter, tag))
|
||||
{
|
||||
gint baseline;
|
||||
if (baseline)
|
||||
g_object_get (tag,
|
||||
"rise", baseline,
|
||||
NULL);
|
||||
|
||||
*baseline_tag = tag;
|
||||
|
||||
g_object_get (tag,
|
||||
"rise", &baseline,
|
||||
NULL);
|
||||
|
||||
return baseline;
|
||||
return tag;
|
||||
}
|
||||
}
|
||||
|
||||
*baseline_tag = NULL;
|
||||
if (baseline)
|
||||
*baseline = 0;
|
||||
|
||||
return 0;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static GtkTextTag *
|
||||
|
@ -376,8 +374,8 @@ gimp_text_buffer_change_baseline (GimpTextBuffer *buffer,
|
|||
GtkTextIter iter;
|
||||
GtkTextIter span_start;
|
||||
GtkTextIter span_end;
|
||||
gint span_baseline;
|
||||
GtkTextTag *span_tag;
|
||||
gint span_baseline;
|
||||
|
||||
g_return_if_fail (GIMP_IS_TEXT_BUFFER (buffer));
|
||||
g_return_if_fail (start != NULL);
|
||||
|
@ -386,20 +384,22 @@ gimp_text_buffer_change_baseline (GimpTextBuffer *buffer,
|
|||
if (gtk_text_iter_equal (start, end))
|
||||
return;
|
||||
|
||||
iter = *start;
|
||||
span_start = *start;
|
||||
span_baseline = gimp_text_buffer_get_baseline (buffer, &iter, &span_tag);
|
||||
iter = *start;
|
||||
span_start = *start;
|
||||
span_tag = gimp_text_buffer_get_iter_baseline (buffer, &iter,
|
||||
&span_baseline);
|
||||
|
||||
gtk_text_buffer_begin_user_action (GTK_TEXT_BUFFER (buffer));
|
||||
|
||||
do
|
||||
{
|
||||
gint iter_baseline;
|
||||
GtkTextTag *iter_tag;
|
||||
gint iter_baseline;
|
||||
|
||||
gtk_text_iter_forward_char (&iter);
|
||||
|
||||
iter_baseline = gimp_text_buffer_get_baseline (buffer, &iter, &iter_tag);
|
||||
iter_tag = gimp_text_buffer_get_iter_baseline (buffer, &iter,
|
||||
&iter_baseline);
|
||||
|
||||
span_end = iter;
|
||||
|
||||
|
@ -435,10 +435,10 @@ gimp_text_buffer_change_baseline (GimpTextBuffer *buffer,
|
|||
gtk_text_buffer_end_user_action (GTK_TEXT_BUFFER (buffer));
|
||||
}
|
||||
|
||||
gint
|
||||
gimp_text_buffer_get_spacing (GimpTextBuffer *buffer,
|
||||
const GtkTextIter *iter,
|
||||
GtkTextTag **spacing_tag)
|
||||
GtkTextTag *
|
||||
gimp_text_buffer_get_iter_spacing (GimpTextBuffer *buffer,
|
||||
const GtkTextIter *iter,
|
||||
gint *spacing)
|
||||
{
|
||||
GList *list;
|
||||
|
||||
|
@ -448,21 +448,19 @@ gimp_text_buffer_get_spacing (GimpTextBuffer *buffer,
|
|||
|
||||
if (gtk_text_iter_has_tag (iter, tag))
|
||||
{
|
||||
gint spacing;
|
||||
if (spacing)
|
||||
g_object_get (tag,
|
||||
"rise", spacing, /* FIXME */
|
||||
NULL);
|
||||
|
||||
*spacing_tag = tag;
|
||||
|
||||
g_object_get (tag,
|
||||
"rise", &spacing, /* FIXME */
|
||||
NULL);
|
||||
|
||||
return spacing;
|
||||
return tag;
|
||||
}
|
||||
}
|
||||
|
||||
*spacing_tag = NULL;
|
||||
if (spacing)
|
||||
*spacing = 0;
|
||||
|
||||
return 0;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static GtkTextTag *
|
||||
|
@ -508,8 +506,8 @@ gimp_text_buffer_change_spacing (GimpTextBuffer *buffer,
|
|||
GtkTextIter iter;
|
||||
GtkTextIter span_start;
|
||||
GtkTextIter span_end;
|
||||
gint span_spacing;
|
||||
GtkTextTag *span_tag;
|
||||
gint span_spacing;
|
||||
|
||||
g_return_if_fail (GIMP_IS_TEXT_BUFFER (buffer));
|
||||
g_return_if_fail (start != NULL);
|
||||
|
@ -518,20 +516,22 @@ gimp_text_buffer_change_spacing (GimpTextBuffer *buffer,
|
|||
if (gtk_text_iter_equal (start, end))
|
||||
return;
|
||||
|
||||
iter = *start;
|
||||
span_start = *start;
|
||||
span_spacing = gimp_text_buffer_get_spacing (buffer, &iter, &span_tag);
|
||||
iter = *start;
|
||||
span_start = *start;
|
||||
span_tag = gimp_text_buffer_get_iter_spacing (buffer, &iter,
|
||||
&span_spacing);
|
||||
|
||||
gtk_text_buffer_begin_user_action (GTK_TEXT_BUFFER (buffer));
|
||||
|
||||
do
|
||||
{
|
||||
gint iter_spacing;
|
||||
GtkTextTag *iter_tag;
|
||||
gint iter_spacing;
|
||||
|
||||
gtk_text_iter_forward_char (&iter);
|
||||
|
||||
iter_spacing = gimp_text_buffer_get_spacing (buffer, &iter, &iter_tag);
|
||||
iter_tag = gimp_text_buffer_get_iter_spacing (buffer, &iter,
|
||||
&iter_spacing);
|
||||
|
||||
span_end = iter;
|
||||
|
||||
|
@ -567,10 +567,10 @@ gimp_text_buffer_change_spacing (GimpTextBuffer *buffer,
|
|||
gtk_text_buffer_end_user_action (GTK_TEXT_BUFFER (buffer));
|
||||
}
|
||||
|
||||
gchar *
|
||||
gimp_text_buffer_get_font (GimpTextBuffer *buffer,
|
||||
const GtkTextIter *iter,
|
||||
GtkTextTag **font_tag)
|
||||
GtkTextTag *
|
||||
gimp_text_buffer_get_iter_font (GimpTextBuffer *buffer,
|
||||
const GtkTextIter *iter,
|
||||
gchar **font)
|
||||
{
|
||||
GList *list;
|
||||
|
||||
|
@ -580,19 +580,17 @@ gimp_text_buffer_get_font (GimpTextBuffer *buffer,
|
|||
|
||||
if (gtk_text_iter_has_tag (iter, tag))
|
||||
{
|
||||
gchar *font;
|
||||
if (font)
|
||||
g_object_get (tag,
|
||||
"font", font,
|
||||
NULL);
|
||||
|
||||
*font_tag = tag;
|
||||
|
||||
g_object_get (tag,
|
||||
"font", &font,
|
||||
NULL);
|
||||
|
||||
return font;
|
||||
return tag;
|
||||
}
|
||||
}
|
||||
|
||||
*font_tag = NULL;
|
||||
if (font)
|
||||
*font = NULL;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -69,25 +69,25 @@ void gimp_text_buffer_set_markup (GimpTextBuffer *buffer,
|
|||
const gchar *markup);
|
||||
gchar * gimp_text_buffer_get_markup (GimpTextBuffer *buffer);
|
||||
|
||||
gint gimp_text_buffer_get_baseline (GimpTextBuffer *buffer,
|
||||
GtkTextTag * gimp_text_buffer_get_iter_baseline (GimpTextBuffer *buffer,
|
||||
const GtkTextIter *iter,
|
||||
GtkTextTag **baseline_tag);
|
||||
gint *baseline);
|
||||
void gimp_text_buffer_change_baseline (GimpTextBuffer *buffer,
|
||||
const GtkTextIter *start,
|
||||
const GtkTextIter *end,
|
||||
gint count);
|
||||
|
||||
gint gimp_text_buffer_get_spacing (GimpTextBuffer *buffer,
|
||||
GtkTextTag * gimp_text_buffer_get_iter_spacing (GimpTextBuffer *buffer,
|
||||
const GtkTextIter *iter,
|
||||
GtkTextTag **spacing_tag);
|
||||
gint *spacing);
|
||||
void gimp_text_buffer_change_spacing (GimpTextBuffer *buffer,
|
||||
const GtkTextIter *start,
|
||||
const GtkTextIter *end,
|
||||
gint count);
|
||||
|
||||
gchar * gimp_text_buffer_get_font (GimpTextBuffer *buffer,
|
||||
GtkTextTag * gimp_text_buffer_get_iter_font (GimpTextBuffer *buffer,
|
||||
const GtkTextIter *iter,
|
||||
GtkTextTag **font_tag);
|
||||
gchar **font);
|
||||
void gimp_text_buffer_set_font (GimpTextBuffer *buffer,
|
||||
const GtkTextIter *start,
|
||||
const GtkTextIter *end,
|
||||
|
|
|
@ -566,16 +566,7 @@ gimp_text_style_editor_update (GimpTextStyleEditor *editor)
|
|||
}
|
||||
|
||||
/* and get the initial font tag */
|
||||
for (list = editor->buffer->font_tags; list; list = g_list_next (list))
|
||||
{
|
||||
GtkTextTag *tag = list->data;
|
||||
|
||||
if (gtk_text_iter_has_tag (&start, tag))
|
||||
{
|
||||
font_tag = tag;
|
||||
break;
|
||||
}
|
||||
}
|
||||
font_tag = gimp_text_buffer_get_iter_font (editor->buffer, &start, NULL);
|
||||
|
||||
for (iter = start;
|
||||
gtk_text_iter_in_range (&iter, &start, &end);
|
||||
|
@ -604,26 +595,16 @@ gimp_text_style_editor_update (GimpTextStyleEditor *editor)
|
|||
|
||||
if (! font_differs)
|
||||
{
|
||||
for (list = editor->buffer->font_tags;
|
||||
list;
|
||||
list = g_list_next (list))
|
||||
{
|
||||
GtkTextTag *tag = list->data;
|
||||
GtkTextTag *tag;
|
||||
|
||||
if (gtk_text_iter_has_tag (&iter, tag))
|
||||
{
|
||||
if (tag != font_tag)
|
||||
font_differs = TRUE;
|
||||
tag = gimp_text_buffer_get_iter_font (editor->buffer, &iter,
|
||||
NULL);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (! list && font_tag)
|
||||
if (tag != font_tag)
|
||||
font_differs = TRUE;
|
||||
}
|
||||
|
||||
if (! any_toggle_active || font_differs)
|
||||
if (! any_toggle_active && font_differs)
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue