[gimp] app: add utility functions for getting GtkTextTag properties



commit a6b2d102f315f11e2dcc9c092ca0640b6920f884
Author: Michael Natterer <mitch gimp org>
Date:   Sat Apr 3 18:02:14 2010 +0200

    app: add utility functions for getting GtkTextTag properties
    
    and also #define the names of the properties we (ab)use, so we don't
    have to use magic strings all over the place, and we don't have to use
    g_object_get() either.

 app/widgets/Makefile.am           |    2 +
 app/widgets/gimptextbuffer.c      |  110 ++++++++++--------------------------
 app/widgets/gimptextstyleeditor.c |   17 ++----
 app/widgets/gimptexttag.c         |   76 +++++++++++++++++++++++++
 app/widgets/gimptexttag.h         |   39 +++++++++++++
 5 files changed, 153 insertions(+), 91 deletions(-)
---
diff --git a/app/widgets/Makefile.am b/app/widgets/Makefile.am
index 331c80d..c42a2e4 100644
--- a/app/widgets/Makefile.am
+++ b/app/widgets/Makefile.am
@@ -306,6 +306,8 @@ libappwidgets_a_sources = \
 	gimptextproxy.h			\
 	gimptextstyleeditor.c		\
 	gimptextstyleeditor.h		\
+	gimptexttag.c			\
+	gimptexttag.h			\
 	gimpthumbbox.c			\
 	gimpthumbbox.h			\
 	gimptoggleaction.c		\
diff --git a/app/widgets/gimptextbuffer.c b/app/widgets/gimptextbuffer.c
index 09d62c6..99b7fe8 100644
--- a/app/widgets/gimptextbuffer.c
+++ b/app/widgets/gimptextbuffer.c
@@ -47,6 +47,7 @@
 
 #include "gimptextbuffer.h"
 #include "gimptextbuffer-serialize.h"
+#include "gimptexttag.h"
 
 #include "gimp-intl.h"
 
@@ -344,9 +345,7 @@ gimp_text_buffer_get_iter_size (GimpTextBuffer    *buffer,
       if (gtk_text_iter_has_tag (iter, tag))
         {
           if (size)
-            g_object_get (tag,
-                          "size", size,
-                          NULL);
+            *size = gimp_text_tag_get_size (tag);
 
           return tag;
         }
@@ -368,15 +367,9 @@ gimp_text_buffer_get_size_tag (GimpTextBuffer *buffer,
 
   for (list = buffer->size_tags; list; list = g_list_next (list))
     {
-      gint tag_size;
-
       tag = list->data;
 
-      g_object_get (tag,
-                    "size", &tag_size,
-                    NULL);
-
-      if (tag_size == size)
+      if (size == gimp_text_tag_get_size (tag))
         return tag;
     }
 
@@ -384,7 +377,7 @@ gimp_text_buffer_get_size_tag (GimpTextBuffer *buffer,
 
   tag = gtk_text_buffer_create_tag (GTK_TEXT_BUFFER (buffer),
                                     name,
-                                    "size", size,
+                                    GIMP_TEXT_PROP_NAME_SIZE, size,
                                     NULL);
 
   buffer->size_tags = g_list_prepend (buffer->size_tags, tag);
@@ -512,9 +505,7 @@ gimp_text_buffer_get_iter_baseline (GimpTextBuffer    *buffer,
       if (gtk_text_iter_has_tag (iter, tag))
         {
           if (baseline)
-            g_object_get (tag,
-                          "rise", baseline,
-                          NULL);
+            *baseline = gimp_text_tag_get_baseline (tag);
 
           return tag;
         }
@@ -536,15 +527,9 @@ gimp_text_buffer_get_baseline_tag (GimpTextBuffer *buffer,
 
   for (list = buffer->baseline_tags; list; list = g_list_next (list))
     {
-      gint tag_baseline;
-
       tag = list->data;
 
-      g_object_get (tag,
-                    "rise", &tag_baseline,
-                    NULL);
-
-      if (tag_baseline == baseline)
+      if (baseline == gimp_text_tag_get_baseline (tag))
         return tag;
     }
 
@@ -552,7 +537,7 @@ gimp_text_buffer_get_baseline_tag (GimpTextBuffer *buffer,
 
   tag = gtk_text_buffer_create_tag (GTK_TEXT_BUFFER (buffer),
                                     name,
-                                    "rise", baseline,
+                                    GIMP_TEXT_PROP_NAME_BASELINE, baseline,
                                     NULL);
 
   buffer->baseline_tags = g_list_prepend (buffer->baseline_tags, tag);
@@ -680,9 +665,7 @@ gimp_text_buffer_get_iter_kerning (GimpTextBuffer    *buffer,
       if (gtk_text_iter_has_tag (iter, tag))
         {
           if (kerning)
-            g_object_get (tag,
-                          "rise", kerning, /* FIXME */
-                          NULL);
+            *kerning = gimp_text_tag_get_kerning (tag);
 
           return tag;
         }
@@ -704,15 +687,9 @@ gimp_text_buffer_get_kerning_tag (GimpTextBuffer *buffer,
 
   for (list = buffer->kerning_tags; list; list = g_list_next (list))
     {
-      gint tag_kerning;
-
       tag = list->data;
 
-      g_object_get (tag,
-                    "rise", &tag_kerning, /* FIXME */
-                    NULL);
-
-      if (tag_kerning == kerning)
+      if (kerning == gimp_text_tag_get_kerning (tag))
         return tag;
     }
 
@@ -720,7 +697,7 @@ gimp_text_buffer_get_kerning_tag (GimpTextBuffer *buffer,
 
   tag = gtk_text_buffer_create_tag (GTK_TEXT_BUFFER (buffer),
                                     name,
-                                    "rise", kerning, /* FIXME */
+                                    GIMP_TEXT_PROP_NAME_KERNING, kerning,
                                     NULL);
 
   buffer->kerning_tags = g_list_prepend (buffer->kerning_tags, tag);
@@ -848,9 +825,7 @@ gimp_text_buffer_get_iter_font (GimpTextBuffer     *buffer,
       if (gtk_text_iter_has_tag (iter, tag))
         {
           if (font)
-            g_object_get (tag,
-                          "font", font,
-                          NULL);
+            *font = gimp_text_tag_get_font (tag);
 
           return tag;
         }
@@ -876,9 +851,7 @@ gimp_text_buffer_get_font_tag (GimpTextBuffer *buffer,
 
       tag = list->data;
 
-      g_object_get (tag,
-                    "font", &tag_font,
-                    NULL);
+      tag_font = gimp_text_tag_get_font (tag);
 
       if (! strcmp (font, tag_font))
         {
@@ -935,6 +908,13 @@ gimp_text_buffer_set_font (GimpTextBuffer    *buffer,
   gtk_text_buffer_end_user_action (GTK_TEXT_BUFFER (buffer));
 }
 
+/*  Pango markup attribute names  */
+
+#define GIMP_TEXT_ATTR_NAME_SIZE     "size"
+#define GIMP_TEXT_ATTR_NAME_BASELINE "rise"
+#define GIMP_TEXT_ATTR_NAME_KERNING  "letter_spacing"
+#define GIMP_TEXT_ATTR_NAME_FONT     "font"
+
 const gchar *
 gimp_text_buffer_tag_to_name (GimpTextBuffer  *buffer,
                               GtkTextTag      *tag,
@@ -969,68 +949,40 @@ gimp_text_buffer_tag_to_name (GimpTextBuffer  *buffer,
   else if (g_list_find (buffer->size_tags, tag))
     {
       if (attribute)
-        *attribute = "size";
+        *attribute = GIMP_TEXT_ATTR_NAME_SIZE;
 
       if (value)
-        {
-          gint size;
-
-          g_object_get (tag,
-                        "size", &size,
-                        NULL);
-
-          *value = g_strdup_printf ("%d", size);
-        }
+        *value = g_strdup_printf ("%d", gimp_text_tag_get_size (tag));
 
       return "span";
     }
   else if (g_list_find (buffer->baseline_tags, tag))
     {
       if (attribute)
-        *attribute = "rise";
+        *attribute = GIMP_TEXT_ATTR_NAME_BASELINE;
 
       if (value)
-        {
-          gint baseline;
-
-          g_object_get (tag,
-                        "rise", &baseline,
-                        NULL);
-
-          *value = g_strdup_printf ("%d", baseline);
-        }
+        *value = g_strdup_printf ("%d", gimp_text_tag_get_baseline (tag));
 
       return "span";
     }
   else if (g_list_find (buffer->kerning_tags, tag))
     {
       if (attribute)
-        *attribute = "letter_spacing";
+        *attribute = GIMP_TEXT_ATTR_NAME_KERNING;
 
       if (value)
-        {
-          gint kerning;
-
-          g_object_get (tag,
-                        "rise", &kerning, /* FIXME */
-                        NULL);
-
-          *value = g_strdup_printf ("%d", kerning);
-        }
+        *value = g_strdup_printf ("%d", gimp_text_tag_get_kerning (tag));
 
       return "span";
     }
   else if (g_list_find (buffer->font_tags, tag))
     {
       if (attribute)
-        *attribute = "font";
+        *attribute = GIMP_TEXT_ATTR_NAME_FONT;
 
       if (value)
-        {
-          g_object_get (tag,
-                        "font", value,
-                        NULL);
-        }
+        *value = gimp_text_tag_get_font (tag);
 
       return "span";
     }
@@ -1067,19 +1019,19 @@ gimp_text_buffer_name_to_tag (GimpTextBuffer *buffer,
            attribute != NULL       &&
            value     != NULL)
     {
-      if (! strcmp (attribute, "size"))
+      if (! strcmp (attribute, GIMP_TEXT_ATTR_NAME_SIZE))
         {
           return gimp_text_buffer_get_size_tag (buffer, atoi (value));
         }
-      else if (! strcmp (attribute, "rise"))
+      else if (! strcmp (attribute, GIMP_TEXT_ATTR_NAME_BASELINE))
         {
           return gimp_text_buffer_get_baseline_tag (buffer, atoi (value));
         }
-      else if (! strcmp (attribute, "letter_spacing"))
+      else if (! strcmp (attribute, GIMP_TEXT_ATTR_NAME_KERNING))
         {
           return gimp_text_buffer_get_kerning_tag (buffer, atoi (value));
         }
-      else if (! strcmp (attribute, "font"))
+      else if (! strcmp (attribute, GIMP_TEXT_ATTR_NAME_FONT))
         {
           return gimp_text_buffer_get_font_tag (buffer, value);
         }
diff --git a/app/widgets/gimptextstyleeditor.c b/app/widgets/gimptextstyleeditor.c
index 25bd877..a781e9d 100644
--- a/app/widgets/gimptextstyleeditor.c
+++ b/app/widgets/gimptextstyleeditor.c
@@ -37,6 +37,7 @@
 #include "gimpcontainerview.h"
 #include "gimptextbuffer.h"
 #include "gimptextstyleeditor.h"
+#include "gimptexttag.h"
 
 #include "gimp-intl.h"
 
@@ -559,9 +560,7 @@ gimp_text_style_editor_set_font (GimpTextStyleEditor *editor,
   gchar *font = NULL;
 
   if (font_tag)
-    g_object_get (font_tag,
-                  "font", &font,
-                  NULL);
+    font = gimp_text_tag_get_font (font_tag);
 
   g_signal_handlers_block_by_func (editor->context,
                                    gimp_text_style_editor_font_changed,
@@ -649,9 +648,7 @@ gimp_text_style_editor_set_size (GimpTextStyleEditor *editor,
   gint size = 0;
 
   if (size_tag)
-    g_object_get (size_tag,
-                  "size", &size,
-                  NULL);
+    size = gimp_text_tag_get_size (size_tag);
 
   g_signal_handlers_block_by_func (editor->size_adjustment,
                                    gimp_text_style_editor_size_changed,
@@ -697,9 +694,7 @@ gimp_text_style_editor_set_baseline (GimpTextStyleEditor *editor,
   gint baseline = 0;
 
   if (baseline_tag)
-    g_object_get (baseline_tag,
-                  "rise", &baseline,
-                  NULL);
+    baseline = gimp_text_tag_get_baseline (baseline_tag);
 
   g_signal_handlers_block_by_func (editor->baseline_adjustment,
                                    gimp_text_style_editor_baseline_changed,
@@ -742,9 +737,7 @@ gimp_text_style_editor_set_kerning (GimpTextStyleEditor *editor,
   gint kerning = 0;
 
   if (kerning_tag)
-    g_object_get (kerning_tag,
-                  "rise", &kerning, /* FIXME */
-                  NULL);
+    kerning = gimp_text_tag_get_kerning (kerning_tag);
 
   g_signal_handlers_block_by_func (editor->kerning_adjustment,
                                    gimp_text_style_editor_kerning_changed,
diff --git a/app/widgets/gimptexttag.c b/app/widgets/gimptexttag.c
new file mode 100644
index 0000000..81941c2
--- /dev/null
+++ b/app/widgets/gimptexttag.c
@@ -0,0 +1,76 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * GimpTextTag
+ * Copyright (C) 2010  Michael Natterer <mitch gimp org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+
+#include <gtk/gtk.h>
+
+#include "gimptexttag.h"
+
+
+gint
+gimp_text_tag_get_size (GtkTextTag *tag)
+{
+  gint size;
+
+  g_return_val_if_fail (GTK_IS_TEXT_TAG (tag), 0);
+
+  g_object_get (tag,
+                GIMP_TEXT_PROP_NAME_SIZE, &size,
+                NULL);
+
+  return size;
+}
+
+gint
+gimp_text_tag_get_baseline (GtkTextTag *tag)
+{
+  gint baseline;
+
+  g_object_get (tag,
+                GIMP_TEXT_PROP_NAME_BASELINE, &baseline,
+                NULL);
+
+  return baseline;
+}
+
+gint
+gimp_text_tag_get_kerning (GtkTextTag *tag)
+{
+  gint kerning;
+
+  g_object_get (tag,
+                GIMP_TEXT_PROP_NAME_KERNING, &kerning,
+                NULL);
+
+  return kerning;
+}
+
+gchar *
+gimp_text_tag_get_font (GtkTextTag *tag)
+{
+  gchar *font;
+
+  g_object_get (tag,
+                GIMP_TEXT_PROP_NAME_FONT, &font,
+                NULL);
+
+  return font;
+}
diff --git a/app/widgets/gimptexttag.h b/app/widgets/gimptexttag.h
new file mode 100644
index 0000000..af0c93a
--- /dev/null
+++ b/app/widgets/gimptexttag.h
@@ -0,0 +1,39 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * GimpTextTag
+ * Copyright (C) 2010  Michael Natterer <mitch gimp org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __GIMP_TEXT_TAG_H__
+#define __GIMP_TEXT_TAG_H__
+
+
+/*  GtkTextTag property names  */
+
+#define GIMP_TEXT_PROP_NAME_SIZE     "size"
+#define GIMP_TEXT_PROP_NAME_BASELINE "rise"
+#define GIMP_TEXT_PROP_NAME_KERNING  "rise" /* FIXME */
+#define GIMP_TEXT_PROP_NAME_FONT     "font"
+
+
+gint    gimp_text_tag_get_size     (GtkTextTag *tag);
+gint    gimp_text_tag_get_baseline (GtkTextTag *tag);
+gint    gimp_text_tag_get_kerning  (GtkTextTag *tag);
+gchar * gimp_text_tag_get_font     (GtkTextTag *tag);
+
+
+#endif /* __GIMP_TEXT_TAG_H__ */



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]