[clutter] a11y: factor some PangoAttributes->AtkTextAttributes mappings
- From: Alejandro PiÃeiro Iglesias <apinheiro src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [clutter] a11y: factor some PangoAttributes->AtkTextAttributes mappings
- Date: Wed, 6 Jul 2011 15:50:45 +0000 (UTC)
commit 49d43174208421141aa967380c042b1703b53c57
Author: Philippe Normand <pnormand igalia com>
Date: Wed Feb 2 15:34:40 2011 +0100
a11y: factor some PangoAttributes->AtkTextAttributes mappings
That code can then be used by get_run_attributes and
get_default_attributes implementations.
clutter/cally/cally-text.c | 154 ++++++++++++++++++++++++++++----------------
1 files changed, 98 insertions(+), 56 deletions(-)
---
diff --git a/clutter/cally/cally-text.c b/clutter/cally/cally-text.c
index ecaff6b..98ef465 100644
--- a/clutter/cally/cally-text.c
+++ b/clutter/cally/cally-text.c
@@ -174,8 +174,7 @@ static AtkAttributeSet* _cally_misc_add_attribute (AtkAttributeSet *attrib_s
gchar *value);
static AtkAttributeSet* _cally_misc_layout_get_run_attributes (AtkAttributeSet *attrib_set,
- PangoLayout *layout,
- gchar *text,
+ ClutterText *clutter_text,
gint offset,
gint *start_offset,
gint *end_offset);
@@ -733,7 +732,7 @@ cally_text_set_selection (AtkText *text,
static AtkAttributeSet*
cally_text_get_run_attributes (AtkText *text,
- gint offset,
+ gint offset,
gint *start_offset,
gint *end_offset)
{
@@ -750,8 +749,7 @@ cally_text_get_run_attributes (AtkText *text,
clutter_text = CLUTTER_TEXT (actor);
at_set = _cally_misc_layout_get_run_attributes (at_set,
- clutter_text_get_layout (clutter_text),
- (gchar*)clutter_text_get_text (clutter_text),
+ clutter_text,
offset,
start_offset,
end_offset);
@@ -1101,70 +1099,47 @@ _cally_misc_add_attribute (AtkAttributeSet *attrib_set,
return return_set;
}
+
+static gint
+_cally_atk_attribute_lookup_func (gconstpointer data,
+ gconstpointer user_data)
+{
+ AtkTextAttribute attr = (AtkTextAttribute) user_data;
+ AtkAttribute *at = (AtkAttribute *) data;
+ if (!g_strcmp0 (at->name, atk_text_attribute_get_name (attr)))
+ return 0;
+ return -1;
+}
+
+static gboolean
+_cally_misc_find_atk_attribute (AtkAttributeSet *attrib_set,
+ AtkTextAttribute attr)
+{
+ GSList* result = g_slist_find_custom ((GSList*) attrib_set,
+ (gconstpointer) attr,
+ _cally_atk_attribute_lookup_func);
+ return (result != NULL);
+}
+
/**
- * _cally_misc_layout_get_run_attributes:
+ * _cally_misc_layout_atk_attributes_from_pango:
*
- * Reimplementation of gail_misc_layout_get_run_attributes (check this
- * function for more documentation).
+ * Store the pango attributes as their ATK equivalent in an existing
+ * #AtkAttributeSet.
*
- * Returns: A pointer to the #AtkAttributeSet.
+ * Returns: A pointer to the updated #AtkAttributeSet.
**/
static AtkAttributeSet*
-_cally_misc_layout_get_run_attributes (AtkAttributeSet *attrib_set,
- PangoLayout *layout,
- gchar *text,
- gint offset,
- gint *start_offset,
- gint *end_offset)
+_cally_misc_layout_atk_attributes_from_pango (AtkAttributeSet *attrib_set,
+ PangoAttrIterator *iter)
{
- PangoAttrIterator *iter;
- PangoAttrList *attr;
PangoAttrString *pango_string;
PangoAttrInt *pango_int;
PangoAttrColor *pango_color;
PangoAttrLanguage *pango_lang;
PangoAttrFloat *pango_float;
- gint index, start_index, end_index;
- gboolean is_next = TRUE;
gchar *value = NULL;
- glong len;
- len = g_utf8_strlen (text, -1);
- /* Grab the attributes of the PangoLayout, if any */
- if ((attr = pango_layout_get_attributes (layout)) == NULL)
- {
- *start_offset = 0;
- *end_offset = len;
- return attrib_set;
- }
- iter = pango_attr_list_get_iterator (attr);
- /* Get invariant range offsets */
- /* If offset out of range, set offset in range */
- if (offset > len)
- offset = len;
- else if (offset < 0)
- offset = 0;
-
- index = g_utf8_offset_to_pointer (text, offset) - text;
- pango_attr_iterator_range (iter, &start_index, &end_index);
- while (is_next)
- {
- if (index >= start_index && index < end_index)
- {
- *start_offset = g_utf8_pointer_to_offset (text,
- text + start_index);
- if (end_index == G_MAXINT)
- /* Last iterator */
- end_index = len;
-
- *end_offset = g_utf8_pointer_to_offset (text,
- text + end_index);
- break;
- }
- is_next = pango_attr_iterator_next (iter);
- pango_attr_iterator_range (iter, &start_index, &end_index);
- }
- /* Get attributes */
if ((pango_string = (PangoAttrString*) pango_attr_iterator_get (iter,
PANGO_ATTR_FAMILY)) != NULL)
{
@@ -1270,6 +1245,73 @@ _cally_misc_layout_get_run_attributes (AtkAttributeSet *attrib_set,
ATK_TEXT_ATTR_BG_COLOR,
value);
}
+
+ return attrib_set;
+}
+
+/**
+ * _cally_misc_layout_get_run_attributes:
+ *
+ * Reimplementation of gail_misc_layout_get_run_attributes (check this
+ * function for more documentation).
+ *
+ * Returns: A pointer to the #AtkAttributeSet.
+ **/
+static AtkAttributeSet*
+_cally_misc_layout_get_run_attributes (AtkAttributeSet *attrib_set,
+ ClutterText *clutter_text,
+ gint offset,
+ gint *start_offset,
+ gint *end_offset)
+{
+ PangoAttrIterator *iter;
+ PangoAttrList *attr;
+ gint index, start_index, end_index;
+ gboolean is_next = TRUE;
+ glong len;
+ PangoLayout *layout = clutter_text_get_layout (clutter_text);
+ gchar *text = (gchar*) clutter_text_get_text (clutter_text);
+
+ len = g_utf8_strlen (text, -1);
+ /* Grab the attributes of the PangoLayout, if any */
+ if ((attr = pango_layout_get_attributes (layout)) == NULL)
+ {
+ *start_offset = 0;
+ *end_offset = len;
+ }
+ iter = pango_attr_list_get_iterator (attr);
+ /* Get invariant range offsets */
+ /* If offset out of range, set offset in range */
+ if (offset > len)
+ offset = len;
+ else if (offset < 0)
+ offset = 0;
+
+ index = g_utf8_offset_to_pointer (text, offset) - text;
+ pango_attr_iterator_range (iter, &start_index, &end_index);
+ while (is_next)
+ {
+ if (index >= start_index && index < end_index)
+ {
+ *start_offset = g_utf8_pointer_to_offset (text,
+ text + start_index);
+ if (end_index == G_MAXINT)
+ /* Last iterator */
+ end_index = len;
+
+ *end_offset = g_utf8_pointer_to_offset (text,
+ text + end_index);
+ break;
+ }
+ is_next = pango_attr_iterator_next (iter);
+ pango_attr_iterator_range (iter, &start_index, &end_index);
+ }
+
+ /* Get attributes */
+ attrib_set = _cally_misc_layout_atk_attributes_from_pango (attrib_set, iter);
pango_attr_iterator_destroy (iter);
+
return attrib_set;
}
+
+
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]