From d7d8451ceb5edf5a3551076f129fbdf9c55f8444 Mon Sep 17 00:00:00 2001 From: MinJeong Kim Date: Thu, 20 Oct 2016 19:54:09 +0900 Subject: [PATCH 01/16] rotation: send rotation effect events send E_EVENT_ZONE_ROTATION_EFFECT_READY/CANCEL/DONE event Change-Id: I0efd45ee9ea0a9adccddcc3e7f09f6beae3a3b49 Signed-off-by: MinJeong Kim --- src/e_mod_effect_rotation.c | 61 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 58 insertions(+), 3 deletions(-) diff --git a/src/e_mod_effect_rotation.c b/src/e_mod_effect_rotation.c index 0df0f4e..341be53 100644 --- a/src/e_mod_effect_rotation.c +++ b/src/e_mod_effect_rotation.c @@ -67,6 +67,48 @@ typedef struct _Rotation_Zone static Rotation_Zone *_rotation_zone = NULL; +static void +_rotation_effect_ready_send(E_Zone *zone) +{ + E_Event_Zone_Rotation_Effect_Ready *ev; + + ev = E_NEW(E_Event_Zone_Rotation_Effect_Ready, 1); + if (!ev) return; + + ev->zone = zone; + ecore_event_add(E_EVENT_ZONE_ROTATION_EFFECT_READY, ev, NULL, NULL); + + EFFINF("Rotation Effect Event Ready", NULL, NULL); +} + +static void +_rotation_effect_cancel_send(E_Zone *zone) +{ + E_Event_Zone_Rotation_Effect_Cancel *ev; + + ev = E_NEW(E_Event_Zone_Rotation_Effect_Cancel, 1); + if (!ev) return; + + ev->zone = zone; + ecore_event_add(E_EVENT_ZONE_ROTATION_EFFECT_CANCEL, ev, NULL, NULL); + + EFFINF("Rotation Effect Event Cancel", NULL, NULL); +} + +static void +_rotation_effect_done_send(E_Zone *zone) +{ + E_Event_Zone_Rotation_Effect_Done *ev; + + ev = E_NEW(E_Event_Zone_Rotation_Effect_Done, 1); + if (!ev) return; + + ev->zone = zone; + ecore_event_add(E_EVENT_ZONE_ROTATION_EFFECT_DONE, ev, NULL, NULL); + + EFFINF("Rotation Effect Event Done", NULL, NULL); +} + static Eina_Bool _rotation_effect_available(const E_Client *ec, int ang) { @@ -537,7 +579,10 @@ _rotation_effect_clear(Rotation_Effect *effect) } if (effect->ctx_end) - _rotation_effect_animator_end_context_free(effect->ctx_end); + { + _rotation_effect_animator_end_context_free(effect->ctx_end); + _rotation_effect_done_send(effect->zone); + } effect->running = EINA_FALSE; effect->wait_for_buffer = EINA_FALSE; @@ -576,6 +621,7 @@ _rotation_effect_animator_cb_update(void *data, double pos) evas_object_hide(effect->bg); e_comp_override_del(); + _rotation_effect_done_send(effect->zone); return ECORE_CALLBACK_CANCEL; } @@ -705,6 +751,9 @@ _rotation_effect_cb_zone_rotation_begin(void *data, int type, void *event) _rotation_effect_animator_begin_prepare(effect); + if (effect->targets) + _rotation_effect_ready_send(zone); + return ECORE_CALLBACK_PASS_ON; } @@ -740,14 +789,20 @@ _rotation_effect_cb_zone_rotation_end(void *data, int type, void *event) static Eina_Bool _rotation_effect_cb_zone_rotation_cancel(void *data, int type, void *event) { + E_Event_Zone_Rotation_Change_Cancel *ev = event; Rotation_Effect *effect; + E_Zone *zone; - EFFINF("Zone Rotation Canceld", NULL, NULL); + zone = ev->zone; + if (!zone) return ECORE_CALLBACK_PASS_ON; effect = (Rotation_Effect *)data; if (!effect) return ECORE_CALLBACK_PASS_ON; - if (effect->running) return ECORE_CALLBACK_PASS_ON; + EFFINF("Zone Rotation Cancelled", NULL, NULL); + + if (effect->running) return ECORE_CALLBACK_PASS_ON; + if (effect->targets) _rotation_effect_cancel_send(zone); _rotation_effect_clear(effect); return ECORE_CALLBACK_PASS_ON; -- 2.7.4 From 872edd8c113621c9b2f5d67cfa0f2ee20e516e13 Mon Sep 17 00:00:00 2001 From: MinJeong Kim Date: Wed, 2 Nov 2016 11:36:31 +0900 Subject: [PATCH 02/16] Packaging: update version to 0.1.6 Change-Id: Ieca962700ebb98be75f4f9f6ccc1e4691dc6c83e Signed-off-by: MinJeong Kim --- packaging/e-mod-tizen-effect.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/e-mod-tizen-effect.spec b/packaging/e-mod-tizen-effect.spec index 5b50b4c..a9f1b93 100644 --- a/packaging/e-mod-tizen-effect.spec +++ b/packaging/e-mod-tizen-effect.spec @@ -1,5 +1,5 @@ Name: e-mod-tizen-effect -Version: 0.1.5 +Version: 0.1.6 Release: 1 Summary: The effect module for the enlightenment URL: http://www.enlightenment.org -- 2.7.4 From f642187a105d83dc04496f9fb11b9d1195fc79f0 Mon Sep 17 00:00:00 2001 From: MinJeong Kim Date: Tue, 8 Nov 2016 21:21:31 +0900 Subject: [PATCH 03/16] Use layer_pending instead of layer_block Use layer_pending flag instead of layer_block to accept changes of window stack while animation is running. Change-Id: Ib1df6c286d47cd88b0d23b6874200de3f2f063d8 Signed-off-by: MinJeong Kim --- src/e_mod_effect.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/e_mod_effect.c b/src/e_mod_effect.c index ac40d13..47a630a 100644 --- a/src/e_mod_effect.c +++ b/src/e_mod_effect.c @@ -236,7 +236,7 @@ _eff_object_layer_up(E_Client *ec) evas_object_name_set(_eff->layers[map_ly].obj, "layer_obj(effect)"); } - ec->layer_block = 1; + ec->layer_pending = 1; evas_object_layer_set(ec->frame, ec->layer + 1); } @@ -244,7 +244,7 @@ static void _eff_object_layer_down(E_Client *ec) { evas_object_layer_set(ec->frame, ec->layer); - ec->layer_block = 0; + ec->layer_pending = 0; } static void -- 2.7.4 From 8e3649c22346797e65c46d04d5a9dab09afa75a1 Mon Sep 17 00:00:00 2001 From: MinJeong Kim Date: Tue, 8 Nov 2016 21:24:32 +0900 Subject: [PATCH 04/16] Packaging: update version to 0.1.7 Change-Id: I924c0d8b34e11200243ef8a1f339195a1045473b Signed-off-by: MinJeong Kim --- packaging/e-mod-tizen-effect.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/e-mod-tizen-effect.spec b/packaging/e-mod-tizen-effect.spec index a9f1b93..f53b191 100644 --- a/packaging/e-mod-tizen-effect.spec +++ b/packaging/e-mod-tizen-effect.spec @@ -1,5 +1,5 @@ Name: e-mod-tizen-effect -Version: 0.1.6 +Version: 0.1.7 Release: 1 Summary: The effect module for the enlightenment URL: http://www.enlightenment.org -- 2.7.4 From 5c7e68e24a6a2f2d6e39a36aba6730627445af1f Mon Sep 17 00:00:00 2001 From: MinJeong Kim Date: Thu, 17 Nov 2016 21:19:41 +0900 Subject: [PATCH 05/16] rotation: fix waiting for removed client Change-Id: I4298c86813342026898acff9686341a0b52db1f4 Signed-off-by: MinJeong Kim --- src/e_mod_effect_rotation.c | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/src/e_mod_effect_rotation.c b/src/e_mod_effect_rotation.c index 341be53..9a28e7a 100644 --- a/src/e_mod_effect_rotation.c +++ b/src/e_mod_effect_rotation.c @@ -780,7 +780,13 @@ _rotation_effect_cb_zone_rotation_end(void *data, int type, void *event) return ECORE_CALLBACK_PASS_ON; } - if (!effect->ctx_end) _rotation_effect_animator_end_prepare(effect); + if (!effect->ctx_end) + { + _rotation_effect_animator_end_prepare(effect); + + if (!effect->ctx_end) + _rotation_effect_clear(effect); + } if (effect->ctx_end) _rotation_effect_start(effect); return ECORE_CALLBACK_PASS_ON; @@ -834,6 +840,39 @@ _rotation_effect_cb_buffer_change(void *data, int ev_type, void *event) return ECORE_CALLBACK_PASS_ON; } +static Eina_Bool +_rotation_effect_cb_client_remove(void *data, int ev_type, void *event) +{ + E_Event_Client *ev = event; + E_Client *ec; + Rotation_Effect *effect; + Rotation_Effect_Object *eobj; + Eina_List *l; + Eina_Bool clear = EINA_FALSE; + + ec = ev->ec; + if (!ec) return ECORE_CALLBACK_PASS_ON; + + effect = (Rotation_Effect *)data; + if (!effect) return ECORE_CALLBACK_PASS_ON; + if (effect->ctx_begin) + { + EINA_LIST_FOREACH(effect->ctx_begin->objects, l, eobj) + { + if (ec == eobj->ec) + { + clear = EINA_TRUE; + break; + } + } + + if (clear) + _rotation_effect_clear(effect); + } + + return ECORE_CALLBACK_PASS_ON; +} + static void _rotation_effect_free(Rotation_Effect *effect) { @@ -916,6 +955,9 @@ _rotation_zone_create(E_Zone *zone) E_EVENT_CLIENT_BUFFER_CHANGE, _rotation_effect_cb_buffer_change, rotation_zone->effect); + E_LIST_HANDLER_APPEND(rotation_zone->event_hdlrs, + E_EVENT_CLIENT_REMOVE, + _rotation_effect_cb_client_remove, rotation_zone->effect); return rotation_zone; } -- 2.7.4 From ef74d4718a65901d6bb83547aeb50b95caaa9a40 Mon Sep 17 00:00:00 2001 From: MinJeong Kim Date: Thu, 17 Nov 2016 19:07:45 +0900 Subject: [PATCH 06/16] Enable keyboard sliding animation Change-Id: I8c8d3c347b942ab5767669eebf05fe32860d0d83 Signed-off-by: MinJeong Kim --- data/group/keyboard.edc | 104 +++++++++++++++++++++++++++++++++++++++--------- src/e_mod_effect.c | 61 ++++++++++++++++++---------- 2 files changed, 124 insertions(+), 41 deletions(-) diff --git a/data/group/keyboard.edc b/data/group/keyboard.edc index ae8dd2b..6b8fcae 100644 --- a/data/group/keyboard.edc +++ b/data/group/keyboard.edc @@ -1,14 +1,24 @@ +#define KEYBOARD_EFFECT_FAST 0.20 group { name: "e/comp/effects/keyboard"; script { + public ang; public message(Msg_Type:type, id, ...) { if ((type == MSG_INT_SET) && (id == 0)) { /*set state */ new st; + new rot; + new buf[32]; + st = getarg(2); + rot = getarg(3); + + set_int(ang, rot); + if (st == 0) { + snprintf(buf, sizeof(buf), "default,%d", rot); set_state(PART:"clipper", "default", 0.0); - set_state(PART:"shower", "default", 0.0); + set_state(PART:"shower", buf, 0.0); } else if (st == 1) { @@ -17,8 +27,9 @@ group { name: "e/comp/effects/keyboard"; } else if (st == 2) { + snprintf(buf, sizeof(buf), "restack_hidden,%d", rot); set_state(PART:"clipper", "restack_hidden", 0.0); - set_state(PART:"shower", "restack_hidden", 0.0); + set_state(PART:"shower", buf, 0.0); } else if (st == 3) { @@ -34,6 +45,25 @@ group { name: "e/comp/effects/keyboard"; { } } + public hide_state(val, Float:pos) + { + new rot; + new buf[32]; + + rot = get_int(ang); + snprintf(buf, sizeof(buf), "hide,%d", rot); + + set_tween_state_anim(PART:"shower", "visible", 0.0, buf, 0.0, DECELERATE, pos, "CURRENT"); + set_tween_state_anim(PART:"clipper", "visible", 0.0, buf, 0.0, DECELERATE, pos, "CURRENT"); + + if (pos == 1.0) + { + if (get_int(val) == 1) + run_program(PROGRAM:"hide2"); + else + run_program(PROGRAM:"done"); + } + } } parts { part { name: "clipper"; @@ -53,6 +83,7 @@ group { name: "e/comp/effects/keyboard"; } description { state: "hide" 0.0; inherit: "default" 0.0; + color: 255 255 255 255; } description { state: "restack_visible" 0.0; inherit: "visible" 0.0; @@ -70,6 +101,21 @@ group { name: "e/comp/effects/keyboard"; rel1.relative: 0 1; rel2.relative: 1 2; } + description { state: "default,0" 0.0; + inherit: "default" 0.0; + } + description { state: "default,90" 0.0; + rel1.relative: 1 0; + rel2.relative: 2 1; + } + description { state: "default,180" 0.0; + rel1.relative: 0 -1; + rel2.relative: 0 1; + } + description { state: "default,270" 0.0; + rel1.relative: -1 0; + rel2.relative: 0 1; + } description { state: "visible" 0.0; inherit: "default" 0.0; rel1.relative: 0 0; @@ -79,12 +125,36 @@ group { name: "e/comp/effects/keyboard"; description { state: "hide" 0.0; inherit: "default" 0.0; } + description { state: "hide,0" 0.0; + inherit: "hide" 0.0; + } + description { state: "hide,90" 0.0; + inherit: "default,90" 0.0; + } + description { state: "hide,180" 0.0; + inherit: "default,180" 0.0; + } + description { state: "hide,270" 0.0; + inherit: "default,270" 0.0; + } description { state: "restack_visible" 0.0; inherit: "visible" 0.0; } description { state: "restack_hidden" 0.0; inherit: "default" 0.0; } + description { state: "restack_hidden,0" 0.0; + inherit: "restack_hidden" 0.0; + } + description { state: "restack_hidden,90" 0.0; + inherit: "default,90" 0.0; + } + description { state: "restack_hidden,180" 0.0; + inherit: "default,180" 0.0; + } + description { state: "restack_hidden,270" 0.0; + inherit: "default,270" 0.0; + } description { state: "restack_done" 0.0; inherit: "visible" 0.0; } @@ -110,9 +180,9 @@ group { name: "e/comp/effects/keyboard"; program { name: "show1"; signal: "e,action,go"; source: "e"; - filter: "shower" "default"; + filter: "clipper" "default"; action: STATE_SET "visible" 0.0; - transition: ACCELERATE COMP_EFFECT_DURATION_FAST; + transition: DECELERATE KEYBOARD_EFFECT_FAST; target: "shower"; target: "clipper"; target: "e.swallow.content"; @@ -121,12 +191,10 @@ group { name: "e/comp/effects/keyboard"; program { name: "hide1"; signal: "e,action,go"; source: "e"; - filter: "shower" "visible"; - action: STATE_SET "hide" 0.0; - transition: ACCELERATE COMP_EFFECT_DURATION_FAST; - target: "shower"; - target: "clipper"; - after: "hide2"; + filter: "clipper" "visible"; + script{ + anim(KEYBOARD_EFFECT_FAST, "hide_state", 1); + } } program { name: "hide2"; action: STATE_SET "default" 0.0; @@ -137,19 +205,17 @@ group { name: "e/comp/effects/keyboard"; program { name: "restack,hide"; signal: "e,action,go"; source: "e"; - filter: "shower" "restack_visible"; - action: STATE_SET "hide" 0.0; - transition: ACCELERATE COMP_EFFECT_DURATION_FAST; - target: "shower"; - target: "clipper"; - after: "done"; + filter: "clipper" "restack_visible"; + script{ + anim(KEYBOARD_EFFECT_FAST, "hide_state", 0); + } } program { name: "restack,show"; signal: "e,action,go"; source: "e"; - filter: "shower" "restack_hidden"; + filter: "clipper" "restack_hidden"; action: STATE_SET "visible" 0.0; - transition: ACCELERATE COMP_EFFECT_DURATION_FAST; + transition: DECELERATE KEYBOARD_EFFECT_FAST; target: "shower"; target: "clipper"; target: "e.swallow.content"; @@ -158,7 +224,7 @@ group { name: "e/comp/effects/keyboard"; program { name: "restack,finish"; signal: "e,action,go"; source: "e"; - filter: "shower" "restack_done"; + filter: "clipper" "restack_done"; action: STATE_SET "visible" 0.0; target: "shower"; target: "clipper"; diff --git a/src/e_mod_effect.c b/src/e_mod_effect.c index 47a630a..3aece03 100644 --- a/src/e_mod_effect.c +++ b/src/e_mod_effect.c @@ -205,12 +205,12 @@ _eff_unref(E_Client *ec) } static void -_eff_object_setup(E_Client *ec) +_eff_object_setup(E_Client *ec, E_Effect_Group group) { E_Comp_Config *cfg; cfg = e_comp_config_get(); - if (ec->vkbd.vkbd) + if (group == E_EFFECT_GROUP_KEYBOARD) e_comp_object_effect_set(ec->frame, "keyboard"); else { @@ -415,6 +415,7 @@ _eff_cb_visible(void *data, Evas_Object *obj, const char *signal) { E_Client *ec; E_Effect_Group group; + int ang = -1; if (!_eff) return EINA_FALSE; @@ -423,7 +424,8 @@ _eff_cb_visible(void *data, Evas_Object *obj, const char *signal) if (e_object_is_del(E_OBJECT(ec))) return EINA_FALSE; group = _eff_group_get(ec); - if (group != E_EFFECT_GROUP_NORMAL) return EINA_FALSE; + if ((group != E_EFFECT_GROUP_NORMAL) && + (group != E_EFFECT_GROUP_KEYBOARD)) return EINA_FALSE; if (evas_object_visible_get(obj)) return EINA_FALSE; if (!_eff_ref(ec)) return EINA_FALSE; @@ -433,8 +435,9 @@ _eff_cb_visible(void *data, Evas_Object *obj, const char *signal) EFFINF("SET EXTRA_ANIMATING...", ec->pixmap, ec); ec->extra_animating = EINA_TRUE; - _eff_object_setup(ec); - e_comp_object_effect_params_set(ec->frame, 0, (int[]){0}, 1); + _eff_object_setup(ec, group); + ang = ec->e.state.rot.ang.curr; + e_comp_object_effect_params_set(ec->frame, 0, (int[]){0, ang}, 2); if (e_comp->nocomp) { _eff_pending_effect_set(ec, @@ -480,6 +483,7 @@ _eff_cb_hidden(void *data, Evas_Object *obj, const char *signal) Eina_Bool lowered = 0; Evas_Object *below; int map_ly; + int ang = -1; if (!_eff) return EINA_FALSE; @@ -488,7 +492,8 @@ _eff_cb_hidden(void *data, Evas_Object *obj, const char *signal) if (e_object_is_del(E_OBJECT(ec))) return EINA_FALSE; group = _eff_group_get(ec); - if (group != E_EFFECT_GROUP_NORMAL) return EINA_FALSE; + if ((group != E_EFFECT_GROUP_NORMAL) && + (group != E_EFFECT_GROUP_KEYBOARD)) return EINA_FALSE; if (!evas_object_visible_get(obj)) return EINA_FALSE; if (!_eff_ref(ec)) return EINA_FALSE; @@ -506,8 +511,9 @@ _eff_cb_hidden(void *data, Evas_Object *obj, const char *signal) if (lowered) _eff_object_layer_up(ec); - _eff_object_setup(ec); - e_comp_object_effect_params_set(ec->frame, 0, (int[]){1}, 1); + _eff_object_setup(ec, group); + ang = ec->e.state.rot.ang.curr; + e_comp_object_effect_params_set(ec->frame, 0, (int[]){1, ang}, 2); if (e_comp->nocomp) { @@ -544,6 +550,7 @@ _eff_cb_uniconify(void *data, Evas_Object *obj, const char *signal) E_Client *ec; E_Effect_Group group; Eina_Bool v1, v2; + int ang = -1; if (!_eff) return EINA_FALSE; @@ -593,8 +600,9 @@ _eff_cb_uniconify(void *data, Evas_Object *obj, const char *signal) e_comp_object_signal_emit(below->frame, "e,action,restack,hide", "e"); return EINA_TRUE; } - /* for NORMAL group */ - else if (group == E_EFFECT_GROUP_NORMAL) + /* for NORMAL and KEYBOARD group */ + else if ((group == E_EFFECT_GROUP_NORMAL) || + (group == E_EFFECT_GROUP_KEYBOARD)) { v1 = _eff_visibility_stack_check(ec, _eff->stack.old); v2 = _eff_visibility_stack_check(ec, _eff->stack.cur); @@ -611,8 +619,9 @@ _eff_cb_uniconify(void *data, Evas_Object *obj, const char *signal) e_comp_override_add(); - _eff_object_setup(ec); - e_comp_object_effect_params_set(ec->frame, 0, (int[]){0}, 1); + _eff_object_setup(ec, group); + ang = ec->e.state.rot.ang.curr; + e_comp_object_effect_params_set(ec->frame, 0, (int[]){0, ang}, 2); if (e_comp->nocomp) { @@ -655,6 +664,7 @@ _eff_cb_iconify(void *data, Evas_Object *obj, const char *signal) E_Client *ec; E_Effect_Group group; Eina_Bool v1, v2; + int ang = -1; if (!_eff) return EINA_FALSE; @@ -663,7 +673,8 @@ _eff_cb_iconify(void *data, Evas_Object *obj, const char *signal) if (e_object_is_del(E_OBJECT(ec))) return EINA_FALSE; group = _eff_group_get(ec); - if (group != E_EFFECT_GROUP_NORMAL) return EINA_FALSE; + if ((group != E_EFFECT_GROUP_NORMAL) && + (group != E_EFFECT_GROUP_KEYBOARD)) return EINA_FALSE; if (!evas_object_visible_get(obj)) return EINA_FALSE; @@ -682,8 +693,9 @@ _eff_cb_iconify(void *data, Evas_Object *obj, const char *signal) e_comp_override_add(); - _eff_object_setup(ec); - e_comp_object_effect_params_set(ec->frame, 0, (int[]){1}, 1); + _eff_object_setup(ec, group); + ang = ec->e.state.rot.ang.curr; + e_comp_object_effect_params_set(ec->frame, 0, (int[]){1, ang}, 2); if (e_comp->nocomp) { @@ -780,6 +792,7 @@ _eff_cb_restack(void *data, Evas_Object *obj, const char *signal) E_Effect_Group group; const char *emission; E_Client *ec_home = NULL; + int ang = -1; if (!_eff) return EINA_FALSE; @@ -818,7 +831,8 @@ _eff_cb_restack(void *data, Evas_Object *obj, const char *signal) emission = eina_stringshare_add("e,action,restack,hide"); } - if (group != E_EFFECT_GROUP_NORMAL) return EINA_FALSE; + if ((group != E_EFFECT_GROUP_NORMAL) && + (group != E_EFFECT_GROUP_KEYBOARD)) return EINA_FALSE; if ((!e_util_strcmp(emission, "e,action,restack,show"))) { @@ -831,8 +845,9 @@ _eff_cb_restack(void *data, Evas_Object *obj, const char *signal) _eff_object_layer_up(ec); - _eff_object_setup(ec); - e_comp_object_effect_params_set(ec->frame, 0, (int[]){2}, 1); + _eff_object_setup(ec, group); + ang = ec->e.state.rot.ang.curr; + e_comp_object_effect_params_set(ec->frame, 0, (int[]){2, ang}, 2); if (e_comp->nocomp) { @@ -873,8 +888,9 @@ _eff_cb_restack(void *data, Evas_Object *obj, const char *signal) _eff_object_layer_up(ec); - _eff_object_setup(ec); - e_comp_object_effect_params_set(ec->frame, 0, (int[]){3}, 1); + _eff_object_setup(ec, group); + ang = ec->e.state.rot.ang.curr; + e_comp_object_effect_params_set(ec->frame, 0, (int[]){3, ang}, 2); if (e_comp->nocomp) { @@ -894,8 +910,9 @@ _eff_cb_restack(void *data, Evas_Object *obj, const char *signal) e_comp_override_add(); - _eff_object_setup(ec); - e_comp_object_effect_params_set(ec->frame, 0, (int[]){4}, 1); + _eff_object_setup(ec, group); + ang = ec->e.state.rot.ang.curr; + e_comp_object_effect_params_set(ec->frame, 0, (int[]){4, ang}, 2); if (e_comp->nocomp) { -- 2.7.4 From 69c41929275a56f883ca868c1b83e409f1599fb2 Mon Sep 17 00:00:00 2001 From: MinJeong Kim Date: Fri, 18 Nov 2016 11:08:16 +0900 Subject: [PATCH 07/16] Packaging: update version to 0.1.8 Change-Id: I58294ee4a7e88bfdf3ff31cc48296af0d79025b1 --- packaging/e-mod-tizen-effect.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/e-mod-tizen-effect.spec b/packaging/e-mod-tizen-effect.spec index f53b191..1113aac 100644 --- a/packaging/e-mod-tizen-effect.spec +++ b/packaging/e-mod-tizen-effect.spec @@ -1,5 +1,5 @@ Name: e-mod-tizen-effect -Version: 0.1.7 +Version: 0.1.8 Release: 1 Summary: The effect module for the enlightenment URL: http://www.enlightenment.org -- 2.7.4 From efe4ab8a860ed4e541b48175c57c3b1135ef6203 Mon Sep 17 00:00:00 2001 From: MinJeong Kim Date: Tue, 22 Nov 2016 15:51:20 +0900 Subject: [PATCH 08/16] keyboard: fix processing wrong angle Change-Id: I51ba13eb67602dcfcfdcf6913a5f1c5189aa3e72 Signed-off-by: MinJeong Kim --- src/e_mod_effect.c | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/src/e_mod_effect.c b/src/e_mod_effect.c index 3aece03..7356b7d 100644 --- a/src/e_mod_effect.c +++ b/src/e_mod_effect.c @@ -128,6 +128,18 @@ _eff_group_get(E_Client *ec) return group; } +static int +_eff_group_angle_get(E_Client *ec, E_Effect_Group group) +{ + if (group == E_EFFECT_GROUP_KEYBOARD) + { + if (ec->parent) + return ec->parent->e.state.rot.ang.curr; + } + + return ec->e.state.rot.ang.curr; +} + static Eina_Bool _eff_ref(E_Client *ec) { @@ -436,7 +448,7 @@ _eff_cb_visible(void *data, Evas_Object *obj, const char *signal) ec->extra_animating = EINA_TRUE; _eff_object_setup(ec, group); - ang = ec->e.state.rot.ang.curr; + ang = _eff_group_angle_get(ec, group); e_comp_object_effect_params_set(ec->frame, 0, (int[]){0, ang}, 2); if (e_comp->nocomp) { @@ -491,10 +503,17 @@ _eff_cb_hidden(void *data, Evas_Object *obj, const char *signal) if (!ec) return EINA_FALSE; if (e_object_is_del(E_OBJECT(ec))) return EINA_FALSE; + /* check for effect group */ group = _eff_group_get(ec); if ((group != E_EFFECT_GROUP_NORMAL) && (group != E_EFFECT_GROUP_KEYBOARD)) return EINA_FALSE; + if (group == E_EFFECT_GROUP_KEYBOARD) + { + if (ec->visibility.obscured == E_VISIBILITY_FULLY_OBSCURED) + return EINA_FALSE; + } + if (!evas_object_visible_get(obj)) return EINA_FALSE; if (!_eff_ref(ec)) return EINA_FALSE; @@ -512,7 +531,7 @@ _eff_cb_hidden(void *data, Evas_Object *obj, const char *signal) _eff_object_layer_up(ec); _eff_object_setup(ec, group); - ang = ec->e.state.rot.ang.curr; + ang = _eff_group_angle_get(ec, group); e_comp_object_effect_params_set(ec->frame, 0, (int[]){1, ang}, 2); if (e_comp->nocomp) @@ -620,7 +639,7 @@ _eff_cb_uniconify(void *data, Evas_Object *obj, const char *signal) e_comp_override_add(); _eff_object_setup(ec, group); - ang = ec->e.state.rot.ang.curr; + ang = _eff_group_angle_get(ec, group); e_comp_object_effect_params_set(ec->frame, 0, (int[]){0, ang}, 2); if (e_comp->nocomp) @@ -694,7 +713,7 @@ _eff_cb_iconify(void *data, Evas_Object *obj, const char *signal) e_comp_override_add(); _eff_object_setup(ec, group); - ang = ec->e.state.rot.ang.curr; + ang = _eff_group_angle_get(ec, group); e_comp_object_effect_params_set(ec->frame, 0, (int[]){1, ang}, 2); if (e_comp->nocomp) @@ -826,6 +845,7 @@ _eff_cb_restack(void *data, Evas_Object *obj, const char *signal) ec_home = ec; ec = below; group = _eff_group_get(ec); + if (group != E_EFFECT_GROUP_NORMAL) return EINA_FALSE; if (emission) eina_stringshare_del(emission); emission = eina_stringshare_add("e,action,restack,hide"); @@ -846,7 +866,7 @@ _eff_cb_restack(void *data, Evas_Object *obj, const char *signal) _eff_object_layer_up(ec); _eff_object_setup(ec, group); - ang = ec->e.state.rot.ang.curr; + ang = _eff_group_angle_get(ec, group); e_comp_object_effect_params_set(ec->frame, 0, (int[]){2, ang}, 2); if (e_comp->nocomp) @@ -889,7 +909,7 @@ _eff_cb_restack(void *data, Evas_Object *obj, const char *signal) _eff_object_layer_up(ec); _eff_object_setup(ec, group); - ang = ec->e.state.rot.ang.curr; + ang = _eff_group_angle_get(ec, group); e_comp_object_effect_params_set(ec->frame, 0, (int[]){3, ang}, 2); if (e_comp->nocomp) @@ -911,7 +931,7 @@ _eff_cb_restack(void *data, Evas_Object *obj, const char *signal) e_comp_override_add(); _eff_object_setup(ec, group); - ang = ec->e.state.rot.ang.curr; + ang = _eff_group_angle_get(ec, group); e_comp_object_effect_params_set(ec->frame, 0, (int[]){4, ang}, 2); if (e_comp->nocomp) @@ -1158,7 +1178,7 @@ e_mod_effect_init(void) else { eff->file = ""; - eff->style = "no-eff"; + eff->style = "no-effect"; } eff->clients = eina_hash_pointer_new(_eff_cb_client_data_free); -- 2.7.4 From 950fea8a540c12d83c1f3b9c877582aa7e8843f8 Mon Sep 17 00:00:00 2001 From: MinJeong Kim Date: Tue, 22 Nov 2016 19:01:12 +0900 Subject: [PATCH 09/16] Packaging: update version to 0.1.9 Change-Id: I0e3d82a564282e78a7058b79eba07e7cf6ec9d4c Signed-off-by: MinJeong Kim --- packaging/e-mod-tizen-effect.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/e-mod-tizen-effect.spec b/packaging/e-mod-tizen-effect.spec index 1113aac..32c5381 100644 --- a/packaging/e-mod-tizen-effect.spec +++ b/packaging/e-mod-tizen-effect.spec @@ -1,5 +1,5 @@ Name: e-mod-tizen-effect -Version: 0.1.8 +Version: 0.1.9 Release: 1 Summary: The effect module for the enlightenment URL: http://www.enlightenment.org -- 2.7.4 From 262bac7edb7ddb25484c56c56a80507fa173e2f1 Mon Sep 17 00:00:00 2001 From: MinJeong Kim Date: Thu, 24 Nov 2016 13:04:35 +0900 Subject: [PATCH 10/16] rotation: exclude video client Change-Id: Idf75a2ea8e5774f824bf318a0138b27800d5d70f Signed-off-by: MinJeong Kim --- src/e_mod_effect_rotation.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/e_mod_effect_rotation.c b/src/e_mod_effect_rotation.c index 9a28e7a..a32ae7e 100644 --- a/src/e_mod_effect_rotation.c +++ b/src/e_mod_effect_rotation.c @@ -187,6 +187,7 @@ _rotation_effect_targets_get(Rotation_Effect *effect) continue; if ((!ec->animatable) || + (e_client_video_client_has(ec)) || (!_rotation_effect_available(ec, effect->zone->rot.curr)) || (ec->e.state.rot.ang.curr == effect->zone->rot.curr)) { -- 2.7.4 From 3f18918d822e42fca042a8bb0f7e91af53e5118b Mon Sep 17 00:00:00 2001 From: MinJeong Kim Date: Thu, 24 Nov 2016 13:06:51 +0900 Subject: [PATCH 11/16] keyboard: do animation faster than before Change-Id: I1098658807057b224d49b58ecab57bcf5116c33a Signed-off-by: MinJeong Kim --- data/group/keyboard.edc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/group/keyboard.edc b/data/group/keyboard.edc index 6b8fcae..2f02197 100644 --- a/data/group/keyboard.edc +++ b/data/group/keyboard.edc @@ -1,4 +1,4 @@ -#define KEYBOARD_EFFECT_FAST 0.20 +#define KEYBOARD_EFFECT_FAST 0.06 group { name: "e/comp/effects/keyboard"; script { public ang; -- 2.7.4 From 9e1361f859128c1064a84575a1f67c8b64b80c71 Mon Sep 17 00:00:00 2001 From: MinJeong Kim Date: Thu, 24 Nov 2016 13:11:14 +0900 Subject: [PATCH 12/16] Packaging: update version to 0.1.10 Change-Id: I8233c6dd9c1d14e8367e60568c517f5b4613c17c --- packaging/e-mod-tizen-effect.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/e-mod-tizen-effect.spec b/packaging/e-mod-tizen-effect.spec index 32c5381..df4b90c 100644 --- a/packaging/e-mod-tizen-effect.spec +++ b/packaging/e-mod-tizen-effect.spec @@ -1,5 +1,5 @@ Name: e-mod-tizen-effect -Version: 0.1.9 +Version: 0.1.10 Release: 1 Summary: The effect module for the enlightenment URL: http://www.enlightenment.org -- 2.7.4 From ad71d9e689e607a1faca7b66c809b9277bf6a914 Mon Sep 17 00:00:00 2001 From: MinJeong Kim Date: Fri, 25 Nov 2016 16:55:27 +0900 Subject: [PATCH 13/16] Do not layer up for restack_show effect Change-Id: I789ed339cfe67775cac5a658586042d3a6a72205 --- src/e_mod_effect.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/e_mod_effect.c b/src/e_mod_effect.c index 7356b7d..c92897f 100644 --- a/src/e_mod_effect.c +++ b/src/e_mod_effect.c @@ -739,11 +739,7 @@ _eff_cb_restack_show_done(void *data, Evas_Object *obj, const char *sig, const c if (ec) { _eff_event_send(ec, EINA_FALSE, E_EFFECT_TYPE_RESTACK_SHOW); - if (_eff_unref(ec)) - { - if (_eff_client_get(ec)) - _eff_object_layer_down(ec); - } + _eff_unref(ec); } _eff_stack_update(); @@ -863,8 +859,6 @@ _eff_cb_restack(void *data, Evas_Object *obj, const char *signal) e_comp_override_add(); - _eff_object_layer_up(ec); - _eff_object_setup(ec, group); ang = _eff_group_angle_get(ec, group); e_comp_object_effect_params_set(ec->frame, 0, (int[]){2, ang}, 2); -- 2.7.4 From 00c2461b59e5f208c86b912bd73dbb03aceec0f8 Mon Sep 17 00:00:00 2001 From: MinJeong Kim Date: Wed, 16 Nov 2016 22:21:24 +0900 Subject: [PATCH 14/16] Check delay_del_ref if it's really deleted Change-Id: Iaac3e8f51a6e779e996b912053fdcc98a0e9c03d Signed-off-by: MinJeong Kim --- src/e_mod_effect.c | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/src/e_mod_effect.c b/src/e_mod_effect.c index c92897f..665e62d 100644 --- a/src/e_mod_effect.c +++ b/src/e_mod_effect.c @@ -6,6 +6,7 @@ typedef struct _E_Effect_Client { E_Client *ec; unsigned int animating; + unsigned int delay_del_ref; E_Comp_Wl_Buffer_Ref buffer_ref; E_Pixmap *ep; E_Client *reverse_ec; @@ -79,6 +80,7 @@ _eff_client_new(E_Client *ec) efc = E_NEW(E_Effect_Client, 1); efc->ec = ec; efc->animating = 0; + efc->delay_del_ref = 0; efc->ep = NULL; return efc; @@ -147,21 +149,30 @@ _eff_ref(E_Client *ec) if (!_eff) return EINA_FALSE; + efc = _eff_client_get(ec); + if (!efc) return EINA_FALSE; + if (e_object_is_del(E_OBJECT(ec))) { - ERR("Client is deleted already! ec(%p)", ec); - eina_hash_del_by_key(_eff->clients, &ec); - return EINA_FALSE; + if (!e_object_delay_del_ref_get(E_OBJECT(ec))) + { + ERR("Client is deleted already! ec(%p)", ec); + eina_hash_del_by_key(_eff->clients, &ec); + return EINA_FALSE; + } } - efc = _eff_client_get(ec); - if (!efc) return EINA_FALSE; - if (!ec->pixmap) return EINA_FALSE; if ((e_comp_object_content_type_get(ec->frame) == E_COMP_OBJECT_CONTENT_TYPE_INT_IMAGE) && (!e_pixmap_usable_get(ec->pixmap))) return EINA_FALSE; + if (e_object_is_del(E_OBJECT(ec))) + { + e_object_delay_del_ref(E_OBJECT(ec)); + efc->delay_del_ref ++; + } + efc->animating++; e_object_ref(E_OBJECT(ec)); efc->ep = e_pixmap_ref(ec->pixmap); @@ -184,6 +195,12 @@ _eff_unref(E_Client *ec) efc = _eff_client_get(ec); if (!efc) return NULL; + while (efc->delay_del_ref) + { + e_object_delay_del_unref(E_OBJECT(ec)); + efc->delay_del_ref--; + } + if (e_object_is_del(E_OBJECT(ec))) do_unref = efc->animating; @@ -501,7 +518,10 @@ _eff_cb_hidden(void *data, Evas_Object *obj, const char *signal) ec = e_comp_object_client_get(obj); if (!ec) return EINA_FALSE; - if (e_object_is_del(E_OBJECT(ec))) return EINA_FALSE; + if (e_object_is_del(E_OBJECT(ec))) + { + if (!e_object_delay_del_ref_get(E_OBJECT(ec))) return; + } /* check for effect group */ group = _eff_group_get(ec); -- 2.7.4 From 6d9a643f5af2c2ebed30e287dd587b89113b517b Mon Sep 17 00:00:00 2001 From: MinJeong Kim Date: Wed, 30 Nov 2016 15:53:58 +0900 Subject: [PATCH 15/16] Packaging: update version to 0.1.11 Change-Id: I4abd74dc7a51455a0fb8fa7d927ebd1a3da0de46 --- packaging/e-mod-tizen-effect.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/e-mod-tizen-effect.spec b/packaging/e-mod-tizen-effect.spec index df4b90c..a0dfc11 100644 --- a/packaging/e-mod-tizen-effect.spec +++ b/packaging/e-mod-tizen-effect.spec @@ -1,5 +1,5 @@ Name: e-mod-tizen-effect -Version: 0.1.10 +Version: 0.1.11 Release: 1 Summary: The effect module for the enlightenment URL: http://www.enlightenment.org -- 2.7.4 From c3ae406e34865f402992cd8606b89d4e92f9c5e0 Mon Sep 17 00:00:00 2001 From: MinJeong Kim Date: Thu, 1 Dec 2016 15:01:02 +0900 Subject: [PATCH 16/16] Fixed running of restack,show effect while show effect is running Change-Id: Ic9d0b79f443bf6f5c144e18f04911a0fed02bbaf --- src/e_mod_effect.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/e_mod_effect.c b/src/e_mod_effect.c index 665e62d..1b81029 100644 --- a/src/e_mod_effect.c +++ b/src/e_mod_effect.c @@ -459,6 +459,7 @@ _eff_cb_visible(void *data, Evas_Object *obj, const char *signal) if (evas_object_visible_get(obj)) return EINA_FALSE; if (!_eff_ref(ec)) return EINA_FALSE; + _eff_stack_update(); e_comp_override_add(); EFFINF("SET EXTRA_ANIMATING...", ec->pixmap, ec); -- 2.7.4