summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaehyun Cho <jae_hyun.cho@samsung.com>2017-01-19 22:05:45 +0900
committerJaehyun Cho <jae_hyun.cho@samsung.com>2017-01-20 16:32:47 +0900
commitb18f64bdc7f5f240b74cd9132a49c3e3f9db5a30 (patch)
treeb2a832595580ba905cfe6d5d34386608a6929d95
parentc21031808b13eb797e9e61285cd7a390e42cd2ea (diff)
downloadefl-modules-b18f64bdc7f5f240b74cd9132a49c3e3f9db5a30.tar.gz
efl-modules-b18f64bdc7f5f240b74cd9132a49c3e3f9db5a30.tar.bz2
efl-modules-b18f64bdc7f5f240b74cd9132a49c3e3f9db5a30.zip
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.c53
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