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.
This commit is contained in:
Michael Natterer 2010-04-03 18:02:14 +02:00
parent 0313ce3d44
commit a6b2d102f3
5 changed files with 153 additions and 91 deletions

View File

@ -306,6 +306,8 @@ libappwidgets_a_sources = \
gimptextproxy.h \
gimptextstyleeditor.c \
gimptextstyleeditor.h \
gimptexttag.c \
gimptexttag.h \
gimpthumbbox.c \
gimpthumbbox.h \
gimptoggleaction.c \

View File

@ -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);
}

View File

@ -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,

76
app/widgets/gimptexttag.c Normal file
View File

@ -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;
}

39
app/widgets/gimptexttag.h Normal file
View File

@ -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__ */