From 528250de9806d635974a3124bc047a366a23f5fc Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 11 Feb 2014 19:31:02 -0500 Subject: [PATCH] add maximize animations --- e-module-desksanity.edc | 78 +++++++++++++++++++++++++++++++++++++++++ src/Makefile.am | 1 + src/e_mod_main.c | 3 ++ src/e_mod_main.h | 3 ++ src/maximize.c | 70 ++++++++++++++++++++++++++++++++++++ 5 files changed, 155 insertions(+) create mode 100644 src/maximize.c diff --git a/e-module-desksanity.edc b/e-module-desksanity.edc index 935d9b5..e97e9ce 100644 --- a/e-module-desksanity.edc +++ b/e-module-desksanity.edc @@ -31,4 +31,82 @@ collections { } } } + #define COMP_EFFECT_DURATION 0.2 + + group { name: "e/comp/effects/desksanity/maximize"; + 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)) { + /* client geom[4] */ + new x, y, xx, yy; + + x = getarg(2); + y = getarg(3); + xx = getarg(4); + yy = getarg(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, xx, yy); + } + } + } + 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: SINUSOIDAL COMP_EFFECT_DURATION CURRENT; + target: "mover"; + after: "done"; + } + program { + name: "hide"; + signal: "e,action,go"; + source: "e"; + filter: "mover" "custom"; + action: STATE_SET "default" 0.0; + transition: SINUSOIDAL COMP_EFFECT_DURATION 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"; + } + } + } + + } diff --git a/src/Makefile.am b/src/Makefile.am index 5602d47..d056588 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -12,6 +12,7 @@ pkg_LTLIBRARIES = module.la module_la_SOURCES = e_mod_main.h \ e_mod_main.c \ e_mod_config.c \ + maximize.c \ moveresize.c \ desksanity.c diff --git a/src/e_mod_main.c b/src/e_mod_main.c index ac900d1..5be892d 100644 --- a/src/e_mod_main.c +++ b/src/e_mod_main.c @@ -40,6 +40,7 @@ e_modapi_init(E_Module *m) bind_textdomain_codeset(PACKAGE, "UTF-8"); snprintf(buf, sizeof(buf), "%s/e-module-desksanity.edj", m->dir); + elm_theme_overlay_add(NULL, buf); // //e_configure_registry_category_add("appearance", 80, D_("Look"), //NULL, "preferences-look"); @@ -55,6 +56,7 @@ e_modapi_init(E_Module *m) ds_init(); e_moveresize_replace(EINA_TRUE); mr_init(); + maximize_init(); return m; } @@ -67,6 +69,7 @@ e_modapi_shutdown(E_Module *m EINA_UNUSED) e_configure_registry_category_del("extensions"); E_FREE_FUNC(mod->cfd, e_object_del); + maximize_shutdown(); mr_shutdown(); ds_shutdown(); //e_config_domain_save("module.desksanity", conf_edd, ds_config); diff --git a/src/e_mod_main.h b/src/e_mod_main.h index 684f31c..38dc2b3 100644 --- a/src/e_mod_main.h +++ b/src/e_mod_main.h @@ -46,4 +46,7 @@ EINTERN void ds_shutdown(void); EINTERN void mr_shutdown(void); EINTERN void mr_init(void); +EINTERN void maximize_init(void); +EINTERN void maximize_shutdown(void); + #endif diff --git a/src/maximize.c b/src/maximize.c new file mode 100644 index 0000000..864c7f2 --- /dev/null +++ b/src/maximize.c @@ -0,0 +1,70 @@ +#include "e_mod_main.h" + +static Ecore_Event_Handler *eh = NULL; + +static void +_ds_unmaximize(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + E_Client *ec = data; + int x, y, w, h; + + e_comp_object_effect_set(ec->frame, "desksanity/maximize"); + e_comp_object_frame_xy_adjust(ec->frame, ec->saved.x, ec->saved.y, &x, &y); + e_comp_object_frame_wh_adjust(ec->frame, ec->saved.w, ec->saved.h, &w, &h); + e_comp_object_effect_params_set(ec->frame, 1, (int[]){ec->x - x, ec->y - y, (ec->x + ec->w) - (x + w), (ec->y + ec->h) - (y + h)}, 4); + e_comp_object_effect_params_set(ec->frame, 0, (int[]){1}, 1); + e_comp_object_effect_start(ec->frame, NULL, NULL); +} + +static void +_ds_maximize(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + E_Client *ec = data; + int x, y, w, h; + + e_comp_object_effect_set(ec->frame, "desksanity/maximize"); + e_comp_object_frame_xy_adjust(ec->frame, ec->saved.x, ec->saved.y, &x, &y); + e_comp_object_frame_wh_adjust(ec->frame, ec->saved.w, ec->saved.h, &w, &h); + e_comp_object_effect_params_set(ec->frame, 1, (int[]){x - ec->x, y - ec->y, (x + w) - (ec->x + ec->w), (y + h) - (ec->y + ec->h)}, 4); + e_comp_object_effect_params_set(ec->frame, 0, (int[]){1}, 1); + e_comp_object_effect_start(ec->frame, NULL, NULL); +} + +static void +_ds_maximize_check(E_Client *ec) +{ + if (e_client_util_ignored_get(ec)) return; + evas_object_smart_callback_add(ec->frame, "maximize_done", _ds_maximize, ec); + evas_object_smart_callback_add(ec->frame, "unmaximize", _ds_unmaximize, ec); +} + +static Eina_Bool +_ds_maximize_add(void *d EINA_UNUSED, int t EINA_UNUSED, E_Event_Client *ev) +{ + _ds_maximize_check(ev->ec); + return ECORE_CALLBACK_RENEW; +} + +EINTERN void +maximize_init(void) +{ + E_Client *ec; + + E_CLIENT_FOREACH(e_comp_get(NULL), ec) + _ds_maximize_check(ec); + eh = ecore_event_handler_add(E_EVENT_CLIENT_ADD, (Ecore_Event_Handler_Cb)_ds_maximize_add, NULL); +} + +EINTERN void +maximize_shutdown(void) +{ + E_Client *ec; + + E_CLIENT_FOREACH(e_comp_get(NULL), ec) + { + if (e_client_util_ignored_get(ec)) continue; + evas_object_smart_callback_del(ec->frame, "maximize", _ds_maximize); + evas_object_smart_callback_del(ec->frame, "unmaximize", _ds_unmaximize); + } + E_FREE_FUNC(eh, ecore_event_handler_del); +}