mirror of https://github.com/GNOME/gimp.git
app: implement proper manual kerning, but disable it for now
because it breaks the invariant that the pango layout used for navigating in the on-canvas editor must be a 1:1 view on the text buffer used for editing. Will have to fix that somehow...
This commit is contained in:
parent
6d176f5a11
commit
67ccf8c21a
|
@ -642,3 +642,84 @@ gimp_text_buffer_deserialize (GtkTextBuffer *register_buffer,
|
|||
|
||||
return retval;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_text_buffer_pre_serialize (GimpTextBuffer *buffer,
|
||||
GtkTextBuffer *content)
|
||||
{
|
||||
GtkTextIter iter;
|
||||
|
||||
g_return_if_fail (GIMP_IS_TEXT_BUFFER (buffer));
|
||||
g_return_if_fail (GTK_IS_TEXT_BUFFER (content));
|
||||
|
||||
gtk_text_buffer_get_start_iter (content, &iter);
|
||||
|
||||
do
|
||||
{
|
||||
GSList *tags = gtk_text_iter_get_tags (&iter);
|
||||
GSList *list;
|
||||
|
||||
for (list = tags; list; list = g_slist_next (list))
|
||||
{
|
||||
GtkTextTag *tag = list->data;
|
||||
|
||||
if (g_list_find (buffer->spacing_tags, tag))
|
||||
{
|
||||
GtkTextIter end;
|
||||
|
||||
gtk_text_buffer_insert_with_tags (content, &iter,
|
||||
"\342\200\215", -1,
|
||||
tag, NULL);
|
||||
|
||||
end = iter;
|
||||
gtk_text_iter_forward_char (&end);
|
||||
|
||||
gtk_text_buffer_remove_tag (content, tag, &iter, &end);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
g_slist_free (tags);
|
||||
}
|
||||
while (gtk_text_iter_forward_char (&iter));
|
||||
}
|
||||
|
||||
void
|
||||
gimp_text_buffer_post_deserialize (GimpTextBuffer *buffer,
|
||||
GtkTextBuffer *content)
|
||||
{
|
||||
GtkTextIter iter;
|
||||
|
||||
g_return_if_fail (GIMP_IS_TEXT_BUFFER (buffer));
|
||||
g_return_if_fail (GTK_IS_TEXT_BUFFER (content));
|
||||
|
||||
gtk_text_buffer_get_start_iter (content, &iter);
|
||||
|
||||
do
|
||||
{
|
||||
GSList *tags = gtk_text_iter_get_tags (&iter);
|
||||
GSList *list;
|
||||
|
||||
for (list = tags; list; list = g_slist_next (list))
|
||||
{
|
||||
GtkTextTag *tag = list->data;
|
||||
|
||||
if (g_list_find (buffer->spacing_tags, tag))
|
||||
{
|
||||
GtkTextIter end;
|
||||
|
||||
gtk_text_iter_forward_char (&iter);
|
||||
gtk_text_buffer_backspace (content, &iter, FALSE, TRUE);
|
||||
|
||||
end = iter;
|
||||
gtk_text_iter_forward_char (&end);
|
||||
|
||||
gtk_text_buffer_apply_tag (content, tag, &iter, &end);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
g_slist_free (tags);
|
||||
}
|
||||
while (gtk_text_iter_forward_char (&iter));
|
||||
}
|
||||
|
|
|
@ -32,7 +32,6 @@ guint8 * gimp_text_buffer_serialize (GtkTextBuffer *register_buffer,
|
|||
const GtkTextIter *end,
|
||||
gsize *length,
|
||||
gpointer user_data);
|
||||
|
||||
gboolean gimp_text_buffer_deserialize (GtkTextBuffer *register_buffer,
|
||||
GtkTextBuffer *content_buffer,
|
||||
GtkTextIter *iter,
|
||||
|
@ -42,5 +41,11 @@ gboolean gimp_text_buffer_deserialize (GtkTextBuffer *register_buffer,
|
|||
gpointer user_data,
|
||||
GError **error);
|
||||
|
||||
void gimp_text_buffer_pre_serialize (GimpTextBuffer *buffer,
|
||||
GtkTextBuffer *content);
|
||||
void gimp_text_buffer_post_deserialize (GimpTextBuffer *buffer,
|
||||
GtkTextBuffer *content);
|
||||
|
||||
|
||||
|
||||
#endif /* __GIMP_TEXT_BUFFER_SERIALIZE_H__ */
|
||||
|
|
|
@ -242,6 +242,10 @@ gimp_text_buffer_set_markup (GimpTextBuffer *buffer,
|
|||
{
|
||||
GtkTextIter start, end;
|
||||
|
||||
#if 0
|
||||
gimp_text_buffer_post_deserialize (buffer, content);
|
||||
#endif
|
||||
|
||||
gtk_text_buffer_get_bounds (content, &start, &end);
|
||||
gtk_text_buffer_get_start_iter (GTK_TEXT_BUFFER (buffer), &insert);
|
||||
|
||||
|
@ -273,6 +277,10 @@ gimp_text_buffer_get_markup (GimpTextBuffer *buffer)
|
|||
|
||||
gtk_text_buffer_insert_range (content, &insert, &start, &end);
|
||||
|
||||
#if 0
|
||||
gimp_text_buffer_pre_serialize (buffer, content);
|
||||
#endif
|
||||
|
||||
gtk_text_buffer_get_bounds (content, &start, &end);
|
||||
|
||||
markup = (gchar *) gtk_text_buffer_serialize (GTK_TEXT_BUFFER (buffer),
|
||||
|
|
Loading…
Reference in New Issue