2 * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved
4 * This file is part of the UI Gadget
5 * Written by Jayoun Lee <airjany@samsung.com>, Jinwoo Nam <jwoo.nam@samsung.com>
7 * PROPRIETARY/CONFIDENTIAL
9 * This software is the confidential and proprietary information of
10 * SAMSUNG ELECTRONICS (Confidential Information).
11 * You shall not disclose such Confidential Information and shall
12 * use it only in accordance with the terms of the license agreement
13 * you entered into with SAMSUNG ELECTRONICS. SAMSUNG make no
14 * representations or warranties about the suitability
15 * of the software, either express or implied, including but not
16 * limited to the implied warranties of merchantability, fitness for a particular purpose, or non-
17 * infringement. SAMSUNG shall not be liable for any damages suffered by licensee as
18 * a result of using, modifying or distributing this software or its derivatives.
25 #include <Elementary.h>
26 #include <ui-gadget-engine.h>
29 #include "ug-efl-engine.h"
33 #define UG_ENGINE_API __attribute__ ((visibility("default")))
36 static void _on_hideonly_cb(void *data, Evas_Object *obj)
38 struct ui_gadget *ug = (struct ui_gadget *)data;
42 if (ug->layout_state == UG_LAYOUT_SHOW) {
43 ug->layout_state = UG_LAYOUT_HIDEEFFECT;
44 edje_object_signal_emit(elm_layout_edje_get(ug->effect_layout),
45 "elm,state,hideonly", "");
49 static void _signal_hideonly_finished(void *data, Evas_Object *obj,
50 const char *emission, const char *source)
52 struct ui_gadget *ug = (struct ui_gadget *)data;
56 evas_object_intercept_hide_callback_del(ug->layout, _on_hideonly_cb);
58 evas_object_hide(ug->layout);
59 elm_object_part_content_unset(ug->effect_layout, "elm.swallow.content");
61 if (ug->layout_state == UG_LAYOUT_NOEFFECT)
64 evas_object_hide(ug->effect_layout);
66 if (ug->layout_state == UG_LAYOUT_DESTROY)
67 edje_object_signal_emit(elm_layout_edje_get(ug->effect_layout),
68 "elm,state,hidealready", "");
70 ug->layout_state = UG_LAYOUT_HIDE;
73 static void _signal_hide_finished(void *data, Evas_Object *obj,
74 const char *emission, const char *source)
76 struct ui_gadget *ug = (struct ui_gadget *)data;
80 evas_object_intercept_hide_callback_del(ug->layout, _on_hideonly_cb);
82 evas_object_hide(ug->layout);
83 elm_object_part_content_unset(ug->effect_layout, "elm.swallow.content");
84 evas_object_hide(ug->effect_layout);
85 evas_object_del(ug->effect_layout);
86 ug->effect_layout = NULL;
89 static void _del_effect_layout(struct ui_gadget *ug)
91 if (!ug || !ug->effect_layout)
94 evas_object_intercept_hide_callback_del(ug->layout, _on_hideonly_cb);
96 evas_object_hide(ug->layout);
97 elm_object_part_content_unset(ug->effect_layout, "elm.swallow.content");
98 evas_object_hide(ug->effect_layout);
99 evas_object_del(ug->effect_layout);
100 ug->effect_layout = NULL;
103 static void _signal_hidealready_finished(void *data, Evas_Object *obj,
104 const char *emission, const char *source)
106 _del_effect_layout((struct ui_gadget*)data);
109 static void _do_destroy(struct ui_gadget *ug, struct ui_gadget *fv_top)
113 static int depth = 0;
116 child = ug->children;
118 trail = g_slist_next(child);
120 _do_destroy(child->data, fv_top);
126 _DBG("[UG Effect Plug-in] : start destroy. ug(%p), fv_top(%p),"
127 " depth(%d), layout_state(%d)\n",
128 ug, fv_top, depth, ug->layout_state);
129 /* only show transition effect of top view UG */
132 _del_effect_layout(ug);
137 if (ug->layout_state == UG_LAYOUT_SHOW) {
138 evas_object_intercept_hide_callback_del(ug->layout,
140 edje_object_signal_emit(elm_layout_edje_get(ug->effect_layout),
141 "elm,state,hide", "");
142 } else if (ug->layout_state == UG_LAYOUT_HIDE
143 || ug->layout_state == UG_LAYOUT_NOEFFECT) {
144 edje_object_signal_emit(elm_layout_edje_get(ug->effect_layout),
145 "elm,state,hidealready", "");
146 } else if (ug->layout_state == UG_LAYOUT_HIDEEFFECT
147 || ug->layout_state == UG_LAYOUT_SHOWEFFECT) {
148 ug->layout_state = UG_LAYOUT_DESTROY;
150 _ERR("[UG Effect Plug-in] : layout state error!!");
154 static void on_destroy(struct ui_gadget *ug, struct ui_gadget *fv_top)
158 _do_destroy(ug, fv_top);
161 static void _signal_show_finished(void *data, Evas_Object *obj,
162 const char *emission, const char *source)
164 struct ui_gadget *ug = (struct ui_gadget *)data;
168 if (ug->layout_state == UG_LAYOUT_NOEFFECT)
171 if (ug->layout_state == UG_LAYOUT_DESTROY)
172 edje_object_signal_emit(elm_layout_edje_get(ug->effect_layout),
173 "elm,state,hide", "");
175 ug->layout_state = UG_LAYOUT_SHOW;
178 static void on_show_cb(void *data, Evas *e, Evas_Object *obj,
181 struct ui_gadget *ug = (struct ui_gadget *)data;
185 if (ug->layout_state == UG_LAYOUT_NOEFFECT) {
186 evas_object_hide(ug->effect_layout);
187 evas_object_show(ug->layout);
191 if (ug->layout_state == UG_LAYOUT_HIDE
192 || ug->layout_state == UG_LAYOUT_INIT) {
193 ug->layout_state = UG_LAYOUT_SHOWEFFECT;
194 evas_object_show(ug->effect_layout);
195 elm_object_part_content_set(ug->effect_layout, "elm.swallow.content",
197 evas_object_intercept_hide_callback_add(ug->layout,
198 _on_hideonly_cb, ug);
199 edje_object_signal_emit(elm_layout_edje_get(ug->effect_layout),
200 "elm,state,show", "");
204 static void *on_create(void *win, struct ui_gadget *ug,
205 void (*hide_end_cb) (struct ui_gadget * ug))
207 static const char *ug_effect_edj_name = "/usr/share/edje/ug_effect.edj";
209 Evas_Object *ly = elm_layout_add((Evas_Object *) win);
214 evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND,
216 elm_win_resize_object_add((Evas_Object *) win, ly);
217 elm_layout_file_set(ly, ug_effect_edj_name, "ug_effect");
218 evas_object_show(ly);
220 evas_object_hide(ug->layout);
221 edje_object_signal_callback_add(elm_layout_edje_get(ly),
222 "elm,action,hide,finished", "",
223 _signal_hide_finished, ug);
224 edje_object_signal_callback_add(elm_layout_edje_get(ly),
225 "elm,action,hide,finished", "",
226 (Edje_Signal_Cb) hide_end_cb, ug);
227 edje_object_signal_callback_add(elm_layout_edje_get(ly),
228 "elm,action,hidealready,finished", "",
229 _signal_hidealready_finished, ug);
230 edje_object_signal_callback_add(elm_layout_edje_get(ly),
231 "elm,action,hidealready,finished", "",
232 (Edje_Signal_Cb) hide_end_cb, ug);
233 edje_object_signal_callback_add(elm_layout_edje_get(ly),
234 "elm,action,hideonly,finished", "",
235 _signal_hideonly_finished, ug);
236 edje_object_signal_callback_add(elm_layout_edje_get(ly),
237 "elm,action,show,finished", "",
238 _signal_show_finished, ug);
240 evas_object_event_callback_add(ug->layout, EVAS_CALLBACK_SHOW,
243 ug->layout_state = UG_LAYOUT_INIT;
248 UG_ENGINE_API int UG_ENGINE_INIT(struct ug_engine_ops *ops)
253 ops->create = on_create;
254 ops->destroy = on_destroy;
259 UG_ENGINE_API void UG_ENGINE_EXIT(struct ug_engine_ops *ops)