diff --git a/ChangeLog b/ChangeLog index 5204c3438..f365830f2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,8 @@ 2013-04-15 Mike Blumenkrantz * window borders now drawn on compositor canvas + * desk flip animations moved to edje + * added e_comp_win_effect* api 2013-04-05 Jérémy Zurcher diff --git a/NEWS b/NEWS index a25ba46dc..c01ae23da 100644 --- a/NEWS +++ b/NEWS @@ -33,6 +33,7 @@ Additions: * added E_LIST_REVERSE_FREE macro * added e_object_ref_debug_set * added e_gadcon_repopulate + * added e_comp_win_effect* api Config: * Added option for disabling icons in menus * Added option for disabling pointer warping when performing directional focus changes using winlist @@ -127,6 +128,7 @@ Improvements: * Don't rely on bash or zsh behavior when starting enlightenment_init and tempget. * menus are now drawn directly on the compositor canvas * window borders now drawn on compositor canvas + * desk flip animations moved to edje Fixes: * IBar menu didn't allow to configure different icon sources, show contents menu even on empty IBar. diff --git a/data/themes/edc/comp.edc b/data/themes/edc/comp.edc index 7f0831d7b..4bdd0601f 100644 --- a/data/themes/edc/comp.edc +++ b/data/themes/edc/comp.edc @@ -241,6 +241,315 @@ group { name: "e/comp/screen/overlay/noeffects"; } } +group { name: "e/comp/effects/none"; + parts { + part { name: "e.swallow.content"; type: SWALLOW; + description { state: "default" 0.0; + } + } + } +} + +/* non-auto effects are assumed to be run frame by frame by an animator */ +group { name: "e/comp/effects/move"; + script { + public message(Msg_Type:type, id, ...) { + if ((type == MSG_INT_SET) && (id == 0)) { + /* set state */ + new st; + + st = getarg(2); + if (st == 1) + set_state(PART:"mover", "custom", 0.0); + else + set_state(PART:"mover", "default", 0.0); + } else if ((type == MSG_INT_SET) && (id == 1)) { + /* x,y coords to move to */ + new x, y; + + x = getarg(2); + y = getarg(3); + + custom_state(PART:"mover", "default", 0.0); + set_state_val(PART:"mover", STATE_REL1_OFFSET, x, y); + set_state_val(PART:"mover", STATE_REL2_OFFSET, x, y); + } + } + } + parts { + part { name: "mover"; type: SPACER; + description { state: "default" 0.0; + } + } + part { name: "e.swallow.content"; type: SWALLOW; + description { state: "default" 0.0; + rel1.to: "mover"; + rel2.to: "mover"; + } + } + } + programs { + program { + name: "show"; + signal: "e,action,go"; + source: "e"; + filter: "mover" "default"; + action: STATE_SET "custom" 0.0; + transition: DECELERATE 0.4 CURRENT; + target: "mover"; + after: "done"; + } + program { + name: "hide"; + signal: "e,action,go"; + source: "e"; + filter: "mover" "custom"; + action: STATE_SET "default" 0.0; + transition: DECELERATE 0.4 CURRENT; + target: "mover"; + after: "done"; + } + program { + name: "stop"; + signal: "e,action,stop"; + source: "e"; + action: ACTION_STOP; + target: "show"; + target: "hide"; + } + program { + name: "done"; + action: SIGNAL_EMIT "e,action,done" "e"; + } + } +} + +/* auto effects are "start and forget" */ +group { name: "e/comp/effects/auto/pane"; + //data.item: "noclip" "1"; //setting this prevents object from being clipped to its zone during effect + script { + public message(Msg_Type:type, id, ...) { + if ((type == MSG_INT_SET) && (id == 0)) { + /* set state */ + new st; + + st = getarg(2); + if (st == 1) + set_state(PART:"mover", "custom", 0.0); + else + set_state(PART:"mover", "default", 0.0); + } else if ((type == MSG_INT_SET) && (id == 1)) { + /* border geom[4] / screen size[2] / desk change direction[2] */ + new x, y, sw, sh, dx, dy; + + sw = getarg(6); + sh = getarg(7); + dx = getarg(8); + dy = getarg(9); + + x = round(sw*dx*1.5); + y = round(sh*dy*1.5); + + custom_state(PART:"mover", "default", 0.0); + set_state_val(PART:"mover", STATE_REL1_OFFSET, x, y); + set_state_val(PART:"mover", STATE_REL2_OFFSET, x, y); + } + } + } + parts { + part { name: "mover"; type: SPACER; + description { state: "default" 0.0; + } + } + part { name: "e.swallow.content"; type: SWALLOW; + description { state: "default" 0.0; + rel1.to: "mover"; + rel2.to: "mover"; + } + } + } + programs { + program { + name: "show"; + signal: "e,action,go"; + source: "e"; + filter: "mover" "default"; + action: STATE_SET "custom" 0.0; + transition: DECELERATE 0.4 CURRENT; + target: "mover"; + after: "done"; + } + program { + name: "hide"; + signal: "e,action,go"; + source: "e"; + filter: "mover" "custom"; + action: STATE_SET "default" 0.0; + transition: DECELERATE 0.4 CURRENT; + target: "mover"; + after: "done"; + } + program { + name: "stop"; + signal: "e,action,stop"; + source: "e"; + action: ACTION_STOP; + target: "show"; + target: "hide"; + } + program { + name: "done"; + action: SIGNAL_EMIT "e,action,done" "e"; + } + } +} + +group { name: "e/comp/effects/auto/diagonal"; + inherit: "e/comp/effects/auto/pane"; + script { + public message(Msg_Type:type, id, ...) { + if ((type == MSG_INT_SET) && (id == 0)) { + /* set state */ + new st; + + st = getarg(2); + + if (st == 1) + set_state(PART:"mover", "custom", 0.0); + else + set_state(PART:"mover", "default", 0.0); + } else if ((type == MSG_INT_SET) && (id == 1)) { + /* border geom / screen size / desk change direction */ + new x, y, w, h, sw, sh, mx, my, bx, by; + new Float:fx, Float:fy, Float:ang, Float:len, Float:lmax, Float:rad; + + x = getarg(2); + y = getarg(3); + w = getarg(4); + h = getarg(5); + sw = getarg(6); + sh = getarg(7); + custom_state(PART:"mover", "default", 0.0); + + mx = sw/2; + my = sh/2; + + bx = x+(w/2)-mx; + by = y+(h/2)-my; + if (bx == 0) bx = 1; + if (by == 0) by = 1; + fx = bx/(w/2); + fy = by/(h/2); + ang = atan(fy/fx); + if (fx < 0.0) + ang = PI+ang; + len = sqrt((bx*bx)+(by*by)); + lmax = sqrt(((sw/2)*(sw/2))+((sh/2)*(sh/2))); + rad = sqrt((w*w)+(h*h))/2.0; + x = round(cos(ang)*(lmax-len+rad)); + y = round(sin(ang)*(lmax-len+rad)); + set_state_val(PART:"mover", STATE_REL1_OFFSET, x, y); + set_state_val(PART:"mover", STATE_REL2_OFFSET, x, y); + } + } + } +} + +group { name: "e/comp/effects/auto/zoom"; + inherit: "e/comp/effects/auto/diagonal"; + script { + public message(Msg_Type:type, id, ...) { + if ((type == MSG_INT_SET) && (id == 0)) { + /* set state */ + new st; + + st = getarg(2); + if (st == 1) { + /* starting from offscreen */ + set_state_val(PART:"mover", STATE_REL1, 0.3, 0.3); + set_state_val(PART:"mover", STATE_REL2, 0.7, 0.7); + set_state(PART:"mover", "custom", 0.0); + set_state(PART:"clip", "hidden", 0.0); + } else { + /* starting from normal position */ + set_state_val(PART:"mover", STATE_REL1, -1.7, -1.7); + set_state_val(PART:"mover", STATE_REL2, 1.7, 1.7); + set_state(PART:"mover", "default", 0.0); + set_state(PART:"clip", "default", 0.0); + } + } else if ((type == MSG_INT_SET) && (id == 1)) { + /* border geom / screen size / desk change direction */ + new x, y, w, h, sw, sh, mx, my, bx, by; + new Float:fx, Float:fy, Float:ang, Float:len, Float:lmax, Float:rad; + + x = getarg(2); + y = getarg(3); + w = getarg(4); + h = getarg(5); + sw = getarg(6); + sh = getarg(7); + custom_state(PART:"mover", "default", 0.0); + + mx = sw/2; + my = sh/2; + + bx = x+(w/2)-mx; + by = y+(h/2)-my; + if (bx == 0) bx = 1; + if (by == 0) by = 1; + fx = bx/(w/2); + fy = by/(h/2); + ang = atan(fy/fx); + if (fx < 0.0) + ang = PI+ang; + len = sqrt((bx*bx)+(by*by)); + lmax = sqrt(((sw/2)*(sw/2))+((sh/2)*(sh/2))); + rad = sqrt((w*w)+(h*h))/2.0; + x = round(cos(ang)*(lmax-len+rad)); + y = round(sin(ang)*(lmax-len+rad)); + set_state_val(PART:"mover", STATE_REL1_OFFSET, x, y); + set_state_val(PART:"mover", STATE_REL2_OFFSET, x, y); + } + } + } + parts { + part { name: "clip"; type: RECT; insert_after: "mover"; + description { state: "default"; + rel1.to: "mover"; + rel2.to: "mover"; + color: 255 255 255 255; + } + description { state: "hidden"; + rel1.to: "mover"; + rel2.to: "mover"; + color: 255 255 255 0; + } + } + part { name: "e.swallow.content"; clip_to: "clip"; + } + } + programs { + program { + name: "show2"; + signal: "e,action,go"; + source: "e"; + filter: "mover" "default"; + action: STATE_SET "hidden" 0.0; + transition: ACCELERATE 0.4 CURRENT; + target: "clip"; + } + program { + name: "hide2"; + signal: "e,action,go"; + source: "e"; + filter: "mover" "custom"; + action: STATE_SET "default" 0.0; + transition: ACCELERATE 0.4 CURRENT; + target: "clip"; + } + } +} + group { name: "e/comp/default"; images.image: "win_shadow.png" COMP; images.image: "win_glow.png" COMP; diff --git a/data/themes/edc/illume.edc b/data/themes/edc/illume.edc index 7f55025f4..54d8818d5 100644 --- a/data/themes/edc/illume.edc +++ b/data/themes/edc/illume.edc @@ -636,6 +636,7 @@ group { name: "modules/illume-softkey/window"; rel2.to_x: "dots_start"; rel2.relative: 1.0 1.0; align: 0.0 0.5; + fixed: 0 1; box { layout: "horizontal"; padding: 4 0; align: 0.0 0.5; @@ -652,6 +653,7 @@ group { name: "modules/illume-softkey/window"; rel2.to_x: "dots_end"; rel2.relative: 0.0 1.0; align: 1.0 0.5; + fixed: 0 1; box { layout: "horizontal"; padding: 4 0; align: 1.0 0.5; diff --git a/src/bin/e_border.c b/src/bin/e_border.c index cbf277f8a..e6653eac3 100644 --- a/src/bin/e_border.c +++ b/src/bin/e_border.c @@ -1171,8 +1171,8 @@ _e_border_client_move_resize_send(E_Border *bd) bd->client_inset.t); ecore_x_icccm_move_resize_send(bd->client.win, - bd->x + bd->fx.x + bd->client_inset.l, - bd->y + bd->fx.y + bd->client_inset.t, + bd->x + bd->client_inset.l, + bd->y + bd->client_inset.t, bd->client.w, bd->client.h); } @@ -1366,24 +1366,6 @@ e_border_center_pos_get(E_Border *bd, if (y) *y = zy + (zh - bd->h) / 2; } -EAPI void -e_border_fx_offset(E_Border *bd, - int x, - int y) -{ - E_OBJECT_CHECK(bd); - E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE); - - if ((x == bd->fx.x) && (y == bd->fx.y)) return; - bd->fx.x = x; - bd->fx.y = y; - - bd->changes.pos = 1; - bd->changed = 1; - - if (bd->moving) _e_border_move_update(bd); -} - static void _e_border_move_resize_internal(E_Border *bd, int x, @@ -6551,15 +6533,15 @@ _e_border_cb_mouse_down_helper(E_Border *bd, int button, Evas_Point *output, E_B { bd->mouse.last_down[button - 1].mx = output->x; bd->mouse.last_down[button - 1].my = output->y; - bd->mouse.last_down[button - 1].x = bd->x + bd->fx.x; - bd->mouse.last_down[button - 1].y = bd->y + bd->fx.y; + bd->mouse.last_down[button - 1].x = bd->x; + bd->mouse.last_down[button - 1].y = bd->y; bd->mouse.last_down[button - 1].w = bd->w; bd->mouse.last_down[button - 1].h = bd->h; } else { - bd->moveinfo.down.x = bd->x + bd->fx.x; - bd->moveinfo.down.y = bd->y + bd->fx.y; + bd->moveinfo.down.x = bd->x; + bd->moveinfo.down.y = bd->y; bd->moveinfo.down.w = bd->w; bd->moveinfo.down.h = bd->h; } @@ -6584,15 +6566,15 @@ _e_border_cb_mouse_down_helper(E_Border *bd, int button, Evas_Point *output, E_B { bd->mouse.last_down[button - 1].mx = output->x; bd->mouse.last_down[button - 1].my = output->y; - bd->mouse.last_down[button - 1].x = bd->x + bd->fx.x; - bd->mouse.last_down[button - 1].y = bd->y + bd->fx.y; + bd->mouse.last_down[button - 1].x = bd->x; + bd->mouse.last_down[button - 1].y = bd->y; bd->mouse.last_down[button - 1].w = bd->w; bd->mouse.last_down[button - 1].h = bd->h; } else { - bd->moveinfo.down.x = bd->x + bd->fx.x; - bd->moveinfo.down.y = bd->y + bd->fx.y; + bd->moveinfo.down.x = bd->x; + bd->moveinfo.down.y = bd->y; bd->moveinfo.down.w = bd->w; bd->moveinfo.down.h = bd->h; } @@ -6649,8 +6631,8 @@ _e_border_cb_mouse_up_helper(E_Border *bd, int button, Evas_Point *output, E_Bin { bd->mouse.last_up[button - 1].mx = output->x; bd->mouse.last_up[button - 1].my = output->y; - bd->mouse.last_up[button - 1].x = bd->x + bd->fx.x; - bd->mouse.last_up[button - 1].y = bd->y + bd->fx.y; + bd->mouse.last_up[button - 1].x = bd->x; + bd->mouse.last_up[button - 1].y = bd->y; } bd->mouse.current.mx = output->x; bd->mouse.current.my = output->y; @@ -6674,8 +6656,8 @@ _e_border_cb_mouse_up_helper(E_Border *bd, int button, Evas_Point *output, E_Bin { bd->mouse.last_up[button - 1].mx = output->x; bd->mouse.last_up[button - 1].my = output->y; - bd->mouse.last_up[button - 1].x = bd->x + bd->fx.x; - bd->mouse.last_up[button - 1].y = bd->y + bd->fx.y; + bd->mouse.last_up[button - 1].x = bd->x; + bd->mouse.last_up[button - 1].y = bd->y; } bd->drag.start = 0; @@ -7000,11 +6982,9 @@ _e_border_post_move_resize_job(void *data) ecore_x_window_move(tmp->win, bd->x + bd->client_inset.l + - bd->fx.x + tmp->client.e.state.video_position.x, bd->y + bd->client_inset.t + - bd->fx.y + tmp->client.e.state.video_position.y); } if (bd->client.e.state.video) @@ -7015,24 +6995,22 @@ _e_border_post_move_resize_job(void *data) ecore_x_window_move(bd->win, parent->x + parent->client_inset.l + - parent->fx.x + bd->client.e.state.video_position.x, parent->y + parent->client_inset.t + - parent->fx.y + bd->client.e.state.video_position.y); } else if ((bd->post_move) && (bd->post_resize)) { ecore_x_window_move_resize(bd->win, - bd->x + bd->fx.x + bd->client_inset.l, - bd->y + bd->fx.y + bd->client_inset.t, + bd->x + bd->client_inset.l, + bd->y + bd->client_inset.t, bd->w - (bd->client_inset.l + bd->client_inset.r), bd->h - (bd->client_inset.t + bd->client_inset.b)); } else if (bd->post_move) { - ecore_x_window_move(bd->win, bd->x + bd->fx.x + bd->client_inset.l, bd->y + bd->fx.y + bd->client_inset.t); + ecore_x_window_move(bd->win, bd->x + bd->client_inset.l, bd->y + bd->client_inset.t); } else if (bd->post_resize) { @@ -7047,11 +7025,9 @@ _e_border_post_move_resize_job(void *data) bd->win, bd->client.e.state.video_parent_border->x + bd->client.e.state.video_parent_border->client_inset.l + - bd->client.e.state.video_parent_border->fx.x + bd->client.e.state.video_position.x, bd->client.e.state.video_parent_border->y + bd->client.e.state.video_parent_border->client_inset.t + - bd->client.e.state.video_parent_border->fx.y + bd->client.e.state.video_position.y, bd->w, bd->h); } @@ -8691,11 +8667,9 @@ _e_border_eval(E_Border *bd) ecore_x_window_move(bd->win, bd->client.e.state.video_parent_border->x + bd->client.e.state.video_parent_border->client_inset.l + - bd->client.e.state.video_parent_border->fx.x + bd->client.e.state.video_position.x, bd->client.e.state.video_parent_border->y + bd->client.e.state.video_parent_border->client_inset.t + - bd->client.e.state.video_parent_border->fx.y + bd->client.e.state.video_position.y); bd->client.e.state.video_position.updated = 0; } @@ -8713,8 +8687,8 @@ _e_border_eval(E_Border *bd) EINA_LIST_FOREACH(bd->client.e.state.video_child, l, tmp) ecore_x_window_move(tmp->win, - bd->x + bd->fx.x + bd->client_inset.l + tmp->client.e.state.video_position.x, - bd->y + bd->fx.y + bd->client_inset.t + tmp->client.e.state.video_position.y); + bd->x + bd->client_inset.l + tmp->client.e.state.video_position.x, + bd->y + bd->client_inset.t + tmp->client.e.state.video_position.y); } if ((!bd->shaded) || (bd->shading)) @@ -8744,7 +8718,7 @@ _e_border_eval(E_Border *bd) bd->post_job = ecore_idle_enterer_add(_e_border_post_move_resize_job, bd); bd->post_move = 1; - e_container_shape_move(bd->shape, bd->x + bd->fx.x + bd->client_inset.l, bd->y + bd->fx.y + bd->client_inset.t); + e_container_shape_move(bd->shape, bd->x + bd->client_inset.l, bd->y + bd->client_inset.t); _e_border_client_move_resize_send(bd); @@ -8923,8 +8897,8 @@ _e_border_eval(E_Border *bd) if (bd->cur_mouse_action) { - bd->moveinfo.down.x = bd->x + bd->fx.x; - bd->moveinfo.down.y = bd->y + bd->fx.y; + bd->moveinfo.down.x = bd->x; + bd->moveinfo.down.y = bd->y; bd->moveinfo.down.w = bd->w; bd->moveinfo.down.h = bd->h; bd->mouse.current.mx = x; diff --git a/src/bin/e_border.h b/src/bin/e_border.h index fd4dac4fe..b89a7ffa7 100644 --- a/src/bin/e_border.h +++ b/src/bin/e_border.h @@ -175,16 +175,6 @@ struct _E_Border E_Zone *zone; E_Desk *desk; - struct - { - int x, y; - struct - { - int x, y; - double t; - } start; - } fx; - struct { int l, r, t, b; @@ -733,7 +723,6 @@ EAPI void e_border_move_intercept_cb_set(E_Border *bd, E_Border_Move_I EAPI void e_border_move_without_border(E_Border *bd, int x, int y); EAPI void e_border_center(E_Border *bd); EAPI void e_border_center_pos_get(E_Border *bd, int *x, int *y); -EAPI void e_border_fx_offset(E_Border *bd, int x, int y); EAPI void e_border_resize(E_Border *bd, int w, int h); EAPI void e_border_resize_without_border(E_Border *bd, int w, int h); EAPI void e_border_move_resize(E_Border *bd, int x, int y, int w, int h); diff --git a/src/bin/e_comp.c b/src/bin/e_comp.c index ca72ab71e..b5d660190 100644 --- a/src/bin/e_comp.c +++ b/src/bin/e_comp.c @@ -153,7 +153,7 @@ _e_comp_event_source_configure(E_Comp_Win *cw) static void _e_comp_child_show(E_Comp_Win *cw) { - evas_object_show(cw->shobj); + evas_object_show(cw->effect_obj); if (cw->bd) { Eina_List *l; @@ -166,7 +166,7 @@ _e_comp_child_show(E_Comp_Win *cw) tcw = eina_hash_find(borders, e_util_winid_str_get(tmp->client.win)); if (!tcw) continue; - evas_object_show(tcw->shobj); + evas_object_show(tcw->effect_obj); } } } @@ -174,7 +174,7 @@ _e_comp_child_show(E_Comp_Win *cw) static void _e_comp_child_hide(E_Comp_Win *cw) { - evas_object_hide(cw->shobj); + evas_object_hide(cw->effect_obj); if (cw->bd) { Eina_List *l; @@ -187,7 +187,7 @@ _e_comp_child_hide(E_Comp_Win *cw) tcw = eina_hash_find(borders, e_util_winid_str_get(tmp->client.win)); if (!tcw) continue; - evas_object_hide(tcw->shobj); + evas_object_hide(tcw->effect_obj); } } } @@ -413,7 +413,7 @@ _e_comp_win_ready_timeout_setup(E_Comp_Win *cw) static void _e_comp_win_layout_populate(E_Comp_Win *cw) { - e_layout_pack(cw->c->layout, cw->shobj); + e_layout_pack(cw->c->layout, cw->effect_obj); } static void @@ -430,13 +430,13 @@ _e_comp_win_restack(E_Comp_Win *cw) if (cwp) { - e_layout_child_raise_above(cw->shobj, cwp->shobj); + e_layout_child_raise_above(cw->effect_obj, cwp->effect_obj); cw->c->wins = eina_inlist_remove(cw->c->wins, EINA_INLIST_GET(cw)); cw->c->wins = eina_inlist_append_relative(cw->c->wins, EINA_INLIST_GET(cw), EINA_INLIST_GET(cwp)); } else if (cwn) { - e_layout_child_raise_above(cw->shobj, cwn->shobj); + e_layout_child_raise_above(cw->effect_obj, cwn->effect_obj); cw->c->wins = eina_inlist_remove(cw->c->wins, EINA_INLIST_GET(cw)); cw->c->wins = eina_inlist_append_relative(cw->c->wins, EINA_INLIST_GET(cw), EINA_INLIST_GET(cwn)); } @@ -450,7 +450,7 @@ _e_comp_win_restack(E_Comp_Win *cw) tcw = eina_hash_find(borders, e_util_winid_str_get(tmp->client.win)); if (!tcw) continue; - e_layout_child_lower_below(tcw->shobj, cw->shobj); + e_layout_child_lower_below(tcw->effect_obj, cw->effect_obj); cw->c->wins = eina_inlist_remove(cw->c->wins, EINA_INLIST_GET(tcw)); cw->c->wins = eina_inlist_prepend_relative(cw->c->wins, EINA_INLIST_GET(tcw), EINA_INLIST_GET(cw)); } @@ -483,13 +483,13 @@ _e_comp_win_geometry_update(E_Comp_Win *cw) w = cw->pw, h = cw->ph; if (cw->not_in_layout) { - evas_object_resize(cw->shobj, w, h); - evas_object_move(cw->shobj, x, y); + evas_object_resize(cw->effect_obj, w, h); + evas_object_move(cw->effect_obj, x, y); } else { - e_layout_child_move(cw->shobj, x, y); - e_layout_child_resize(cw->shobj, w, h); + e_layout_child_move(cw->effect_obj, x, y); + e_layout_child_resize(cw->effect_obj, w, h); } } @@ -637,9 +637,9 @@ _e_comp_win_update(E_Comp_Win *cw) return; } - // evas_object_move(cw->shobj, cw->x, cw->y); + // evas_object_move(cw->effect_obj, cw->x, cw->y); // was cw->w / cw->h - // evas_object_resize(cw->shobj, cw->pw, cw->ph); + // evas_object_resize(cw->effect_obj, cw->pw, cw->ph); _e_comp_win_geometry_update(cw); if ((cw->c->gl) && (conf->texture_from_pixmap) && @@ -844,7 +844,7 @@ _e_comp_win_update(E_Comp_Win *cw) if (/*(!cw->update) &&*/ (cw->visible) && (cw->dmg_updates >= 1) && (cw->show_ready) && (!cw->bd || cw->bd->visible)) { - if (!evas_object_visible_get(cw->shobj)) + if (!evas_object_visible_get(cw->effect_obj)) { if (!cw->hidden_override) { @@ -1042,7 +1042,7 @@ _e_comp_cb_nocomp_begin(E_Comp *c) } cw = cwf; - INF("NOCOMP win %x shobj %p", cw->win, cw->shobj); + INF("NOCOMP win %x effect_obj %p", cw->win, cw->effect_obj); _e_comp_win_release(cw); @@ -1123,7 +1123,7 @@ _e_comp_cb_nocomp_end(E_Comp *c) _e_comp_win_adopt(cw); - INF("restore comp %x --- %p", cw->win, cw->shobj); + INF("restore comp %x --- %p", cw->win, cw->effect_obj); if (cw->visible) { @@ -2003,25 +2003,39 @@ _e_comp_win_dummy_add(E_Comp *c, Evas_Object *obj, E_Object *eobj, Eina_Bool nol if (cw->shape) cw->shape->comp_win = cw; if (conf->grab) ecore_x_grab(); + evas_object_geometry_get(obj, &x, &y, &w, &h); + + cw->effect_obj = edje_object_add(c->evas); + e_theme_edje_object_set(cw->effect_obj, "base/theme/comp", "e/comp/effects/none"); cw->shobj = edje_object_add(c->evas); _e_comp_win_shadow_setup(cw); + edje_object_part_swallow(cw->effect_obj, "e.swallow.content", cw->shobj); edje_object_signal_callback_add(cw->shobj, "e,action,show,done", "e", _e_comp_show_done, cw); edje_object_signal_callback_add(cw->shobj, "e,action,hide,done", "e", _e_comp_hide_done, cw); - evas_object_geometry_get(obj, &x, &y, &w, &h); _e_comp_win_configure(cw, x, y, w, h, 0); if (!nolayout) _e_comp_win_layout_populate(cw); - if (cw->bd) evas_object_data_set(cw->shobj, "border", cw->bd); - else if (cw->pop) - evas_object_data_set(cw->shobj, "popup", cw->pop); + if (cw->pop) + { + evas_object_data_set(cw->shobj, "popup", cw->pop); + evas_object_data_set(cw->effect_obj, "popup", cw->pop); + evas_object_name_set(cw->shobj, "cw->shobj::POPUP"); + evas_object_name_set(cw->effect_obj, "cw->effect_obj::POPUP"); + } else if (cw->menu) - evas_object_data_set(cw->shobj, "menu", cw->menu); + { + evas_object_data_set(cw->shobj, "menu", cw->menu); + evas_object_data_set(cw->effect_obj, "menu", cw->menu); + evas_object_name_set(cw->shobj, "cw->shobj::MENU"); + evas_object_name_set(cw->effect_obj, "cw->effect_obj::MENU"); + } cw->pending_count++; _e_comp_event_source_add(cw); + evas_object_data_set(cw->effect_obj, "comp_win", cw); evas_object_data_set(cw->shobj, "comp_win", cw); evas_object_data_set(cw->obj, "comp_win", cw); @@ -2146,6 +2160,8 @@ _e_comp_win_add(E_Comp *c, Ecore_X_Window win, E_Border *bd) cw->damage = ecore_x_damage_new (cw->win, ECORE_X_DAMAGE_REPORT_DELTA_RECTANGLES); eina_hash_add(damages, e_util_winid_str_get(cw->damage), cw); + cw->effect_obj = edje_object_add(c->evas); + e_theme_edje_object_set(cw->effect_obj, "base/theme/comp", "e/comp/effects/none"); cw->shobj = edje_object_add(c->evas); cw->obj = evas_object_image_filled_add(c->evas); evas_object_image_colorspace_set(cw->obj, EVAS_COLORSPACE_ARGB8888); @@ -2153,6 +2169,7 @@ _e_comp_win_add(E_Comp *c, Ecore_X_Window win, E_Border *bd) else evas_object_image_alpha_set(cw->obj, 0); _e_comp_win_shadow_setup(cw); + edje_object_part_swallow(cw->effect_obj, "e.swallow.content", cw->shobj); edje_object_signal_callback_add(cw->shobj, "e,action,show,done", "e", _e_comp_show_done, cw); edje_object_signal_callback_add(cw->shobj, "e,action,hide,done", "e", _e_comp_hide_done, cw); @@ -2179,20 +2196,15 @@ _e_comp_win_add(E_Comp *c, Ecore_X_Window win, E_Border *bd) if (cw->bd) { evas_object_data_set(cw->shobj, "border", cw->bd); + evas_object_data_set(cw->effect_obj, "border", cw->bd); evas_object_name_set(cw->shobj, "cw->shobj::BORDER"); - } - else if (cw->pop) - { - evas_object_data_set(cw->shobj, "popup", cw->pop); - evas_object_name_set(cw->shobj, "cw->shobj::POPUP"); - } - else if (cw->menu) - { - evas_object_data_set(cw->shobj, "menu", cw->menu); - evas_object_name_set(cw->shobj, "cw->shobj::MENU"); + evas_object_name_set(cw->effect_obj, "cw->effect_obj::BORDER"); } else - evas_object_name_set(cw->shobj, "cw->shobj::WINDOW"); + { + evas_object_name_set(cw->shobj, "cw->shobj::WINDOW"); + evas_object_name_set(cw->effect_obj, "cw->effect_obj::WINDOW"); + } evas_object_name_set(cw->obj, "cw->obj"); @@ -2201,13 +2213,13 @@ _e_comp_win_add(E_Comp *c, Ecore_X_Window win, E_Border *bd) } else { - cw->shobj = evas_object_rectangle_add(c->evas); + cw->effect_obj = evas_object_rectangle_add(c->evas); _e_comp_win_layout_populate(cw); - evas_object_color_set(cw->shobj, 0, 0, 0, 0); + evas_object_color_set(cw->effect_obj, 0, 0, 0, 0); } - evas_object_data_set(cw->shobj, "win", (void *)((unsigned long)cw->win)); - evas_object_data_set(cw->shobj, "comp_win", cw); + if (cw->shobj) evas_object_data_set(cw->shobj, "comp_win", cw); + evas_object_data_set(cw->effect_obj, "comp_win", cw); c->wins_invalid = 1; c->wins = eina_inlist_append(c->wins, EINA_INLIST_GET(cw)); @@ -2354,16 +2366,9 @@ _e_comp_win_del(E_Comp_Win *cw) evas_object_event_callback_del_full(cw->obj, EVAS_CALLBACK_FOCUS_IN, _e_comp_injected_win_focus_in_cb, cw); evas_object_event_callback_del_full(cw->obj, EVAS_CALLBACK_FOCUS_OUT, _e_comp_injected_win_focus_out_cb, cw); } - if (cw->obj) - { - evas_object_del(cw->obj); - cw->obj = NULL; - } - if (cw->shobj) - { - evas_object_del(cw->shobj); - cw->shobj = NULL; - } + E_FREE_FUNC(cw->obj, evas_object_del); + E_FREE_FUNC(cw->shobj, evas_object_del); + E_FREE_FUNC(cw->effect_obj, evas_object_del); if (cw->free_shape) E_FREE_FUNC(cw->shape, e_object_del); @@ -2549,6 +2554,7 @@ _e_comp_win_hide(E_Comp_Win *cw) cw->defer_hide = 0; cw->force = 0; _e_comp_child_hide(cw); + edje_object_signal_emit(cw->shobj, "e,state,visible,off", "e"); if (cw->update_timeout) { @@ -2697,7 +2703,7 @@ _e_comp_win_configure(E_Comp_Win *cw, int x, int y, int w, int h, int border) DBG(" [0x%x] mov %4i %4i", cw->win, x, y); cw->x = x; cw->y = y; - // evas_object_move(cw->shobj, cw->x, cw->y); + // evas_object_move(cw->effect_obj, cw->x, cw->y); moved = EINA_TRUE; } cw->hidden.x = x; @@ -2714,7 +2720,7 @@ _e_comp_win_configure(E_Comp_Win *cw, int x, int y, int w, int h, int border) cw->h = h; cw->needpix = 1; // was cw->w / cw->h - // evas_object_resize(cw->shobj, cw->pw, cw->ph); + // evas_object_resize(cw->effect_obj, cw->pw, cw->ph); resized = EINA_TRUE; _e_comp_win_damage(cw, 0, 0, cw->w, cw->h, 0); #else @@ -2724,7 +2730,7 @@ _e_comp_win_configure(E_Comp_Win *cw, int x, int y, int w, int h, int border) { cw->needpix = 1; // was cw->w / cw->h - // evas_object_resize(cw->shobj, cw->pw, cw->ph); + // evas_object_resize(cw->effect_obj, cw->pw, cw->ph); resized = EINA_TRUE; _e_comp_win_damage(cw, 0, 0, cw->w, cw->h, 0); } @@ -2744,7 +2750,7 @@ _e_comp_win_configure(E_Comp_Win *cw, int x, int y, int w, int h, int border) cw->border = border; cw->needpix = 1; // was cw->w / cw->h - // evas_object_resize(cw->shobj, cw->pw, cw->ph); + // evas_object_resize(cw->effect_obj, cw->pw, cw->ph); resized = EINA_TRUE; _e_comp_win_damage(cw, 0, 0, cw->w, cw->h, 0); } @@ -2759,7 +2765,7 @@ _e_comp_win_configure(E_Comp_Win *cw, int x, int y, int w, int h, int border) cw->h = h; cw->needpix = 1; // was cw->w / cw->h - // evas_object_resize(cw->shobj, cw->pw, cw->ph); + // evas_object_resize(cw->effect_obj, cw->pw, cw->ph); resized = EINA_TRUE; if (!cw->real_obj) _e_comp_win_damage(cw, 0, 0, cw->w, cw->h, 0); } @@ -2767,7 +2773,7 @@ _e_comp_win_configure(E_Comp_Win *cw, int x, int y, int w, int h, int border) { cw->border = border; cw->needpix = 1; - // evas_object_resize(cw->shobj, cw->pw, cw->ph); + // evas_object_resize(cw->effect_obj, cw->pw, cw->ph); resized = EINA_TRUE; _e_comp_win_damage(cw, 0, 0, cw->w, cw->h, 0); } @@ -3076,7 +3082,7 @@ _e_comp_message(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) cw->h = cw->hidden.h; cw->needpix = 1; // was cw->w / cw->h - // evas_object_resize(cw->shobj, cw->pw, cw->ph); + // evas_object_resize(cw->effect_obj, cw->pw, cw->ph); _e_comp_win_geometry_update(cw); _e_comp_win_damage(cw, 0, 0, cw->w, cw->h, 0); } @@ -5140,7 +5146,7 @@ e_comp_top_window_at_xy_get(E_Comp *c, Evas_Coord x, Evas_Coord y, Ecore_X_Windo { cw = e_comp_win_find(ignore[i]); if (cw) - ignore_list = eina_list_append(ignore_list, cw->shobj); + ignore_list = eina_list_append(ignore_list, cw->effect_obj); } } o = e_layout_top_child_at_xy_get(c->layout, x, y, ignore_list); @@ -5286,7 +5292,7 @@ e_comp_canvas_layer_set(Evas_Object *obj, E_Comp_Canvas_Layer comp_layer, E_Laye else { cw = e_comp_object_add(c, obj, evas_object_data_get(obj, "eobj")); - evas_object_layer_set(cw->shobj, comp_layer); + evas_object_layer_set(cw->effect_obj, comp_layer); if (comp_layer > E_COMP_CANVAS_LAYER_LAYOUT) e_comp_override_add(c); } @@ -5405,6 +5411,107 @@ e_comp_block_window_del(void) } } +EAPI void +e_comp_win_effect_set(E_Comp_Win *cw, const char *effect) +{ + char buf[4096]; + Eina_Stringshare *grp; + + EINA_SAFETY_ON_NULL_RETURN(cw); + EINA_SAFETY_ON_NULL_RETURN(effect); + EINA_SAFETY_ON_TRUE_RETURN(!effect[0]); + if (!cw->shobj) return; //input window + + snprintf(buf, sizeof(buf), "e/comp/effects/%s", effect); + edje_object_file_get(cw->effect_obj, NULL, &grp); + if (!e_util_strcmp(buf, grp)) return; + if (!e_theme_edje_object_set(cw->effect_obj, "base/theme/comp", buf)) + { + snprintf(buf, sizeof(buf), "e/comp/effects/auto/%s", effect); + if (!e_theme_edje_object_set(cw->effect_obj, "base/theme/comp", buf)) + if (!e_theme_edje_object_set(cw->effect_obj, "base/theme/comp", "e/comp/effects/none")) return; + } + if (cw->bd && cw->bd->bg_object) + { + edje_object_part_swallow(cw->bd->bg_object, "e.swallow.client", cw->obj); + edje_object_part_swallow(cw->shobj, "e.swallow.content", cw->bd->bg_object); + } + else + edje_object_part_swallow(cw->shobj, "e.swallow.content", cw->obj); + edje_object_part_swallow(cw->effect_obj, "e.swallow.content", cw->shobj); + if (cw->effect_clip) + { + evas_object_clip_unset(cw->effect_obj); + cw->effect_clip = 0; + } + cw->effect_clip_able = !edje_object_data_get(cw->shobj, "noclip"); +} + +EAPI void +e_comp_win_effect_params_set(E_Comp_Win *cw, int id, int *params, unsigned int count) +{ + Edje_Message_Int_Set *msg; + unsigned int x; + + EINA_SAFETY_ON_NULL_RETURN(cw); + EINA_SAFETY_ON_NULL_RETURN(params); + EINA_SAFETY_ON_FALSE_RETURN(count); + + msg = alloca(sizeof(Edje_Message_Int_Set) + ((count - 1) * sizeof(int))); + msg->count = (int)count; + for (x = 0; x < count; x++) + msg->val[x] = params[x]; + edje_object_message_send(cw->effect_obj, EDJE_MESSAGE_INT_SET, id, msg); + edje_object_message_signal_process(cw->effect_obj); +} + +static void +_e_comp_win_effect_end_cb(void *data, Evas_Object *obj, const char *emission EINA_UNUSED, const char *source EINA_UNUSED) +{ + edje_object_signal_callback_del(obj, "e,action,done", "e", data); + edje_object_signal_callback_del_full(obj, "e,action,done", "e", _e_comp_win_effect_end_cb, data); +} + +EAPI void +e_comp_win_effect_start(E_Comp_Win *cw, Edje_Signal_Cb end_cb, const void *end_data) +{ + EINA_SAFETY_ON_NULL_RETURN(cw); + EINA_SAFETY_ON_FALSE_RETURN(cw->bd); //FIXME + edje_object_signal_callback_del(cw->effect_obj, "e,action,done", "e", end_cb); + edje_object_signal_callback_del(cw->effect_obj, "e,action,done", "e", _e_comp_win_effect_end_cb); + if (cw->effect_clip) + { + evas_object_clip_unset(cw->effect_obj); + cw->effect_clip = 0; + } + if (cw->effect_clip_able) + { + if (cw->bd->zone) + { + evas_object_clip_set(cw->effect_obj, cw->bd->zone->bg_clip_object); + cw->effect_clip = 1; + } + } + /* this is a stack, so the callbacks added first will be called last */ + edje_object_signal_callback_add(cw->effect_obj, "e,action,done", "e", _e_comp_win_effect_end_cb, end_cb); + edje_object_signal_callback_add(cw->effect_obj, "e,action,done", "e", end_cb, (void*)end_data); + edje_object_signal_emit(cw->effect_obj, "e,action,go", "e"); +} + +EAPI void +e_comp_win_effect_stop(E_Comp_Win *cw, Edje_Signal_Cb end_cb) +{ + EINA_SAFETY_ON_NULL_RETURN(cw); + if (cw->effect_clip) + { + evas_object_clip_unset(cw->effect_obj); + cw->effect_clip = 0; + } + edje_object_signal_emit(cw->effect_obj, "e,action,stop", "e"); + edje_object_signal_callback_del(cw->effect_obj, "e,action,done", "e", end_cb); + edje_object_signal_callback_del(cw->effect_obj, "e,action,done", "e", _e_comp_win_effect_end_cb); +} + EAPI unsigned int e_comp_e_object_layer_get(const E_Object *obj) { diff --git a/src/bin/e_comp.h b/src/bin/e_comp.h index b3d56b377..f71237636 100644 --- a/src/bin/e_comp.h +++ b/src/bin/e_comp.h @@ -126,6 +126,7 @@ struct _E_Comp_Win int depth; // window depth Evas_Object *obj; // composite object Evas_Object *shobj; // shadow object + Evas_Object *effect_obj; // effects object E_Object *eobj; // internal e object E_Comp_Win *cw_above; // comp win that should always be stacked above this one Eina_List *stack_below; // list of objects to keep stacked below this one @@ -189,6 +190,9 @@ struct _E_Comp_Win Eina_Bool free_shape : 1; // container shape needs to be freed Eina_Bool real_obj : 1; // real object (for dummy comp wins) Eina_Bool not_in_layout : 1; // object is a dummy not in comp layout + + Eina_Bool effect_clip : 1; //effect_obj is clipped + Eina_Bool effect_clip_able : 1; //effect_obj will be clipped for effects }; struct E_Event_Comp @@ -227,6 +231,11 @@ EAPI void e_comp_zone_update(E_Comp_Zone *cz); EAPI void e_comp_override_del(E_Comp *c); EAPI void e_comp_override_add(E_Comp *c); +EAPI void e_comp_win_effect_set(E_Comp_Win *cw, const char *effect); +EAPI void e_comp_win_effect_params_set(E_Comp_Win *cw, int id, int *params, unsigned int count); +EAPI void e_comp_win_effect_start(E_Comp_Win *cw, Edje_Signal_Cb end_cb, const void *end_data); +EAPI void e_comp_win_effect_stop(E_Comp_Win *cw, Edje_Signal_Cb end_cb); + EAPI E_Comp_Win *e_comp_win_find_client_win(Ecore_X_Window win); EAPI E_Comp_Win *e_comp_win_find(Ecore_X_Window win); EAPI const Eina_List *e_comp_win_list_get(E_Comp *c); diff --git a/src/bin/e_config.c b/src/bin/e_config.c index f70c19b98..3fd734c75 100644 --- a/src/bin/e_config.c +++ b/src/bin/e_config.c @@ -625,8 +625,8 @@ _e_config_edd_init(Eina_Bool old) E_CONFIG_VAL(D, T, icon_theme_overrides, UCHAR); E_CONFIG_VAL(D, T, desk_flip_animate_mode, INT); + E_CONFIG_VAL(D, T, desk_flip_animate_type, STR); E_CONFIG_VAL(D, T, desk_flip_animate_interpolation, INT); - E_CONFIG_VAL(D, T, desk_flip_animate_time, DOUBLE); E_CONFIG_VAL(D, T, wallpaper_import_last_dev, STR); E_CONFIG_VAL(D, T, wallpaper_import_last_path, STR); @@ -1206,6 +1206,21 @@ e_config_load(void) e_config->pointer_warp_speed = e_config->winlist_warp_speed; e_config->winlist_warp_speed = 0; } + CONFIG_VERSION_CHECK(12) + { + CONFIG_VERSION_UPDATE_INFO(12); + switch (e_config->desk_flip_animate_mode) + { + case 1: //pane + e_config->desk_flip_animate_type = eina_stringshare_add("auto/pane"); + break; + case 2: //zoom, now known as diagonal + e_config->desk_flip_animate_type = eina_stringshare_add("auto/diagonal"); + break; + default: + break; + } + } } if (!e_config->remember_internal_fm_windows) e_config->remember_internal_fm_windows = !!(e_config->remember_internal_windows & E_REMEMBER_INTERNAL_FM_WINS); @@ -2145,6 +2160,7 @@ _e_config_free(E_Config *ecf) e_config_xkb_layout_free(ecf->xkb.current_layout); e_config_xkb_layout_free(ecf->xkb.sel_layout); e_config_xkb_layout_free(ecf->xkb.lock_layout); + eina_stringshare_del(ecf->desk_flip_animate_type); if (ecf->transition_start) eina_stringshare_del(ecf->transition_start); if (ecf->transition_desk) eina_stringshare_del(ecf->transition_desk); if (ecf->transition_change) eina_stringshare_del(ecf->transition_change); diff --git a/src/bin/e_config.h b/src/bin/e_config.h index 6a6c1f5b4..031fec322 100644 --- a/src/bin/e_config.h +++ b/src/bin/e_config.h @@ -48,7 +48,7 @@ typedef enum /* increment this whenever a new set of config values are added but the users * config doesn't need to be wiped - simply new values need to be put in */ -#define E_CONFIG_FILE_GENERATION 11 +#define E_CONFIG_FILE_GENERATION 12 #define E_CONFIG_FILE_VERSION ((E_CONFIG_FILE_EPOCH * 1000000) + E_CONFIG_FILE_GENERATION) #define E_CONFIG_BINDINGS_VERSION 0 // DO NOT INCREMENT UNLESS YOU WANT TO WIPE ALL BINDINGS!!!!! @@ -265,9 +265,14 @@ struct _E_Config const char *icon_theme; // GUI unsigned char icon_theme_overrides; // GUI + /* modes: + * 1-"pane") horizontal or vertical movement to/from next/previous "screen" + * 2-"zoom") 45degree diagonal movement based on border position + */ int desk_flip_animate_mode; // GUI + /* types based on theme */ + Eina_Stringshare *desk_flip_animate_type; // GUI int desk_flip_animate_interpolation; // GUI - double desk_flip_animate_time; // GUI const char *wallpaper_import_last_dev; // INTERNAL const char *wallpaper_import_last_path; // INTERNAL diff --git a/src/bin/e_configure_option.c b/src/bin/e_configure_option.c index 7442759f4..0e71d554c 100644 --- a/src/bin/e_configure_option.c +++ b/src/bin/e_configure_option.c @@ -1825,8 +1825,6 @@ e_configure_option_init(void) co->info_cb = _e_configure_desk_flip_animate_mode_info_cb; OPT_ICON("preferences-desktop"); //OPT_ADD(INT, desk_flip_animate_interpolation, _("vdesk"), _("animate"), _("flip")); //NOT USED? - OPT_ADD(DOUBLE, desk_flip_animate_time, _("Desk flip animation length"), _("vdesk"), _("animate"), _("flip"), _("speed")); - OPT_MINMAX_STEP_FMT(0, 5, 0.05, "%1.2f seconds"); OPT_ADD(STR, theme_default_border_style, _("Default window border style"), _("border"), _("theme")); co->info_cb = _e_configure_border_style_info_cb; diff --git a/src/bin/e_desk.c b/src/bin/e_desk.c index 3dce7f9c8..4c73b1ca1 100644 --- a/src/bin/e_desk.c +++ b/src/bin/e_desk.c @@ -11,12 +11,8 @@ static void _e_desk_event_desk_before_show_free(void *data, void *ev); static void _e_desk_event_desk_after_show_free(void *data, void *ev); static void _e_desk_event_desk_deskshow_free(void *data, void *ev); static void _e_desk_event_desk_name_change_free(void *data, void *ev); -static void _e_desk_show_begin(E_Desk *desk, int mode, int x, int dy); -static void _e_desk_show_end(E_Desk *desk); -static Eina_Bool _e_desk_show_animator(void *data); -static void _e_desk_hide_begin(E_Desk *desk, int mode, int dx, int dy); -static void _e_desk_hide_end(E_Desk *desk); -static Eina_Bool _e_desk_hide_animator(void *data); +static void _e_desk_show_begin(E_Desk *desk, int dx, int dy); +static void _e_desk_hide_begin(E_Desk *desk, int dx, int dy); #if (ECORE_VERSION_MAJOR > 1) || (ECORE_VERSION_MINOR >= 8) static void _e_desk_event_desk_window_profile_change_free(void *data, void *ev); static void _e_desk_window_profile_change_protocol_set(void); @@ -222,8 +218,6 @@ e_desk_name_update(void) EAPI void e_desk_show(E_Desk *desk) { - E_Border_List *bl; - E_Border *bd; E_Event_Desk_Show *ev; E_Event_Desk_Before_Show *eev; E_Event_Desk_After_Show *eeev; @@ -273,9 +267,7 @@ e_desk_show(E_Desk *desk) dx = desk->x - desk2->x; dy = desk->y - desk2->y; } - if (e_config->desk_flip_animate_mode > 0) - _e_desk_hide_begin(desk2, e_config->desk_flip_animate_mode, - dx, dy); + _e_desk_hide_begin(desk2, dx, dy); break; } } @@ -287,37 +279,17 @@ e_desk_show(E_Desk *desk) desk->zone->desk_y_current = desk->y; desk->visible = 1; - msg = alloca(sizeof(Edje_Message_Float_Set) + (4 * sizeof(double))); - msg->count = 5; - msg->val[0] = e_config->desk_flip_animate_time; - msg->val[1] = (double)desk->x; - msg->val[2] = (double)desk->zone->desk_x_count; - msg->val[3] = (double)desk->y; - msg->val[4] = (double)desk->zone->desk_y_count; - edje_object_message_send(desk->zone->bg_object, EDJE_MESSAGE_FLOAT_SET, 0, msg); + msg = alloca(sizeof(Edje_Message_Int_Set) + (3 * sizeof(int))); + msg->count = 4; + msg->val[0] = desk->x; + msg->val[1] = desk->zone->desk_x_count; + msg->val[2] = desk->y; + msg->val[3] = desk->zone->desk_y_count; + edje_object_message_send(desk->zone->bg_object, EDJE_MESSAGE_INT_SET, 0, msg); if (desk->zone->bg_object) was_zone = 1; - if (e_config->desk_flip_animate_mode == 0) - { - bl = e_container_border_list_first(desk->zone->container); - while ((bd = e_container_border_list_next(bl))) - { - if ((!bd->hidden) && (bd->desk->zone == desk->zone) && (!bd->iconic)) - { - if ((bd->desk == desk) || (bd->sticky)) - e_border_show(bd); - else if (bd->moving) - e_border_desk_set(bd, desk); - else - e_border_hide(bd, 2); - } - } - e_container_border_list_free(bl); - } - - if (e_config->desk_flip_animate_mode > 0) - _e_desk_show_begin(desk, e_config->desk_flip_animate_mode, dx, dy); - else + _e_desk_show_begin(desk, dx, dy); + if (!e_config->desk_flip_animate_type) { if (e_config->focus_last_focused_per_desktop) e_desk_last_focused_focus(desk); @@ -672,10 +644,8 @@ e_desk_window_profile_update(void) static void _e_desk_free(E_Desk *desk) { - if (desk->name) eina_stringshare_del(desk->name); + eina_stringshare_del(desk->name); desk->name = NULL; - if (desk->animator) ecore_animator_del(desk->animator); - desk->animator = NULL; free(desk); } @@ -740,111 +710,25 @@ _e_desk_event_desk_window_profile_change_free(void *data __UNUSED__, void *event } #endif -static void -_e_desk_show_begin(E_Desk *desk, int mode, int dx, int dy) + +static Eina_Bool +_e_desk_transition_setup(E_Border *bd, int dx, int dy, int state) { - E_Border_List *bl; - E_Border *bd; - double t; - - if (dx < 0) dx = -1; - if (dx > 0) dx = 1; - if (dy < 0) dy = -1; - if (dy > 0) dy = 1; - - t = ecore_loop_time_get(); - bl = e_container_border_list_first(desk->zone->container); - while ((bd = e_container_border_list_next(bl))) + e_comp_win_effect_set(bd->cw, e_config->desk_flip_animate_type ?: "none"); + if (e_config->desk_flip_animate_type) { - if ((bd->desk->zone == desk->zone) && (!bd->iconic)) - { - if (bd->moving) - { - bd->fx.start.t = t; - bd->fx.start.x = 0; - bd->fx.start.y = 0; - e_border_desk_set(bd, desk); - e_border_show(bd); - } - else if ((bd->desk == desk) && (!bd->sticky)) - { - e_border_tmp_input_hidden_push(bd); - bd->fx.start.t = t; - if (mode == 1) - { - bd->fx.start.x = bd->zone->w * (dx * 1.5); - bd->fx.start.y = bd->zone->h * (dy * 1.5); - } - else if (mode == 2) - { - int mx, my, bx, by; - double fx, fy, ang, rad, len, lmax; - - mx = bd->zone->x + (bd->zone->w / 2); - my = bd->zone->y + (bd->zone->h / 2); - - bx = bd->x + (bd->w / 2) - mx; - by = bd->y + (bd->h / 2) - my; - if (bx == 0) bx = 1; - if (by == 0) by = 1; - fx = (double)bx / (double)(bd->zone->w / 2); - fy = (double)by / (double)(bd->zone->h / 2); - ang = atan(fy / fx); - if (fx < 0.0) - ang = M_PI + ang; - len = sqrt((bx * bx) + (by * by)); - lmax = sqrt(((bd->zone->w / 2) * (bd->zone->w / 2)) + - ((bd->zone->h / 2) * (bd->zone->h / 2))); - rad = sqrt((bd->w * bd->w) + (bd->h * bd->h)) / 2.0; - bx = cos(ang) * (lmax - len + rad); - by = sin(ang) * (lmax - len + rad); - bd->fx.start.x = bx; - bd->fx.start.y = by; - } - if (bd->fx.start.x < 0) - bd->fx.start.x -= bd->zone->x; - else - bd->fx.start.x += bd->zone->container->w - (bd->zone->x + bd->zone->w); - if (bd->fx.start.y < 0) - bd->fx.start.y -= bd->zone->y; - else - bd->fx.start.y += bd->zone->container->h - (bd->zone->y + bd->zone->h); - e_border_fx_offset(bd, bd->fx.start.x, bd->fx.start.y); - e_border_comp_hidden_set(bd, EINA_TRUE); - } - } + /* set geoms */ + e_comp_win_effect_params_set(bd->cw, 1, (int[]){bd->x, bd->y, bd->w, bd->h, bd->zone->w, bd->zone->h, dx, dy}, 8); + e_comp_win_effect_params_set(bd->cw, 0, (int[]){state}, 1); } - e_container_border_list_free(bl); - if (desk->animator) ecore_animator_del(desk->animator); - desk->animator = ecore_animator_add(_e_desk_show_animator, desk); - desk->animating = EINA_TRUE; + + return !!e_config->desk_flip_animate_type; } static void -_e_desk_show_end(E_Desk *desk) +_e_desk_show_end_serious(E_Desk *desk) { E_Event_Desk_After_Show *ev; - E_Border_List *bl; - E_Border *bd; - - bl = e_container_border_list_first(desk->zone->container); - while ((bd = e_container_border_list_next(bl))) - { - if ((bd->desk->zone == desk->zone) && (!bd->iconic)) - { - if (bd->moving) - e_border_fx_offset(bd, 0, 0); - else if ((bd->desk == desk) && (!bd->sticky)) - { - e_border_fx_offset(bd, 0, 0); - e_border_comp_hidden_set(bd, EINA_FALSE); - - if (!bd->visible) - e_border_show(bd); - } - e_border_tmp_input_hidden_pop(bd); - } - } if ((e_config->focus_policy == E_FOCUS_MOUSE) || (e_config->focus_policy == E_FOCUS_SLOPPY)) @@ -858,212 +742,112 @@ _e_desk_show_end(E_Desk *desk) e_desk_last_focused_focus(desk); } - e_container_border_list_free(bl); ecore_x_window_shadow_tree_flush(); ev = E_NEW(E_Event_Desk_After_Show, 1); - ev->desk = e_desk_current_get(desk->zone); + ev->desk = desk; e_object_ref(E_OBJECT(ev->desk)); ecore_event_add(E_EVENT_DESK_AFTER_SHOW, ev, _e_desk_event_desk_after_show_free, NULL); } -static Eina_Bool -_e_desk_show_animator(void *data) +static void +_e_desk_show_end(void *data, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *source EINA_UNUSED) { - E_Desk *desk; - E_Border_List *bl; - E_Border *bd; - double t, dt, spd; + E_Border *bd = data; - desk = data; + bd->desk->animate_count--; + e_border_comp_hidden_set(bd, EINA_FALSE); + e_border_tmp_input_hidden_pop(bd); + if (bd->desk != e_desk_current_get(bd->zone)) return; + if (!bd->visible) e_border_show(bd); + if (bd->desk->animate_count) return; - if (!desk->animating) - { - _e_desk_show_end(desk); - desk->animator = NULL; - return ECORE_CALLBACK_CANCEL; - } - - t = ecore_loop_time_get(); - dt = -1.0; - spd = e_config->desk_flip_animate_time; - bl = e_container_border_list_first(desk->zone->container); - while ((bd = e_container_border_list_next(bl))) - { - if ((bd->desk->zone == desk->zone) && (!bd->iconic)) - { - if (bd->moving) - { - } - else if ((bd->desk == desk) && (!bd->sticky)) - { - if (!bd->visible) - e_border_show(bd); - - dt = (t - bd->fx.start.t) / spd; - if (dt > 1.0) dt = 1.0; - dt = 1.0 - dt; - dt *= dt; /* decelerate - could be a better hack */ - e_border_fx_offset(bd, - ((double)bd->fx.start.x * dt), - ((double)bd->fx.start.y * dt)); - } - } - } - e_container_border_list_free(bl); - if (dt <= 0.0) - desk->animating = EINA_FALSE; - - return ECORE_CALLBACK_RENEW; + _e_desk_show_end_serious(bd->desk); } static void -_e_desk_hide_begin(E_Desk *desk, int mode, int dx, int dy) +_e_desk_hide_end(void *data, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *source EINA_UNUSED) +{ + E_Border *bd = data; + + bd->desk->animate_count--; + e_border_comp_hidden_set(bd, EINA_FALSE); + e_border_tmp_input_hidden_pop(bd); + e_border_hide(bd, 1); + if (bd->desk->animate_count) return; + ecore_x_window_shadow_tree_flush(); +} + +static void +_e_desk_show_begin(E_Desk *desk, int dx, int dy) { E_Border_List *bl; E_Border *bd; - double t; if (dx < 0) dx = -1; if (dx > 0) dx = 1; if (dy < 0) dy = -1; if (dy > 0) dy = 1; - t = ecore_loop_time_get(); + desk->animate_count = 0; bl = e_container_border_list_first(desk->zone->container); while ((bd = e_container_border_list_next(bl))) { - if ((bd->desk->zone == desk->zone) && (!bd->iconic)) + if ((bd->desk->zone != desk->zone) || (bd->iconic)) continue; + if (bd->moving) { - if (bd->moving) - { - bd->fx.start.t = t; - bd->fx.start.x = 0; - bd->fx.start.y = 0; - } - else if ((bd->desk == desk) && (!bd->sticky)) - { - bd->fx.start.t = t; - if (mode == 1) - { - bd->fx.start.x = bd->zone->w * (-dx * 1.5); - bd->fx.start.y = bd->zone->h * (-dy * 1.5); - } - else if (mode == 2) - { - int mx, my, bx, by; - double fx, fy, ang, rad, len, lmax; - - mx = bd->zone->x + (bd->zone->w / 2); - my = bd->zone->y + (bd->zone->h / 2); - - bx = bd->x + (bd->w / 2) - mx; - by = bd->y + (bd->h / 2) - my; - if (bx == 0) bx = 1; - if (by == 0) by = 1; - fx = (double)bx / (double)(bd->zone->w / 2); - fy = (double)by / (double)(bd->zone->h / 2); - ang = atan(fy / fx); - if (fx < 0.0) - ang = M_PI + ang; - len = sqrt((bx * bx) + (by * by)); - lmax = sqrt(((bd->zone->w / 2) * (bd->zone->w / 2)) + - ((bd->zone->h / 2) * (bd->zone->h / 2))); - rad = sqrt((bd->w * bd->w) + (bd->h * bd->h)) / 2.0; - bx = cos(ang) * (lmax - len + rad); - by = sin(ang) * (lmax - len + rad); - bd->fx.start.x = bx; - bd->fx.start.y = by; - } - if (bd->fx.start.x < 0) - bd->fx.start.x -= bd->zone->x; - else - bd->fx.start.x += bd->zone->container->w - (bd->zone->x + bd->zone->w); - if (bd->fx.start.y < 0) - bd->fx.start.y -= bd->zone->y; - else - bd->fx.start.y += bd->zone->container->h - (bd->zone->y + bd->zone->h); - e_border_fx_offset(bd, 0, 0); - e_border_comp_hidden_set(bd, EINA_TRUE); - } + e_border_desk_set(bd, desk); + e_border_show(bd); + continue; } + if ((bd->desk != desk) || (bd->sticky)) continue; + if (_e_desk_transition_setup(bd, dx, dy, 1)) + { + e_comp_win_effect_stop(bd->cw, _e_desk_hide_end); + e_comp_win_effect_start(bd->cw, _e_desk_show_end, bd); + desk->animate_count++; + e_border_tmp_input_hidden_push(bd); + e_border_comp_hidden_set(bd, EINA_TRUE); + } + e_border_show(bd); } + if (!e_config->desk_flip_animate_type) + _e_desk_show_end_serious(desk); e_container_border_list_free(bl); - if (desk->animator) ecore_animator_del(desk->animator); - desk->animator = ecore_animator_add(_e_desk_hide_animator, desk); - desk->animating = EINA_TRUE; } static void -_e_desk_hide_end(E_Desk *desk) +_e_desk_hide_begin(E_Desk *desk, int dx, int dy) { E_Border_List *bl; E_Border *bd; + if (dx < 0) dx = -1; + if (dx > 0) dx = 1; + if (dy < 0) dy = -1; + if (dy > 0) dy = 1; + + desk->animate_count = 0; bl = e_container_border_list_first(desk->zone->container); while ((bd = e_container_border_list_next(bl))) { - if ((bd->desk->zone == desk->zone) && (!bd->iconic)) + if ((bd->desk->zone != desk->zone) || (bd->iconic)) continue; + if (bd->moving) continue; + if ((bd->desk != desk) || (bd->sticky)) continue; + if (_e_desk_transition_setup(bd, -dx, -dy, 0)) { - if (bd->moving) - e_border_fx_offset(bd, 0, 0); - else if ((bd->desk == desk) && (!bd->sticky)) - { - e_border_fx_offset(bd, 0, 0); - e_border_comp_hidden_set(bd, EINA_FALSE); - e_border_hide(bd, 2); - } + e_comp_win_effect_stop(bd->cw, _e_desk_show_end); + e_comp_win_effect_start(bd->cw, _e_desk_hide_end, bd); + desk->animate_count++; + e_border_tmp_input_hidden_push(bd); + e_border_comp_hidden_set(bd, EINA_TRUE); } + else + e_border_hide(bd, 1); } + if (!e_config->desk_flip_animate_type) + ecore_x_window_shadow_tree_flush(); e_container_border_list_free(bl); - ecore_x_window_shadow_tree_flush(); -} - -static Eina_Bool -_e_desk_hide_animator(void *data) -{ - E_Desk *desk; - E_Border_List *bl; - E_Border *bd; - double t, dt, spd; - - desk = data; - - if (!desk->animating) - { - _e_desk_hide_end(desk); - desk->animator = NULL; - return ECORE_CALLBACK_CANCEL; - } - - t = ecore_loop_time_get(); - dt = -1.0; - spd = e_config->desk_flip_animate_time; - bl = e_container_border_list_first(desk->zone->container); - while ((bd = e_container_border_list_next(bl))) - { - if ((bd->desk->zone == desk->zone) && (!bd->iconic)) - { - if (bd->moving) - { - } - else if ((bd->desk == desk) && (!bd->sticky)) - { - dt = (t - bd->fx.start.t) / spd; - if (dt > 1.0) dt = 1.0; - dt *= dt; /* decelerate - could be a better hack */ - e_border_fx_offset(bd, - ((double)bd->fx.start.x * dt), - ((double)bd->fx.start.y * dt)); - } - } - } - e_container_border_list_free(bl); - - if ((dt < 0.0) || (dt >= 1.0)) - desk->animating = EINA_FALSE; - - return ECORE_CALLBACK_RENEW; } #if (ECORE_VERSION_MAJOR > 1) || (ECORE_VERSION_MINOR >= 8) diff --git a/src/bin/e_desk.h b/src/bin/e_desk.h index 03d89cbef..4c229f566 100644 --- a/src/bin/e_desk.h +++ b/src/bin/e_desk.h @@ -34,8 +34,7 @@ struct _E_Desk Evas_Object *bg_object; - Ecore_Animator *animator; - Eina_Bool animating; + unsigned int animate_count; }; struct _E_Event_Desk_Show diff --git a/src/bin/e_dnd.c b/src/bin/e_dnd.c index 99c382664..aec67a0d0 100644 --- a/src/bin/e_dnd.c +++ b/src/bin/e_dnd.c @@ -608,8 +608,8 @@ _e_drag_coords_update(const E_Drop_Handler *h, int *dx, int *dy) break; case E_BORDER_TYPE: - px = ((E_Border *)(h->obj))->x + ((E_Border *)(h->obj))->fx.x; - py = ((E_Border *)(h->obj))->y + ((E_Border *)(h->obj))->fx.y; + px = ((E_Border *)(h->obj))->x; + py = ((E_Border *)(h->obj))->y; break; case E_POPUP_TYPE: diff --git a/src/bin/e_moveresize.c b/src/bin/e_moveresize.c index fcb5217e1..e22907bd2 100644 --- a/src/bin/e_moveresize.c +++ b/src/bin/e_moveresize.c @@ -65,7 +65,7 @@ _e_resize_begin(void *data __UNUSED__, void *border) return; if (e_config->resize_info_follows) - _e_move_resize_object_coords_set(bd->x + bd->fx.x, bd->y + bd->fx.y, bd->w, bd->h); + _e_move_resize_object_coords_set(bd->x, bd->y, bd->w, bd->h); else _e_move_resize_object_coords_set(bd->zone->x, bd->zone->y, bd->zone->w, bd->zone->h); @@ -120,7 +120,7 @@ _e_resize_update(void *data __UNUSED__, void *border) if (!_disp_pop) return; if (e_config->resize_info_follows) - _e_move_resize_object_coords_set(bd->x + bd->fx.x, bd->y + bd->fx.y, bd->w, bd->h); + _e_move_resize_object_coords_set(bd->x, bd->y, bd->w, bd->h); _e_resize_border_extents(bd, &w, &h); @@ -176,7 +176,7 @@ _e_move_begin(void *data __UNUSED__, void *border) return; if (e_config->move_info_follows) - _e_move_resize_object_coords_set(bd->x + bd->fx.x, bd->y + bd->fx.y, bd->w, bd->h); + _e_move_resize_object_coords_set(bd->x, bd->y, bd->w, bd->h); else _e_move_resize_object_coords_set(bd->zone->x, bd->zone->y, bd->zone->w, bd->zone->h); @@ -224,7 +224,7 @@ _e_move_update(void *data __UNUSED__, void *border) if (!_disp_pop) return; if (e_config->move_info_follows) - _e_move_resize_object_coords_set(bd->x + bd->fx.x, bd->y + bd->fx.y, bd->w, bd->h); + _e_move_resize_object_coords_set(bd->x, bd->y, bd->w, bd->h); if (!visible) { diff --git a/src/bin/e_popup.c b/src/bin/e_popup.c index 3d760292d..cc4781056 100644 --- a/src/bin/e_popup.c +++ b/src/bin/e_popup.c @@ -66,7 +66,7 @@ _e_popup_autoclose_setup(E_Popup *pop) if (pop->comp_layer == E_COMP_CANVAS_LAYER_LAYOUT) { e_layout_pack(e_comp_get(pop)->layout, event_rect); - e_layout_child_lower_below(event_rect, pop->cw->shobj); + e_layout_child_lower_below(event_rect, pop->cw->effect_obj); } else evas_object_layer_set(event_rect, pop->comp_layer - 1); diff --git a/src/modules/conf_display/e_int_config_desks.c b/src/modules/conf_display/e_int_config_desks.c index 24d438ebe..860eb5dbc 100644 --- a/src/modules/conf_display/e_int_config_desks.c +++ b/src/modules/conf_display/e_int_config_desks.c @@ -22,7 +22,6 @@ struct _E_Config_Dialog_Data #endif int flip_mode; int flip_interp; - double flip_speed; /*- GUI -*/ Evas_Object *preview; @@ -68,7 +67,6 @@ _fill_data(E_Config_Dialog_Data *cfdata) #endif cfdata->flip_mode = e_config->desk_flip_animate_mode; cfdata->flip_interp = e_config->desk_flip_animate_interpolation; - cfdata->flip_speed = e_config->desk_flip_animate_time; } static void * @@ -106,7 +104,6 @@ _basic_apply_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata) e_config->desk_flip_animate_mode = cfdata->flip_mode; e_config->desk_flip_animate_interpolation = cfdata->flip_interp; - e_config->desk_flip_animate_time = cfdata->flip_speed; e_config->edge_flip_dragging = cfdata->edge_flip_dragging; e_config->desk_flip_wrap = cfdata->flip_wrap; @@ -143,7 +140,6 @@ _basic_check_changed(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfda return ((e_config->desk_flip_animate_mode != cfdata->flip_mode) || (e_config->desk_flip_animate_interpolation != cfdata->flip_interp) || - (e_config->desk_flip_animate_time != cfdata->flip_speed) || (e_config->edge_flip_dragging != cfdata->edge_flip_dragging) || (e_config->desk_flip_wrap != cfdata->flip_wrap) #if (ECORE_VERSION_MAJOR > 1) || (ECORE_VERSION_MINOR >= 8) @@ -220,14 +216,6 @@ _basic_create_widgets(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dial e_widget_on_change_hook_set(ob, _cb_disable_flip_anim, cfdata); e_widget_list_object_append(o, ob, 1, 0, 0.5); - ob = e_widget_label_add(evas, _("Animation speed")); - cfdata->flip_anim_list = eina_list_append(cfdata->flip_anim_list, ob); - e_widget_list_object_append(o, ob, 1, 0, 0.5); - ob = e_widget_slider_add(evas, 1, 0, _("%1.1f s"), 0, 5, 0.05, 0, - &(cfdata->flip_speed), NULL, 150); - e_widget_disabled_set(ob, !cfdata->flip_mode); - cfdata->flip_anim_list = eina_list_append(cfdata->flip_anim_list, ob); - e_widget_list_object_append(o, ob, 1, 0, 0.5); e_widget_toolbook_page_append(otb, NULL, _("Flip Animation"), o, 1, 0, 1, 0, 0.5, 0.0); diff --git a/src/modules/everything/evry_gadget.c b/src/modules/everything/evry_gadget.c index 37e18e247..5ff75ca06 100644 --- a/src/modules/everything/evry_gadget.c +++ b/src/modules/everything/evry_gadget.c @@ -17,13 +17,13 @@ struct _Instance int mouse_down; - Ecore_Animator *hide_animator; double hide_start; int hide_x, hide_y; Eina_List *handlers; Eina_Bool hidden; + Eina_Bool animating; Eina_Bool illume_mode; }; @@ -217,7 +217,6 @@ _del_func(void *data, void *obj __UNUSED__) e_gadcon_locked_set(inst->gcc->gadcon, 0); - if (inst->hide_animator) ecore_animator_del(inst->hide_animator); inst->del_fn = NULL; inst->win = NULL; edje_object_signal_emit(inst->o_button, "e,state,unfocused", "e"); @@ -229,39 +228,18 @@ _cb_menu_configure(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__) _conf_dialog(data); } -static Eina_Bool -_hide_animator(void *data) +static void +_hide_done(void *data, Evas_Object *obj EINA_UNUSED, const char *s EINA_UNUSED, const char *ss EINA_UNUSED) { Instance *inst = data; - E_Win *ewin = inst->win->ewin; - double val; - int finished = 0; - if (!inst->hide_start) - inst->hide_start = ecore_loop_time_get(); + /* go bac to subject selector */ + evry_selectors_switch(inst->win, -1, 0); + evry_selectors_switch(inst->win, -1, 0); - val = (ecore_loop_time_get() - inst->hide_start) / 0.4; - if (val > 0.99) finished = 1; - - val = ecore_animator_pos_map(val, ECORE_POS_MAP_DECELERATE, 0.0, 0.0); - - e_border_fx_offset(ewin->border, - (val * (inst->hide_x * ewin->w)), - (val * (inst->hide_y * ewin->h))); - - if (finished) - { - /* go bac to subject selector */ - evry_selectors_switch(inst->win, -1, 0); - evry_selectors_switch(inst->win, -1, 0); - - inst->hide_animator = NULL; - e_border_iconify(ewin->border); - e_border_fx_offset(ewin->border, 0, 0); - return EINA_FALSE; - } - - return EINA_TRUE; + e_border_iconify(inst->win->ewin->border); + e_comp_win_effect_set(inst->win->ewin->border->cw, "none"); + inst->animating = 0; } static void @@ -269,9 +247,16 @@ _evry_hide_func(Evry_Window *win, int finished __UNUSED__) { Instance *inst = win->data; - inst->hide_start = 0; - inst->hide_animator = ecore_animator_add(_hide_animator, inst); - inst->hidden = EINA_TRUE; + e_comp_win_effect_set(inst->win->ewin->border->cw, "pane"); + /* set geoms */ + e_comp_win_effect_params_set(inst->win->ewin->border->cw, 1, + (int[]){inst->win->ewin->x, inst->win->ewin->y, + inst->win->ewin->w, inst->win->ewin->h, + inst->win->ewin->border->zone->w, inst->win->ewin->border->zone->h, + inst->hide_x, inst->hide_y}, 8); + e_comp_win_effect_params_set(inst->win->ewin->border->cw, 0, (int[]){0}, 1); + e_comp_win_effect_start(inst->win->ewin->border->cw, _hide_done, inst); + inst->hidden = inst->animating = EINA_TRUE; } static Eina_Bool @@ -288,9 +273,6 @@ _cb_focus_out(void *data, int type __UNUSED__, void *event) if ((!inst) || (!inst->win)) return ECORE_CALLBACK_PASS_ON; - if (inst->hide_animator) - return ECORE_CALLBACK_PASS_ON; - if (inst->win->ewin->border != ev->border) return ECORE_CALLBACK_PASS_ON; @@ -459,15 +441,11 @@ _button_cb_mouse_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED_ win = inst->win; bd = win->ewin->border; - if (inst->hide_animator) - { - ecore_animator_del(inst->hide_animator); - inst->hide_animator = NULL; - } - if (inst->hidden || !bd->focused) { - e_border_fx_offset(bd, 0, 0); + if (inst->animating) + e_comp_win_effect_stop(bd->cw, NULL); + e_comp_win_effect_set(bd->cw, "none"); e_border_uniconify(bd); e_border_raise(bd); e_border_focus_set(bd, 1, 1); diff --git a/src/modules/illume-home/e_busycover.c b/src/modules/illume-home/e_busycover.c index 4582576a1..bd9035ced 100644 --- a/src/modules/illume-home/e_busycover.c +++ b/src/modules/illume-home/e_busycover.c @@ -24,7 +24,7 @@ e_busycover_new(E_Win *win) edje_object_part_text_set(cover->o_base, "e.text.title", _("LOADING")); evas_object_move(cover->o_base, win->x, win->y); evas_object_resize(cover->o_base, win->w, win->h); - evas_object_layer_set(cover->o_base, 999); //FIXME: COMP + evas_object_layer_set(cover->o_base, 999); return cover; } diff --git a/src/modules/illume-home/e_mod_main.c b/src/modules/illume-home/e_mod_main.c index c5468df01..f5f24d9d8 100644 --- a/src/modules/illume-home/e_mod_main.c +++ b/src/modules/illume-home/e_mod_main.c @@ -594,7 +594,7 @@ _il_home_cb_border_add(void *data __UNUSED__, int type __UNUSED__, void *event) exe->border->x = exe->zone->x; exe->border->y = exe->zone->y; exe->border->changes.pos = 1; - exe->border->changed = 1; + BD_CHANGED(exe->border); } if (exe->handle) { diff --git a/src/modules/illume-indicator/e_mod_ind_win.c b/src/modules/illume-indicator/e_mod_ind_win.c index 2b3fe7263..ae549d866 100644 --- a/src/modules/illume-indicator/e_mod_ind_win.c +++ b/src/modules/illume-indicator/e_mod_ind_win.c @@ -417,7 +417,7 @@ _e_mod_ind_win_cb_mouse_move(void *data, Evas *evas __UNUSED__, Evas_Object *obj { bd->y = ny; bd->changes.pos = 1; - bd->changed = 1; + BD_CHANGED(bd); e_win_move(iwin->win, iwin->win->x, ny); } } diff --git a/src/modules/illume-softkey/e_mod_sft_win.c b/src/modules/illume-softkey/e_mod_sft_win.c index 6920fcbcc..5937d5908 100644 --- a/src/modules/illume-softkey/e_mod_sft_win.c +++ b/src/modules/illume-softkey/e_mod_sft_win.c @@ -87,7 +87,8 @@ e_mod_sft_win_new(E_Zone *zone) _e_mod_sft_win_create_extra_buttons(swin); edje_object_size_min_calc(swin->o_base, &mw, &mh); - + + mh = E_CLAMP(mh, 10, zone->h / 3); /* set minimum size of this window */ e_win_size_min_set(swin->win, zone->w, mh); diff --git a/src/modules/illume2/e_mod_kbd.c b/src/modules/illume2/e_mod_kbd.c index 8791f4546..6a7bab5a1 100644 --- a/src/modules/illume2/e_mod_kbd.c +++ b/src/modules/illume2/e_mod_kbd.c @@ -154,7 +154,9 @@ e_mod_kbd_show(void) /* show the border */ if (_e_illume_kbd->border) { - e_border_fx_offset(_e_illume_kbd->border, 0, 0); + e_comp_win_effect_set(_e_illume_kbd->border->cw, "move"); + /* unuse location */ + e_comp_win_effect_params_set(_e_illume_kbd->border->cw, 0, (int[]){0}, 1); if (!_e_illume_kbd->border->visible) e_border_show(_e_illume_kbd->border); e_border_raise(_e_illume_kbd->border); @@ -322,12 +324,12 @@ _e_mod_kbd_cb_border_focus_out(void *data __UNUSED__, int type __UNUSED__, void e_mod_kbd_hide(); /* tell the focused border it changed so layout gets udpated */ - if (_prev_focused_border) + if (_prev_focused_border && (!e_object_is_del(E_OBJECT(_prev_focused_border)))) { if (!e_illume_border_is_conformant(_prev_focused_border)) { _prev_focused_border->changes.size = 1; - _prev_focused_border->changed = 1; + BD_CHANGED(_prev_focused_border); } } @@ -461,8 +463,11 @@ _e_mod_kbd_hide(void) { if (_e_illume_kbd->border) { - e_border_fx_offset(_e_illume_kbd->border, 0, - _e_illume_kbd->border->h); + e_comp_win_effect_set(_e_illume_kbd->border->cw, "move"); + /* set location */ + e_comp_win_effect_params_set(_e_illume_kbd->border->cw, 1, (int[]){0, _e_illume_kbd->border->h}, 2); + /* use location */ + e_comp_win_effect_params_set(_e_illume_kbd->border->cw, 0, (int[]){1}, 1); e_border_hide(_e_illume_kbd->border, 2); } } @@ -511,9 +516,15 @@ _e_mod_kbd_cb_animate(void *data __UNUSED__) _e_illume_kbd->adjust = ((_e_illume_kbd->adjust_end * v) + (_e_illume_kbd->adjust_start * (1.0 - v))); - if (_e_illume_kbd->border) - e_border_fx_offset(_e_illume_kbd->border, 0, - (_e_illume_kbd->border->h - _e_illume_kbd->adjust)); + if ((_e_illume_kbd->border && _e_illume_kbd->border->cw)) + { + e_comp_win_effect_set(_e_illume_kbd->border->cw, "move"); + /* set location */ + e_comp_win_effect_params_set(_e_illume_kbd->border->cw, 1, + (int[]){0, _e_illume_kbd->border->h - _e_illume_kbd->adjust}, 2); + /* use location */ + e_comp_win_effect_params_set(_e_illume_kbd->border->cw, 0, (int[]){1}, 1); + } if (t == _e_illume_kbd->len) { @@ -563,7 +574,17 @@ _e_mod_kbd_border_adopt(E_Border *bd) if (!_e_illume_kbd->visible) { - e_border_fx_offset(bd, 0, bd->h); + E_Comp_Win *cw = bd->cw; + + if (!cw) cw = e_comp_win_find(bd->win); + if (cw) + { + e_comp_win_effect_set(cw, "move"); + /* set location */ + e_comp_win_effect_params_set(cw, 1, (int[]){0, bd->h}, 2); + /* use location */ + e_comp_win_effect_params_set(cw, 0, (int[]){1}, 1); + } _e_mod_kbd_layout_send(); } } @@ -656,7 +677,7 @@ _e_mod_kbd_changes_send(void) if (!e_illume_border_is_conformant(_prev_focused_border)) { _prev_focused_border->changes.size = 1; - _prev_focused_border->changed = 1; + BD_CHANGED(_prev_focused_border); } } } @@ -669,7 +690,7 @@ _e_mod_kbd_changes_send(void) if (!e_illume_border_is_conformant(_focused_border)) { _focused_border->changes.size = 1; - _focused_border->changed = 1; + BD_CHANGED(_focused_border); } } } diff --git a/src/modules/illume2/e_mod_quickpanel.c b/src/modules/illume2/e_mod_quickpanel.c index 0458eabf4..fb7d9ca61 100644 --- a/src/modules/illume2/e_mod_quickpanel.c +++ b/src/modules/illume2/e_mod_quickpanel.c @@ -135,16 +135,14 @@ e_mod_quickpanel_show(E_Illume_Quickpanel *qp) EINA_LIST_FOREACH(qp->borders, l, bd) { if (!bd->visible) e_illume_border_show(bd); - if (qp->vert.dir == 0) - { - e_border_fx_offset(bd, 0, ny); - ny += bd->h; - } - else - { - ny -= bd->h; - e_border_fx_offset(bd, 0, ny); - } + + if (qp->vert.dir) ny -= bd->h; + e_comp_win_effect_set(bd->cw, "move"); + /* set location */ + e_comp_win_effect_params_set(bd->cw, 1, (int[]){0, ny}, 2); + /* use location */ + e_comp_win_effect_params_set(bd->cw, 0, (int[]){1}, 1); + if (qp->vert.dir == 0) ny += bd->h; } qp->visible = 1; _e_mod_quickpanel_clickwin_show(qp); @@ -458,7 +456,9 @@ _e_mod_quickpanel_hide(E_Illume_Quickpanel *qp) /* if we are not animating, hide the qp borders */ EINA_LIST_REVERSE_FOREACH(qp->borders, l, bd) { - e_border_fx_offset(bd, 0, 0); + e_comp_win_effect_set(bd->cw, "move"); + /* unuse location */ + e_comp_win_effect_params_set(bd->cw, 0, (int[]){0}, 1); if (bd->visible) e_illume_border_hide(bd); } qp->visible = 0; @@ -543,20 +543,24 @@ _e_mod_quickpanel_animate_down(E_Illume_Quickpanel *qp) { /* don't adjust borders that are being deleted */ if (e_object_is_del(E_OBJECT(bd))) continue; - if (bd->fx.y != (qp->vert.adjust + pbh)) - e_border_fx_offset(bd, 0, (qp->vert.adjust + pbh)); + e_comp_win_effect_set(bd->cw, "move"); + /* set location */ + e_comp_win_effect_params_set(bd->cw, 1, + (int[]){0, qp->vert.adjust + pbh}, 2); + /* use location */ + e_comp_win_effect_params_set(bd->cw, 0, (int[]){1}, 1); pbh += bd->h; if (!qp->visible) { - if (bd->fx.y > 0) + if (qp->vert.adjust + pbh > 0) { if (!bd->visible) e_illume_border_show(bd); } } else { - if (bd->fx.y <= 10) + if (qp->vert.adjust + pbh <= 10) { if (bd->visible) e_illume_border_hide(bd); } @@ -578,19 +582,23 @@ _e_mod_quickpanel_animate_up(E_Illume_Quickpanel *qp) /* don't adjust borders that are being deleted */ if (e_object_is_del(E_OBJECT(bd))) continue; pbh -= bd->h; - if (bd->fx.y != (qp->vert.adjust + pbh)) - e_border_fx_offset(bd, 0, (qp->vert.adjust + pbh)); + e_comp_win_effect_set(bd->cw, "move"); + /* set location */ + e_comp_win_effect_params_set(bd->cw, 1, + (int[]){0, qp->vert.adjust + pbh}, 2); + /* use location */ + e_comp_win_effect_params_set(bd->cw, 0, (int[]){1}, 1); if (!qp->visible) { - if (bd->fx.y < 0) + if (qp->vert.adjust + pbh < 0) { if (!bd->visible) e_illume_border_show(bd); } } else { - if (bd->fx.y >= -10) + if (qp->vert.adjust + pbh >= -10) { if (bd->visible) e_illume_border_hide(bd); } diff --git a/src/modules/illume2/policies/illume/policy.c b/src/modules/illume2/policies/illume/policy.c index f3d4a683c..5e619a2c4 100644 --- a/src/modules/illume2/policies/illume/policy.c +++ b/src/modules/illume2/policies/illume/policy.c @@ -107,7 +107,7 @@ _policy_border_move(E_Border *bd, int x, int y) bd->x = x; bd->y = y; bd->changes.pos = 1; - bd->changed = 1; + BD_CHANGED(bd); } static void @@ -120,7 +120,7 @@ _policy_border_resize(E_Border *bd, int w, int h) bd->client.w = (bd->w - (bd->client_inset.l + bd->client_inset.r)); bd->client.h = (bd->h - (bd->client_inset.t + bd->client_inset.b)); bd->changes.size = 1; - bd->changed = 1; + BD_CHANGED(bd); } static void @@ -305,12 +305,13 @@ _policy_zone_layout_update(E_Zone *zone) if (bd->zone != zone) continue; /* skip special windows */ + if (e_object_is_del(E_OBJECT(bd))) continue; if (e_illume_border_is_keyboard(bd)) continue; if (e_illume_border_is_quickpanel(bd)) continue; /* signal a changed pos here so layout gets updated */ bd->changes.pos = 1; - bd->changed = 1; + BD_CHANGED(bd); } } @@ -1513,7 +1514,7 @@ _policy_zone_move_resize(E_Zone *zone) /* signal a changed pos here so layout gets updated */ bd->changes.pos = 1; - bd->changed = 1; + BD_CHANGED(bd); } } @@ -1882,7 +1883,9 @@ _policy_property_change(Ecore_X_Event_Window_Property *event) /* adjust for keyboard visibility because keyboard uses fx_offset */ y = 0; - if (kbd->border->fx.y <= 0) y = kbd->border->y; + if (kbd->border->cw && + (!e_util_strcmp(edje_object_part_state_get(kbd->border->cw->effect_obj, "mover", NULL), "custom"))) + y = kbd->border->y; /* look for conformant borders */ EINA_LIST_FOREACH(e_border_client_list(), l, bd) diff --git a/src/modules/illume2/policies/tablet/policy.c b/src/modules/illume2/policies/tablet/policy.c index 7a682403c..935c540d4 100644 --- a/src/modules/illume2/policies/tablet/policy.c +++ b/src/modules/illume2/policies/tablet/policy.c @@ -89,7 +89,7 @@ _policy_border_move(E_Border *bd, int x, int y) bd->x = x; bd->y = y; bd->changes.pos = 1; - bd->changed = 1; + BD_CHANGED(bd); } static void @@ -102,7 +102,7 @@ _policy_border_resize(E_Border *bd, int w, int h) bd->client.w = (bd->w - (bd->client_inset.l + bd->client_inset.r)); bd->client.h = (bd->h - (bd->client_inset.t + bd->client_inset.b)); bd->changes.size = 1; - bd->changed = 1; + BD_CHANGED(bd); } static void @@ -259,12 +259,13 @@ _policy_zone_layout_update(E_Zone *zone) if (bd->zone != zone) continue; /* skip special windows */ + if (e_object_is_del(E_OBJECT(bd))) continue; if (e_illume_border_is_keyboard(bd)) continue; if (e_illume_border_is_quickpanel(bd)) continue; /* signal a changed pos here so layout gets updated */ bd->changes.pos = 1; - bd->changed = 1; + BD_CHANGED(bd); } } @@ -1165,7 +1166,7 @@ _policy_zone_move_resize(E_Zone *zone) if (bd->zone != zone) continue; bd->changes.pos = 1; - bd->changed = 1; + BD_CHANGED(bd); } } @@ -1497,7 +1498,9 @@ _policy_property_change(Ecore_X_Event_Window_Property *event) /* adjust Y for keyboard visibility because keyboard uses fx_offset */ y = 0; - if (kbd->border->fx.y <= 0) y = kbd->border->y; + if (kbd->border->cw && + (!e_util_strcmp(edje_object_part_state_get(kbd->border->cw->effect_obj, "mover", NULL), "custom"))) + y = kbd->border->y; /* look for conformant borders */ EINA_LIST_FOREACH(e_border_client_list(), l, bd)