diff options
author | Jaehyun Cho <jae_hyun.cho@samsung.com> | 2017-01-19 22:05:45 +0900 |
---|---|---|
committer | Jaehyun Cho <jae_hyun.cho@samsung.com> | 2017-01-20 16:32:47 +0900 |
commit | b18f64bdc7f5f240b74cd9132a49c3e3f9db5a30 (patch) | |
tree | b2a832595580ba905cfe6d5d34386608a6929d95 | |
parent | c21031808b13eb797e9e61285cd7a390e42cd2ea (diff) | |
download | efl-modules-b18f64bdc7f5f240b74cd9132a49c3e3f9db5a30.tar.gz efl-modules-b18f64bdc7f5f240b74cd9132a49c3e3f9db5a30.tar.bz2 efl-modules-b18f64bdc7f5f240b74cd9132a49c3e3f9db5a30.zip |
naviframe_effect: Renew map of view when naviframe is resizedsubmit/tizen_unified/20170309.100418submit/tizen_unified/20170308.100419submit/tizen/20170302.063947accepted/tizen/unified/20170309.074839accepted/tizen/mobile/20170302.120951
View geometry should be updated when naviframe geometry is updated.
To update map of each view immediately, map of each view is renew after
view geometry is updated.
Change-Id: If0049d41bc79d96f99ed127ce2a1f094e2c90b0c
-rw-r--r-- | naviframe_effect/naviframe_effect.c | 53 |
1 files changed, 51 insertions, 2 deletions
diff --git a/naviframe_effect/naviframe_effect.c b/naviframe_effect/naviframe_effect.c index a95a92a..2a138ef 100644 --- a/naviframe_effect/naviframe_effect.c +++ b/naviframe_effect/naviframe_effect.c @@ -35,6 +35,7 @@ struct custom_effect { int alpha; }from, to; + double progress; }; static const char *signal_show_finished = "elm,action,show,finished"; @@ -44,10 +45,40 @@ static const char *signal_source = "elm"; typedef struct _nf_data { - Elm_Transit *transit; - const char *signal; + Elm_Transit *transit; + struct custom_effect *effect; + const char *signal; } nf_data; +static void _custom_op(Elm_Transit_Effect *effect, Elm_Transit *transit EINA_UNUSED, double progress); + +static void +_nf_resize_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, + void *event_info EINA_UNUSED) +{ + Evas_Object *view = (Evas_Object *)data; + if (!view) return; + + char key[PATH_MAX] = { 0, }; + snprintf(key, PATH_MAX, "%p", view); + + nf_data *nd = evas_object_data_get(g_nf, key); + if (!nd) return; + + //Update view geomtry based on naviframe geometry. + Evas_Coord x, y, w, h; + evas_object_geometry_get(g_nf, &x, &y, &w, &h); + evas_object_move(view, x, y); + evas_object_resize(view, w, h); + + //Free current map of view after view geometry is updated. + evas_object_map_set(view, NULL); + nd->effect->map = NULL; + + //Renew map of view based on the updated geometry. + _custom_op(nd->effect, NULL, nd->effect->progress); +} + static void _tizen_transit_del_cb(void *data, Elm_Transit *transit EINA_UNUSED) { @@ -60,6 +91,9 @@ _tizen_transit_del_cb(void *data, Elm_Transit *transit EINA_UNUSED) nf_data *nd = evas_object_data_get(g_nf, key); if (!nd) return; + evas_object_event_callback_del_full(g_nf, EVAS_CALLBACK_RESIZE, + _nf_resize_cb, view); + Evas_Coord x, y, w, h; evas_object_geometry_get(g_nf, &x, &y, &w, &h); @@ -118,6 +152,9 @@ _custom_op(Elm_Transit_Effect *effect, Elm_Transit *transit EINA_UNUSED, struct custom_effect *custom_effect = (struct custom_effect *) effect; + //Map of view is freed when naviframe is resized. + if (!custom_effect->map) + custom_effect->map = evas_map_new(4); map = custom_effect->map; evas_map_util_points_populate_from_object_full(map, custom_effect->obj, 0); @@ -131,6 +168,8 @@ _custom_op(Elm_Transit_Effect *effect, Elm_Transit *transit EINA_UNUSED, evas_map_smooth_set(map, EINA_FALSE); evas_object_map_enable_set(custom_effect->obj, EINA_TRUE); evas_object_map_set(custom_effect->obj, map); + + custom_effect->progress = progress; } EAPI Eina_Bool @@ -222,6 +261,7 @@ tizen_pop_deferred_effect_cur_view(Evas_Object *nf, Evas_Object *cur_view) elm_transit_smooth_set(cur_transit, EINA_FALSE); elm_transit_del_cb_set(cur_transit, _tizen_transit_del_cb, cur_view); + cur_nd->effect = cur_effect_context; cur_nd->transit = cur_transit; elm_transit_go(cur_transit); @@ -297,6 +337,7 @@ tizen_pop_deferred_effect_prev_view(Evas_Object *nf, Evas_Object *prev_view) elm_transit_smooth_set(prev_transit, EINA_FALSE); elm_transit_del_cb_set(prev_transit, _tizen_transit_del_cb, prev_view); + prev_nd->effect = prev_effect_context; prev_nd->transit = prev_transit; elm_transit_go(prev_transit); @@ -333,6 +374,9 @@ tizen_pop_deferred_effect(Evas_Object *nf, Evas_Object *view, tizen_pop_deferred_effect_cur_view(nf, view); else tizen_pop_deferred_effect_prev_view(nf, view); + + evas_object_event_callback_add(g_nf, EVAS_CALLBACK_RESIZE, _nf_resize_cb, + view); } EAPI void @@ -389,6 +433,7 @@ tizen_push_deferred_effect_cur_view(Evas_Object *nf, Evas_Object *cur_view) elm_transit_smooth_set(cur_transit, EINA_FALSE); elm_transit_del_cb_set(cur_transit, _tizen_transit_del_cb, cur_view); + cur_nd->effect = cur_effect_context; cur_nd->transit = cur_transit; elm_transit_go(cur_transit); @@ -464,6 +509,7 @@ tizen_push_deferred_effect_new_view(Evas_Object *nf, Evas_Object *new_view) elm_transit_smooth_set(new_transit, EINA_FALSE); elm_transit_del_cb_set(new_transit, _tizen_transit_del_cb, new_view); + new_nd->effect = new_effect_context; new_nd->transit = new_transit; //Make new view visible when push deferred effect begins. @@ -502,6 +548,9 @@ tizen_push_deferred_effect(Evas_Object *nf, Evas_Object *view, tizen_push_deferred_effect_cur_view(nf, view); else tizen_push_deferred_effect_new_view(nf, view); + + evas_object_event_callback_add(g_nf, EVAS_CALLBACK_RESIZE, _nf_resize_cb, + view); } EAPI void |