From: MinJeong Kim Date: Fri, 7 Apr 2017 08:07:24 +0000 (+0900) Subject: Enabled background effect X-Git-Tag: accepted/tizen/unified/20170414.041928~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c30759aaf5009716e62e8922d89270ef032f239e;p=platform%2Fcore%2Fuifw%2Fe-mod-tizen-effect.git Enabled background effect Change-Id: I2ae11d18a69a8592ced214e50c84a84c5efdbad7 Signed-off-by: MinJeong Kim --- diff --git a/data/effect.edc b/data/effect.edc index bd616bb..235d0f7 100644 --- a/data/effect.edc +++ b/data/effect.edc @@ -22,5 +22,10 @@ collections { /* group "e/comp/effects/keyboard" */ /*-----------------------------------------------------*/ #include "group/keyboard.edc" + + /*-----------------------------------------------------*/ + /* group "e/comp/effects/background-zoom" */ + /*-----------------------------------------------------*/ + #include "group/background-zoom.edc" } diff --git a/data/group/background-zoom.edc b/data/group/background-zoom.edc new file mode 100644 index 0000000..9571d35 --- /dev/null +++ b/data/group/background-zoom.edc @@ -0,0 +1,124 @@ +group { name: "e/comp/effects/background-zoom"; + script { + public message(Msg_Type:type, id, ...) { + if ((type == MSG_INT_SET) && (id == 0)) { + /*set state */ + new st; + st = getarg(2); + if (st == 0) + { + set_state(PART:"e.swallow.content", "zoom-in", 0.0); + } + else if (st == 1) + { + set_state(PART:"e.swallow.content", "zoom-out", 0.0); + } + } else if ((type == MSG_INT_SET) && (id == 1)) + { + } + } + } + parts { + part { name: "clipper"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + color: 255 255 255 255; + rel1.relative: -1.0 -1.0; + rel1.offset: -9999 -9999; + rel2.relative: 2.0 2.0; + rel2.offset: 9999 9999; + visible: 1; + } + } + part { name: "shower"; + type: SPACER; + description { state: "default" 0.0; + rel1.relative: 0 0; + rel2.relative: 1 1; + } + } + part { name: "e.swallow.content"; type: SWALLOW; + type: SWALLOW; + clip_to: "clipper"; + description { state: "default" 0.0; + rel1.to: "shower"; + rel2.to: "shower"; + map.on : 0; + } + description { state: "zoom-in" 0.0; + rel1.to: "shower"; + rel2.to: "shower"; + map { + on: 1; + smooth: 1; + zoom.x: 1; + zoom.y: 1; + } + } + description { state: "zoom-in" 1.0; + rel1.to: "shower"; + rel2.to: "shower"; + map { + on: 1; + smooth: 1; + zoom.x: 1.2; + zoom.y: 1.2; + } + } + description { state: "zoom-out" 0.0; + rel1.to: "shower"; + rel2.to: "shower"; + map { + on: 1; + smooth: 1; + zoom.x: 1.2; + zoom.y: 1.2; + } + } + description { state: "zoom-out" 1.0; + rel1.to: "shower"; + rel2.to: "shower"; + map { + on: 1; + smooth: 1; + zoom.x: 1; + zoom.y: 1; + } + } + } + } + programs { + program { name: "zoom-in1"; + signal: "e,action,go"; + source: "e"; + filter: "e.swallow.content" "zoom-in"; + action: STATE_SET "zoom-in" 1.0; + transition: CUBIC_BEZIER 0.3 0.45 0.03 0.41 1.0; + target: "e.swallow.content"; + after: "zoom-in2"; + } + program { name: "zoom-in2"; + action: STATE_SET "default" 0.0; + target: "e.swallow.content"; + after: "done"; + } + program { name: "zoom-out1"; + signal: "e,action,go"; + source: "e"; + filter: "e.swallow.content" "zoom-out"; + action: STATE_SET "zoom-out" 1.0; + transition: CUBIC_BEZIER 0.25 0.45 0.03 0.41 1.0; + target: "e.swallow.content"; + after: "zoom-out2"; + } + program { name: "zoom-out2"; + action: STATE_SET "default" 0.0; + target: "e.swallow.content"; + after: "done"; + } + program { name: "done"; + action: SIGNAL_EMIT "e,action,done" "e"; + } + } +} diff --git a/src/e_mod_effect.c b/src/e_mod_effect.c index 7e4c585..9d0d969 100644 --- a/src/e_mod_effect.c +++ b/src/e_mod_effect.c @@ -14,6 +14,8 @@ typedef struct _E_Effect_Client Evas_Object *under; unsigned int under_ref; + + unsigned int bg_animating; } E_Effect_Client; typedef struct @@ -325,6 +327,8 @@ _eff_object_setup(E_Client *ec, E_Effect_Group group) if (group == E_EFFECT_GROUP_KEYBOARD) e_comp_object_effect_set(ec->frame, "keyboard"); + else if (group == E_EFFECT_GROUP_BACKGROUND) + e_comp_object_effect_set(ec->frame, cfg->bg_effect_style); else { E_Effect_Client *efc = NULL; @@ -451,6 +455,140 @@ _eff_object_under_del(E_Client *ec) efc->under = NULL; } +static E_Client * +_eff_object_background_below_client_get(E_Client *ec, E_Effect_Type type) +{ + Eina_List *stack = NULL, *list, *next; + E_Client *below = NULL; + + if (!_eff) return NULL; + + if (type == E_EFFECT_TYPE_RESTACK_HIDE) + stack = _eff->stack.old; + else + stack = _eff->stack.cur; + + if (!stack) return NULL; + + list = eina_list_data_find_list(stack, ec); + if (!list) return NULL; + + next = list; + while ((next = eina_list_next(next))) + { + below = eina_list_data_get(next); + if (below == ec) + return NULL; + + if (below->vkbd.vkbd) + continue; + + break; + } + + return below; +} + +static void +_eff_object_background_cb_zoom_in_done(void *data, Evas_Object *obj, const char *sig, const char *src) +{ + E_Client *bg_ec; + E_Effect_Client *bg_efc; + + bg_ec = (E_Client *)data; + if (!bg_ec) return; + + bg_efc = _eff_client_get(bg_ec); + if (bg_efc) + bg_efc->bg_animating = 0; + + e_object_unref(E_OBJECT(bg_ec)); +} + +static void +_eff_object_background_cb_zoom_out_done(void *data, Evas_Object *obj, const char *sig, const char *src) +{ + E_Client *bg_ec; + E_Effect_Client *bg_efc; + + bg_ec = (E_Client *)data; + if (!bg_ec) return; + + bg_efc = _eff_client_get(bg_ec); + if (bg_efc) + bg_efc->bg_animating = 0; + + e_object_unref(E_OBJECT(bg_ec)); +} + +static E_Client * +_eff_object_background_setup(E_Client *ec, E_Client *home_ec, E_Effect_Group group, E_Effect_Type type) +{ + E_Comp_Config *cfg; + E_Client *bg_ec = NULL; + E_Effect_Client *bg_efc = NULL; + + cfg = e_comp_config_get(); + if (!cfg) return NULL; + if (!cfg->bg_effect_style) return NULL; + + if (!ec) return NULL; + if (group != E_EFFECT_GROUP_NORMAL) return NULL; + if ((ec->argb) || (ec->effect_type)) return NULL; //need to check opaque? + + if (home_ec) bg_ec = home_ec; + else bg_ec = _eff_object_background_below_client_get(ec, type); + + if (!bg_ec) return NULL; + if (e_object_is_del(E_OBJECT(bg_ec))) return NULL; + if (!bg_ec->animatable) return NULL; + + bg_efc = _eff_client_get(bg_ec); + if (!bg_efc) return NULL; + if ((bg_efc->bg_animating) || + ((bg_efc->animating) && !((bg_ec->launching) && (bg_efc->animating == 1)))) + return NULL; + + switch (type) + { + case E_EFFECT_TYPE_SHOW: + case E_EFFECT_TYPE_RESTACK_SHOW: + if (bg_ec->visibility.obscured != E_VISIBILITY_FULLY_OBSCURED) + { + e_object_ref(E_OBJECT(bg_ec)); + _eff_object_setup(bg_ec, E_EFFECT_GROUP_BACKGROUND); + e_comp_object_effect_params_set(bg_ec->frame, 0, (int[]){0}, 1); + e_comp_object_effect_start(bg_ec->frame, _eff_object_background_cb_zoom_in_done, bg_ec); + bg_efc->bg_animating = 1; + return bg_ec; + } + break; + case E_EFFECT_TYPE_RESTACK_HIDE: + e_object_ref(E_OBJECT(bg_ec)); + _eff_object_setup(bg_ec, E_EFFECT_GROUP_BACKGROUND); + e_comp_object_effect_params_set(bg_ec->frame, 0, (int[]){1}, 1); + e_comp_object_effect_start(bg_ec->frame, _eff_object_background_cb_zoom_out_done, bg_ec); + bg_efc->bg_animating = 1; + return bg_ec; + case E_EFFECT_TYPE_HIDE: + if (bg_ec->visibility.obscured == E_VISIBILITY_FULLY_OBSCURED) + { + e_object_ref(E_OBJECT(bg_ec)); + _eff_object_setup(bg_ec, E_EFFECT_GROUP_BACKGROUND); + e_comp_object_effect_params_set(bg_ec->frame, 0, (int[]){1}, 1); + e_comp_object_effect_start(bg_ec->frame, _eff_object_background_cb_zoom_out_done, bg_ec); + bg_efc->bg_animating = 1; + return bg_ec; + } + break; + default: + /* do nothing */ + break; + } + + return NULL; +} + static void _eff_object_layer_up(E_Client *ec) { @@ -657,6 +795,7 @@ _eff_ref(E_Client *ec) efc->delay_del_ref ++; } + efc->bg_animating = 0; efc->animating++; e_object_ref(E_OBJECT(ec)); efc->ep = e_pixmap_ref(ec->pixmap); @@ -719,7 +858,6 @@ _eff_unref(E_Client *ec) return ec; } - static void _eff_cb_visible_done(void *data, Evas_Object *obj EINA_UNUSED, const char *sig EINA_UNUSED, const char *src EINA_UNUSED) { @@ -779,6 +917,8 @@ _eff_cb_visible(void *data, Evas_Object *obj, const char *signal) e_comp_object_effect_start(ec->frame, _eff_cb_visible_done, ec); + _eff_object_background_setup(ec, NULL, group, E_EFFECT_TYPE_SHOW); + return EINA_TRUE; } @@ -874,6 +1014,7 @@ _eff_cb_hidden(void *data, Evas_Object *obj, const char *signal) _eff_event_send(ec, EINA_TRUE, E_EFFECT_TYPE_HIDE); e_comp_object_effect_start(ec->frame, _eff_cb_hidden_done, ec); + _eff_object_background_setup(ec, NULL, group, E_EFFECT_TYPE_HIDE); return EINA_TRUE; } @@ -1223,6 +1364,7 @@ _eff_cb_restack(void *data, Evas_Object *obj, const char *signal) _eff_event_send(ec, EINA_TRUE, E_EFFECT_TYPE_RESTACK_SHOW); e_comp_object_effect_start(ec->frame, _eff_cb_restack_show_done, ec); + _eff_object_background_setup(ec, NULL, group, E_EFFECT_TYPE_RESTACK_SHOW); } else if (!e_util_strcmp(emission, "e,action,restack,hide")) { @@ -1275,6 +1417,7 @@ _eff_cb_restack(void *data, Evas_Object *obj, const char *signal) _eff_event_send(ec, EINA_TRUE, E_EFFECT_TYPE_RESTACK_HIDE); e_comp_object_effect_start(ec->frame, _eff_cb_restack_hide_done, ec); + _eff_object_background_setup(ec, ec_home, group, E_EFFECT_TYPE_RESTACK_HIDE); } else if (!e_util_strcmp(emission, "e,action,restack,finish")) { diff --git a/src/e_mod_effect.h b/src/e_mod_effect.h index b7074ba..8044dc1 100644 --- a/src/e_mod_effect.h +++ b/src/e_mod_effect.h @@ -42,6 +42,7 @@ enum _E_Effect_Group E_EFFECT_GROUP_HOME, E_EFFECT_GROUP_LOCKSCREEN, E_EFFECT_GROUP_KEYBOARD, + E_EFFECT_GROUP_BACKGROUND, E_EFFECT_GROUP_NONE, };