--- /dev/null
+group { name: "e/comp/effects/background-zoom";
+ script {
+ public message(Msg_Type:type, id, ...) {
+ if ((type == MSG_INT_SET) && (id == 0)) {
+ /*set state */
+ new st;
+ st = getarg(2);
+ if (st == 0)
+ {
+ set_state(PART:"e.swallow.content", "zoom-in", 0.0);
+ }
+ else if (st == 1)
+ {
+ set_state(PART:"e.swallow.content", "zoom-out", 0.0);
+ }
+ } else if ((type == MSG_INT_SET) && (id == 1))
+ {
+ }
+ }
+ }
+ parts {
+ part { name: "clipper";
+ type: RECT;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ color: 255 255 255 255;
+ rel1.relative: -1.0 -1.0;
+ rel1.offset: -9999 -9999;
+ rel2.relative: 2.0 2.0;
+ rel2.offset: 9999 9999;
+ visible: 1;
+ }
+ }
+ part { name: "shower";
+ type: SPACER;
+ description { state: "default" 0.0;
+ rel1.relative: 0 0;
+ rel2.relative: 1 1;
+ }
+ }
+ part { name: "e.swallow.content"; type: SWALLOW;
+ type: SWALLOW;
+ clip_to: "clipper";
+ description { state: "default" 0.0;
+ rel1.to: "shower";
+ rel2.to: "shower";
+ map.on : 0;
+ }
+ description { state: "zoom-in" 0.0;
+ rel1.to: "shower";
+ rel2.to: "shower";
+ map {
+ on: 1;
+ smooth: 1;
+ zoom.x: 1;
+ zoom.y: 1;
+ }
+ }
+ description { state: "zoom-in" 1.0;
+ rel1.to: "shower";
+ rel2.to: "shower";
+ map {
+ on: 1;
+ smooth: 1;
+ zoom.x: 1.2;
+ zoom.y: 1.2;
+ }
+ }
+ description { state: "zoom-out" 0.0;
+ rel1.to: "shower";
+ rel2.to: "shower";
+ map {
+ on: 1;
+ smooth: 1;
+ zoom.x: 1.2;
+ zoom.y: 1.2;
+ }
+ }
+ description { state: "zoom-out" 1.0;
+ rel1.to: "shower";
+ rel2.to: "shower";
+ map {
+ on: 1;
+ smooth: 1;
+ zoom.x: 1;
+ zoom.y: 1;
+ }
+ }
+ }
+ }
+ programs {
+ program { name: "zoom-in1";
+ signal: "e,action,go";
+ source: "e";
+ filter: "e.swallow.content" "zoom-in";
+ action: STATE_SET "zoom-in" 1.0;
+ transition: CUBIC_BEZIER 0.3 0.45 0.03 0.41 1.0;
+ target: "e.swallow.content";
+ after: "zoom-in2";
+ }
+ program { name: "zoom-in2";
+ action: STATE_SET "default" 0.0;
+ target: "e.swallow.content";
+ after: "done";
+ }
+ program { name: "zoom-out1";
+ signal: "e,action,go";
+ source: "e";
+ filter: "e.swallow.content" "zoom-out";
+ action: STATE_SET "zoom-out" 1.0;
+ transition: CUBIC_BEZIER 0.25 0.45 0.03 0.41 1.0;
+ target: "e.swallow.content";
+ after: "zoom-out2";
+ }
+ program { name: "zoom-out2";
+ action: STATE_SET "default" 0.0;
+ target: "e.swallow.content";
+ after: "done";
+ }
+ program { name: "done";
+ action: SIGNAL_EMIT "e,action,done" "e";
+ }
+ }
+}
Evas_Object *under;
unsigned int under_ref;
+
+ unsigned int bg_animating;
} E_Effect_Client;
typedef struct
if (group == E_EFFECT_GROUP_KEYBOARD)
e_comp_object_effect_set(ec->frame, "keyboard");
+ else if (group == E_EFFECT_GROUP_BACKGROUND)
+ e_comp_object_effect_set(ec->frame, cfg->bg_effect_style);
else
{
E_Effect_Client *efc = NULL;
efc->under = NULL;
}
+static E_Client *
+_eff_object_background_below_client_get(E_Client *ec, E_Effect_Type type)
+{
+ Eina_List *stack = NULL, *list, *next;
+ E_Client *below = NULL;
+
+ if (!_eff) return NULL;
+
+ if (type == E_EFFECT_TYPE_RESTACK_HIDE)
+ stack = _eff->stack.old;
+ else
+ stack = _eff->stack.cur;
+
+ if (!stack) return NULL;
+
+ list = eina_list_data_find_list(stack, ec);
+ if (!list) return NULL;
+
+ next = list;
+ while ((next = eina_list_next(next)))
+ {
+ below = eina_list_data_get(next);
+ if (below == ec)
+ return NULL;
+
+ if (below->vkbd.vkbd)
+ continue;
+
+ break;
+ }
+
+ return below;
+}
+
+static void
+_eff_object_background_cb_zoom_in_done(void *data, Evas_Object *obj, const char *sig, const char *src)
+{
+ E_Client *bg_ec;
+ E_Effect_Client *bg_efc;
+
+ bg_ec = (E_Client *)data;
+ if (!bg_ec) return;
+
+ bg_efc = _eff_client_get(bg_ec);
+ if (bg_efc)
+ bg_efc->bg_animating = 0;
+
+ e_object_unref(E_OBJECT(bg_ec));
+}
+
+static void
+_eff_object_background_cb_zoom_out_done(void *data, Evas_Object *obj, const char *sig, const char *src)
+{
+ E_Client *bg_ec;
+ E_Effect_Client *bg_efc;
+
+ bg_ec = (E_Client *)data;
+ if (!bg_ec) return;
+
+ bg_efc = _eff_client_get(bg_ec);
+ if (bg_efc)
+ bg_efc->bg_animating = 0;
+
+ e_object_unref(E_OBJECT(bg_ec));
+}
+
+static E_Client *
+_eff_object_background_setup(E_Client *ec, E_Client *home_ec, E_Effect_Group group, E_Effect_Type type)
+{
+ E_Comp_Config *cfg;
+ E_Client *bg_ec = NULL;
+ E_Effect_Client *bg_efc = NULL;
+
+ cfg = e_comp_config_get();
+ if (!cfg) return NULL;
+ if (!cfg->bg_effect_style) return NULL;
+
+ if (!ec) return NULL;
+ if (group != E_EFFECT_GROUP_NORMAL) return NULL;
+ if ((ec->argb) || (ec->effect_type)) return NULL; //need to check opaque?
+
+ if (home_ec) bg_ec = home_ec;
+ else bg_ec = _eff_object_background_below_client_get(ec, type);
+
+ if (!bg_ec) return NULL;
+ if (e_object_is_del(E_OBJECT(bg_ec))) return NULL;
+ if (!bg_ec->animatable) return NULL;
+
+ bg_efc = _eff_client_get(bg_ec);
+ if (!bg_efc) return NULL;
+ if ((bg_efc->bg_animating) ||
+ ((bg_efc->animating) && !((bg_ec->launching) && (bg_efc->animating == 1))))
+ return NULL;
+
+ switch (type)
+ {
+ case E_EFFECT_TYPE_SHOW:
+ case E_EFFECT_TYPE_RESTACK_SHOW:
+ if (bg_ec->visibility.obscured != E_VISIBILITY_FULLY_OBSCURED)
+ {
+ e_object_ref(E_OBJECT(bg_ec));
+ _eff_object_setup(bg_ec, E_EFFECT_GROUP_BACKGROUND);
+ e_comp_object_effect_params_set(bg_ec->frame, 0, (int[]){0}, 1);
+ e_comp_object_effect_start(bg_ec->frame, _eff_object_background_cb_zoom_in_done, bg_ec);
+ bg_efc->bg_animating = 1;
+ return bg_ec;
+ }
+ break;
+ case E_EFFECT_TYPE_RESTACK_HIDE:
+ e_object_ref(E_OBJECT(bg_ec));
+ _eff_object_setup(bg_ec, E_EFFECT_GROUP_BACKGROUND);
+ e_comp_object_effect_params_set(bg_ec->frame, 0, (int[]){1}, 1);
+ e_comp_object_effect_start(bg_ec->frame, _eff_object_background_cb_zoom_out_done, bg_ec);
+ bg_efc->bg_animating = 1;
+ return bg_ec;
+ case E_EFFECT_TYPE_HIDE:
+ if (bg_ec->visibility.obscured == E_VISIBILITY_FULLY_OBSCURED)
+ {
+ e_object_ref(E_OBJECT(bg_ec));
+ _eff_object_setup(bg_ec, E_EFFECT_GROUP_BACKGROUND);
+ e_comp_object_effect_params_set(bg_ec->frame, 0, (int[]){1}, 1);
+ e_comp_object_effect_start(bg_ec->frame, _eff_object_background_cb_zoom_out_done, bg_ec);
+ bg_efc->bg_animating = 1;
+ return bg_ec;
+ }
+ break;
+ default:
+ /* do nothing */
+ break;
+ }
+
+ return NULL;
+}
+
static void
_eff_object_layer_up(E_Client *ec)
{
efc->delay_del_ref ++;
}
+ efc->bg_animating = 0;
efc->animating++;
e_object_ref(E_OBJECT(ec));
efc->ep = e_pixmap_ref(ec->pixmap);
return ec;
}
-
static void
_eff_cb_visible_done(void *data, Evas_Object *obj EINA_UNUSED, const char *sig EINA_UNUSED, const char *src EINA_UNUSED)
{
e_comp_object_effect_start(ec->frame, _eff_cb_visible_done, ec);
+ _eff_object_background_setup(ec, NULL, group, E_EFFECT_TYPE_SHOW);
+
return EINA_TRUE;
}
_eff_event_send(ec, EINA_TRUE, E_EFFECT_TYPE_HIDE);
e_comp_object_effect_start(ec->frame, _eff_cb_hidden_done, ec);
+ _eff_object_background_setup(ec, NULL, group, E_EFFECT_TYPE_HIDE);
return EINA_TRUE;
}
_eff_event_send(ec, EINA_TRUE, E_EFFECT_TYPE_RESTACK_SHOW);
e_comp_object_effect_start(ec->frame, _eff_cb_restack_show_done, ec);
+ _eff_object_background_setup(ec, NULL, group, E_EFFECT_TYPE_RESTACK_SHOW);
}
else if (!e_util_strcmp(emission, "e,action,restack,hide"))
{
_eff_event_send(ec, EINA_TRUE, E_EFFECT_TYPE_RESTACK_HIDE);
e_comp_object_effect_start(ec->frame, _eff_cb_restack_hide_done, ec);
+ _eff_object_background_setup(ec, ec_home, group, E_EFFECT_TYPE_RESTACK_HIDE);
}
else if (!e_util_strcmp(emission, "e,action,restack,finish"))
{