giant comp rejiggering commit #6:
authorMike Blumenkrantz <m.blumenkran@samsung.com>
Thu, 28 Feb 2013 15:20:32 +0000 (15:20 +0000)
committerMike Blumenkrantz <m.blumenkran@samsung.com>
Mon, 15 Apr 2013 07:39:16 +0000 (08:39 +0100)
* border->fx REMOVED, related border api REMOVED

* comp edc has new class of groups: e/comp/effects[/auto]
** these are effects which can be applied to any compositor object through the e_comp_win_effect* api and are written in embryo
*** two types - base and auto - base = manual, for use with animators; auto are "trigger and forget", for use as actual effects

* desk flip transition animations moved to comp effects and FIXED(ish)

* "zoom" effect renamed to "diagonal" for slightly less misleading name since it never did any zooming

* actual "zoom" effect added

* border hierarchy now as follows: cw->effect_obj swallows cw->shobj, cw->shobj swallows cw->bd->bg_object ?: cw->obj, if (cw->bd->bg_object) cw->bd->bg_object swallows cw->obj
** cw->effect_obj now used for all positioning and comp logic
** cw->effect_obj ONLY used for object transformation effects (moving, zooming, fading, etc)
** cw->shobj ONLY for comp visual/non-movement effects (focus effect, unfocus opacity, legacy shadows); this is a candidate for removal/rewrite in E19

* even more comp shape rewrites

* desk flip animation time now controlled by theme since edje doesn't support setting transition time in C; related config value removed

* desk flip transitions (in e_desk.c) rewritten

* various modules (evry/illume2) updated to use comp effects instead of fx offset

* desk flip configuration BROKEN(ish)

26 files changed:
ChangeLog
NEWS
data/themes/edc/comp.edc
data/themes/edc/illume.edc
src/bin/e_border.c
src/bin/e_border.h
src/bin/e_comp.c
src/bin/e_comp.h
src/bin/e_config.c
src/bin/e_config.h
src/bin/e_configure_option.c
src/bin/e_desk.c
src/bin/e_desk.h
src/bin/e_dnd.c
src/bin/e_moveresize.c
src/bin/e_popup.c
src/modules/conf_display/e_int_config_desks.c
src/modules/everything/evry_gadget.c
src/modules/illume-home/e_busycover.c
src/modules/illume-home/e_mod_main.c
src/modules/illume-indicator/e_mod_ind_win.c
src/modules/illume-softkey/e_mod_sft_win.c
src/modules/illume2/e_mod_kbd.c
src/modules/illume2/e_mod_quickpanel.c
src/modules/illume2/policies/illume/policy.c
src/modules/illume2/policies/tablet/policy.c

index 5204c34..f365830 100644 (file)
--- 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 a25ba46..c01ae23 100644 (file)
--- 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.
index 7f0831d..4bdd060 100644 (file)
@@ -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;
index 7f55025..54d8818 100644 (file)
@@ -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;
index cbf277f..e6653ea 100644 (file)
@@ -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;
index fd4dac4..b89a7ff 100644 (file)
@@ -177,16 +177,6 @@ struct _E_Border
 
    struct
    {
-      int x, y;
-      struct
-      {
-         int    x, y;
-         double t;
-      } start;
-   } fx;
-
-   struct
-   {
       int l, r, t, b;
       Eina_Bool calc : 1; // inset has been calculated
    } client_inset;
@@ -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);
index ca72ab7..b5d6601 100644 (file)
@@ -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");
+             evas_object_name_set(cw->effect_obj, "cw->effect_obj::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)
+        else
           {
-             evas_object_data_set(cw->shobj, "menu", cw->menu);
-             evas_object_name_set(cw->shobj, "cw->shobj::MENU");
+             evas_object_name_set(cw->shobj, "cw->shobj::WINDOW");
+             evas_object_name_set(cw->effect_obj, "cw->effect_obj::WINDOW");
           }
-        else
-          evas_object_name_set(cw->shobj, "cw->shobj::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)
 {
index b3d56b3..f712376 100644 (file)
@@ -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);
index f70c19b..3fd734c 100644 (file)
@@ -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);
index 6a6c1f5..031fec3 100644 (file)
@@ -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
index 7442759..0e71d55 100644 (file)
@@ -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;
index 3dce7f9..4c73b1c 100644 (file)
@@ -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)
-{
-   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)))
+static Eina_Bool
+_e_desk_transition_setup(E_Border *bd, int dx, int dy, int state)
+{
+   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;
-     }
+   _e_desk_show_end_serious(bd->desk);
+}
 
-   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;
+static void
+_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;
 
-   return ECORE_CALLBACK_RENEW;
+   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_hide_begin(E_Desk *desk, int mode, int dx, int dy)
+_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;
           }
-     }
-   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_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->desk != desk) || (bd->sticky)) continue;
+        if (_e_desk_transition_setup(bd, dx, dy, 1))
           {
-             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_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);
-   ecore_x_window_shadow_tree_flush();
 }
 
-static Eina_Bool
-_e_desk_hide_animator(void *data)
+static void
+_e_desk_hide_begin(E_Desk *desk, int dx, int dy)
 {
-   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;
-     }
+   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();
-   dt = -1.0;
-   spd = e_config->desk_flip_animate_time;
+   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)
-               {
-               }
-             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_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);
-
-   if ((dt < 0.0) || (dt >= 1.0))
-     desk->animating = EINA_FALSE;
-
-   return ECORE_CALLBACK_RENEW;
 }
 
 #if (ECORE_VERSION_MAJOR > 1) || (ECORE_VERSION_MINOR >= 8)
index 03d89cb..4c229f5 100644 (file)
@@ -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
index 99c3826..aec67a0 100644 (file)
@@ -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:
index fcb5217..e22907b 100644 (file)
@@ -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)
      {
index 3d76029..cc47810 100644 (file)
@@ -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);
index 24d438e..860eb5d 100644 (file)
@@ -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);
 
index 37e18e2..5ff75ca 100644 (file)
@@ -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();
-
-   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;
-     }
+   /* go bac to subject selector */
+   evry_selectors_switch(inst->win, -1, 0);
+   evry_selectors_switch(inst->win, -1, 0);
 
-   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);
index 4582576..bd9035c 100644 (file)
@@ -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;
 }
 
index c5468df..f5f24d9 100644 (file)
@@ -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) 
           {
index 2b3fe72..ae549d8 100644 (file)
@@ -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);
           }
      }
index 6920fcb..5937d59 100644 (file)
@@ -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);
 
index 8791f45..6a7bab5 100644 (file)
@@ -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);
           }
      }
 }
index 0458eab..fb7d9ca 100644 (file)
@@ -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);
                }
index f3d4a68..5e619a2 100644 (file)
@@ -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) 
index 7a68240..935c540 100644 (file)
@@ -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)