2 * Copyright (c) 2013 Samsung Electronics Co., Ltd.
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public License
15 * along with this library; see the file COPYING.LIB. If not, write to
16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA.
22 * @brief EailText implementation
25 #include <Elementary.h>
27 #include "eail_text.h"
28 #include "eail_factory.h"
29 #include "eail_utils.h"
32 * Implementation of the *AtkObject* interface
35 static void atk_text_interface_init(AtkTextIface *iface);
38 * @brief EailText type definition
40 G_DEFINE_TYPE_WITH_CODE(EailText,
43 G_IMPLEMENT_INTERFACE(ATK_TYPE_TEXT,
44 atk_text_interface_init));
47 * @brief EailText initializer
49 * @param obj an AtkObject
50 * @param data initialization data
53 eail_text_initialize(AtkObject *obj, gpointer data)
55 ATK_OBJECT_CLASS(eail_text_parent_class)->initialize(obj, data);
57 obj->role = ATK_ROLE_TEXT;
61 * @brief Gets obj name
63 * Returns obj accessible name if assigned, obj text content otherwise
65 * @param obj an AtkObject
66 * @returns accessible obj name if assigned, obj text content otherwise
69 eail_text_get_name(AtkObject *obj)
74 name = ATK_OBJECT_CLASS(eail_text_parent_class)->get_name(obj);
78 widget = eail_widget_get_widget(EAIL_WIDGET(obj));
80 name = (const gchar*)elm_object_text_get(widget);
86 * @brief EailText instance initializer
88 * @param text an EailText
91 eail_text_init(EailText *text)
96 * @brief EailText class initializer
98 * @param klass an EailTextClass
101 eail_text_class_init(EailTextClass *klass)
103 AtkObjectClass *class = ATK_OBJECT_CLASS(klass);
105 class->initialize = eail_text_initialize;
106 class->get_name = eail_text_get_name;
110 * Implementation of the *AtkText* interface
114 * @brief Gets text bounded by start_offset and end_offset
116 * Use g_free() to free the returned string
118 * @param text an AtkText
119 * @param start_offset start position
120 * @param end_offset end position, -1 for the end of the string
121 * @return string containing text from start_offset up to, but not including
125 eail_text_get_text(AtkText *text,
129 gchar *string = NULL;
130 Evas_Object *widget = eail_widget_get_widget(EAIL_WIDGET(text));
133 string = (gchar *)elm_object_text_get(widget);
135 return eail_get_substring(string, start_offset, end_offset);
139 * @brief Gets character at offset
141 * @param text an AtkText
142 * @param offset character offset
143 * @return character at offset
146 eail_text_get_character_at_offset(AtkText *text,
149 gunichar character = '\0';
150 Evas_Object *widget = eail_widget_get_widget(EAIL_WIDGET(text));
153 character = g_utf8_get_char(
154 g_utf8_offset_to_pointer(elm_object_text_get(widget), offset));
160 * @brief Gets text length
162 * @param text an AtkText
163 * @return text length
166 eail_text_get_character_count(AtkText *text)
169 const gchar *string_text = NULL;
171 Evas_Object *widget = eail_widget_get_widget(EAIL_WIDGET(text));
173 if (!widget) return count;
175 string_text = elm_object_text_get(widget);
176 if (!string_text) return count;
178 count = g_utf8_strlen(string_text, -1);
184 * @brief AtkText interface initializer
186 * @param iface an AtkTextIface
189 atk_text_interface_init(AtkTextIface *iface)
191 iface->get_text = eail_text_get_text;
192 iface->get_character_at_offset = eail_text_get_character_at_offset;
193 iface->get_character_count = eail_text_get_character_count;