[gimp] app: implement proper manual kerning, but disable it for now
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: implement proper manual kerning, but disable it for now
- Date: Sun, 28 Feb 2010 19:02:44 +0000 (UTC)
commit 67ccf8c21af66b6a26acfa8cb3b381ffe07eef97
Author: Michael Natterer <mitch gimp org>
Date: Sun Feb 28 19:40:15 2010 +0100
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...
app/widgets/gimptextbuffer-serialize.c | 81 ++++++++++++++++++++++++++++++++
app/widgets/gimptextbuffer-serialize.h | 33 +++++++------
app/widgets/gimptextbuffer.c | 8 +++
3 files changed, 108 insertions(+), 14 deletions(-)
---
diff --git a/app/widgets/gimptextbuffer-serialize.c b/app/widgets/gimptextbuffer-serialize.c
index 4db8ac6..c650a11 100644
--- a/app/widgets/gimptextbuffer-serialize.c
+++ b/app/widgets/gimptextbuffer-serialize.c
@@ -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));
+}
diff --git a/app/widgets/gimptextbuffer-serialize.h b/app/widgets/gimptextbuffer-serialize.h
index b2857c6..05e961c 100644
--- a/app/widgets/gimptextbuffer-serialize.h
+++ b/app/widgets/gimptextbuffer-serialize.h
@@ -26,21 +26,26 @@
#define __GIMP_TEXT_BUFFER_SERIALIZE_H__
-guint8 * gimp_text_buffer_serialize (GtkTextBuffer *register_buffer,
- GtkTextBuffer *content_buffer,
- const GtkTextIter *start,
- const GtkTextIter *end,
- gsize *length,
- gpointer user_data);
+guint8 * gimp_text_buffer_serialize (GtkTextBuffer *register_buffer,
+ GtkTextBuffer *content_buffer,
+ const GtkTextIter *start,
+ const GtkTextIter *end,
+ gsize *length,
+ gpointer user_data);
+gboolean gimp_text_buffer_deserialize (GtkTextBuffer *register_buffer,
+ GtkTextBuffer *content_buffer,
+ GtkTextIter *iter,
+ const guint8 *data,
+ gsize length,
+ gboolean create_tags,
+ 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);
-gboolean gimp_text_buffer_deserialize (GtkTextBuffer *register_buffer,
- GtkTextBuffer *content_buffer,
- GtkTextIter *iter,
- const guint8 *data,
- gsize length,
- gboolean create_tags,
- gpointer user_data,
- GError **error);
#endif /* __GIMP_TEXT_BUFFER_SERIALIZE_H__ */
diff --git a/app/widgets/gimptextbuffer.c b/app/widgets/gimptextbuffer.c
index 402587f..cab2399 100644
--- a/app/widgets/gimptextbuffer.c
+++ b/app/widgets/gimptextbuffer.c
@@ -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),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]