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 EailMap implementation
25 #include <Elementary.h>
28 #include "eail_utils.h"
31 * @brief 'press' action name
33 #define EAIL_MAP_ACTION_PRESS "press"
36 * @brief 'scroll up' action name
38 #define EAIL_MAP_ACTION_SCROLL_UP "scroll_up"
41 * @brief 'scroll down' action name
43 #define EAIL_MAP_ACTION_SCROLL_DOWN "scroll_down"
46 * @brief 'scroll left' action name
48 #define EAIL_MAP_ACTION_SCROLL_LEFT "scroll_left"
51 * @brief 'scroll right' action name
53 #define EAIL_MAP_ACTION_SCROLL_RIGHT "scroll_right"
56 * @brief 'zoom in' action name
58 #define EAIL_MAP_ACTION_ZOOM_IN "zoom_in"
61 * @brief 'zoom out' action name
63 #define EAIL_MAP_ACTION_ZOOM_OUT "zoom_out"
66 * @brief Zoom increment
68 #define EAIL_MAP_ZOOM_STEP 1
70 static void akt_image_interface_init(AtkImageIface *iface);
73 * @brief EailMap type definition
75 G_DEFINE_TYPE_WITH_CODE(EailMap,
78 G_IMPLEMENT_INTERFACE(ATK_TYPE_IMAGE,
79 akt_image_interface_init)) ;
81 static void eail_map_set_actions(AtkObject *obj);
84 * @brief EailMap initializer
86 * @param object AtkObject instance
87 * @param data initialization data
90 eail_map_initialize(AtkObject *object, gpointer data)
92 ATK_OBJECT_CLASS(eail_map_parent_class)->initialize(object, data);
93 object->role = ATK_ROLE_IMAGE_MAP;
95 eail_map_set_actions(object);
99 * @brief EailMap finalizer
101 * @param object GObject instance
104 eail_map_finalize(GObject *object)
106 EailMap *map = EAIL_MAP(object);
107 eina_stringshare_del(map->name);
109 G_OBJECT_CLASS(eail_map_parent_class)->finalize(object);
113 * @brief Gets obj's name
115 * @param object AtkObject instance
116 * @return string containing obj's name if a name is assigned, map path otherwise
119 eail_map_name_get(AtkObject *object)
123 const gchar *atk_name = NULL;
125 /* returning name from ATK default implementation if available */
126 atk_name = ATK_OBJECT_CLASS(eail_map_parent_class)->get_name(object);
130 g_return_val_if_fail(EAIL_IS_MAP(object), NULL);
132 map = EAIL_MAP(object);
133 if (map->name) return map->name;
135 widget = eail_widget_get_widget(EAIL_WIDGET(map));
136 if (!widget) return NULL;
139 eina_stringshare_printf("Map(%s)",
140 elm_map_source_get(widget,
141 ELM_MAP_SOURCE_TYPE_NAME));
146 * @brief EailMap instance initializer
148 * @param map EailMap instance
151 eail_map_init(EailMap *map)
157 * @brief EailMap class initializer
159 * @param klass EailMapClass instance
162 eail_map_class_init(EailMapClass *klass)
164 AtkObjectClass *atk_class = ATK_OBJECT_CLASS(klass);
165 GObjectClass *g_object_class = G_OBJECT_CLASS(klass);
167 atk_class->initialize = eail_map_initialize;
168 atk_class->get_name = eail_map_name_get;
170 g_object_class->finalize = eail_map_finalize;
174 * @brief Gets image size
176 * Image size is the same as window size
178 * @param image AtkImage instance
179 * @param [out] width image width or -1 if the value cannot be obtained
180 * @param [out] height image height or -1 if the value cannot be obtained
183 eail_map_image_size_get(AtkImage *image, gint *width, gint *height)
185 atk_component_get_size(ATK_COMPONENT(image), width, height);
189 * @brief AtkImage interface initializer
191 * @param iface AtkImageIface instance
194 akt_image_interface_init(AtkImageIface *iface)
198 iface->get_image_size = eail_map_image_size_get;
202 * AtkAction implementation
206 * @brief 'scroll up' action callback
208 * @param action AtkAction instance
209 * @param data callback data
210 * @return TRUE on success, FALSE otherwise
213 _eail_map_action_scroll_up(AtkAction *action, void *data)
217 g_return_val_if_fail(EAIL_IS_MAP(action), FALSE);
219 widget = eail_widget_get_widget(EAIL_WIDGET(action));
220 return eail_action_scroll_up(widget, NULL);
224 * @brief 'scroll down' action callback
226 * @param action an AtkAction
227 * @param data callback data
228 * @return TRUE on success, FALSE otherwise
231 _eail_map_action_scroll_down(AtkAction *action, void *data)
235 g_return_val_if_fail(EAIL_IS_MAP(action), FALSE);
237 widget = eail_widget_get_widget(EAIL_WIDGET(action));
238 return eail_action_scroll_down(widget, NULL);
242 * @brief 'scroll left' action callback
244 * @param action AtkAction instance
245 * @param data callback data
246 * @return TRUE on success, FALSE otherwise
249 _eail_map_action_scroll_left(AtkAction *action, void *data)
253 g_return_val_if_fail(EAIL_IS_MAP(action), FALSE);
255 widget = eail_widget_get_widget(EAIL_WIDGET(action));
256 return eail_action_scroll_left(widget, NULL);
260 * @brief 'scroll right' action callback
262 * @param action an AtkAction
263 * @param data callback data
264 * @return TRUE on success, FALSE otherwise
267 _eail_map_action_scroll_right(AtkAction *action, void *data)
271 g_return_val_if_fail(EAIL_IS_MAP(action), FALSE);
273 widget = eail_widget_get_widget(EAIL_WIDGET(action));
274 return eail_action_scroll_right(widget, NULL);
278 * @brief 'zoom in' action callback
280 * @param action AtkAction instance
281 * @param data data passed to callback
282 * @return TRUE on success, FALSE otherwise
285 _eail_map_action_zoom_in(AtkAction *action, void *data)
290 g_return_val_if_fail(EAIL_IS_MAP(action), FALSE);
292 widget = eail_widget_get_widget(EAIL_WIDGET(action));
293 if (!widget) return FALSE;
295 new_zoom = elm_map_zoom_get(widget) + EAIL_MAP_ZOOM_STEP;
296 elm_map_zoom_set(widget, new_zoom);
302 * @brief 'zoom out' action callback
304 * @param action AtkAction instance
305 * @param data data passed to callback
306 * @return TRUE on success, FALSE otherwise
309 _eail_map_action_zoom_out(AtkAction *action, void *data)
314 g_return_val_if_fail(EAIL_IS_MAP(action), FALSE);
315 widget = eail_widget_get_widget(EAIL_WIDGET(action));
316 if (!widget) return FALSE;
318 new_zoom = elm_map_zoom_get(widget) - EAIL_MAP_ZOOM_STEP;
320 elm_map_zoom_set(widget, new_zoom);
326 * @brief 'press' action callback
328 * @param action AtkAction instance
329 * @param data data passed to callback
330 * @return TRUE on success, FALSE otherwise
333 _eail_map_action_press(AtkAction *action, void *data)
337 g_return_val_if_fail(EAIL_IS_MAP(action), FALSE);
339 widget = eail_widget_get_widget(EAIL_WIDGET(action));
340 if (!widget) return FALSE;
342 evas_object_smart_callback_call(widget, "press", NULL);
347 * @brief Sets EailMap actions
349 * @param obj AtkObject instance
352 eail_map_set_actions(AtkObject *obj)
354 eail_action_widget_action_append(EAIL_ACTION_WIDGET(obj),
355 EAIL_MAP_ACTION_PRESS,
357 _eail_map_action_press);
358 eail_action_widget_action_append(EAIL_ACTION_WIDGET(obj),
359 EAIL_MAP_ACTION_SCROLL_UP,
361 _eail_map_action_scroll_up);
362 eail_action_widget_action_append(EAIL_ACTION_WIDGET(obj),
363 EAIL_MAP_ACTION_SCROLL_DOWN,
365 _eail_map_action_scroll_down);
366 eail_action_widget_action_append(EAIL_ACTION_WIDGET(obj),
367 EAIL_MAP_ACTION_SCROLL_LEFT,
369 _eail_map_action_scroll_left);
370 eail_action_widget_action_append(EAIL_ACTION_WIDGET(obj),
371 EAIL_MAP_ACTION_SCROLL_RIGHT,
373 _eail_map_action_scroll_right);
374 eail_action_widget_action_append(EAIL_ACTION_WIDGET(obj),
375 EAIL_MAP_ACTION_ZOOM_IN,
377 _eail_map_action_zoom_in);
378 eail_action_widget_action_append(EAIL_ACTION_WIDGET(obj),
379 EAIL_MAP_ACTION_ZOOM_OUT,
381 _eail_map_action_zoom_out);