From 954e0a4f1dc18e78713e861d34dcc52536c69700 Mon Sep 17 00:00:00 2001 From: Hannes Janetzek Date: Tue, 30 Aug 2011 21:51:50 +0000 Subject: [PATCH] e-modules/comp-scale: add gadgets for scale and pager action SVN revision: 63011 --- e-module-scale.edc | 65 +++++++++++++- images/pager.png | Bin 0 -> 987 bytes images/scale.png | Bin 0 -> 959 bytes src/e_mod_main.c | 218 ++++++++++++++++++++++++++++++++++----------- 4 files changed, 229 insertions(+), 54 deletions(-) create mode 100644 images/pager.png create mode 100644 images/scale.png diff --git a/e-module-scale.edc b/e-module-scale.edc index bc674ee..f96881f 100644 --- a/e-module-scale.edc +++ b/e-module-scale.edc @@ -1,6 +1,7 @@ images { - image: "module_icon.png" COMP; + image: "scale.png" COMP; + image: "pager.png" COMP; image: "sh.png" COMP; image: "label.png" COMP; } @@ -19,7 +20,7 @@ collections state: "default" 0.0; aspect: 1.0 1.0; aspect_preference: BOTH; - image.normal: "module_icon.png"; + image.normal: "scale.png"; } } } @@ -38,7 +39,7 @@ collections aspect_preference: BOTH; rel1.offset: 2 2; rel2.offset: -3 -3; - image.normal: "module_icon.png"; + image.normal: "scale.png"; } description { state: "bigger" 0.0; @@ -58,6 +59,7 @@ collections } } programs { +#if 0 program { name: "mouse_in"; signal: "mouse,in"; @@ -74,6 +76,61 @@ collections transition: LINEAR 0.2; target: "icon"; } +#endif + } + } + group { + name: "modules/pager/main"; + max: 128 128; + parts { + part { + name: "icon"; + mouse_events: 0; + type: IMAGE; + description { + state: "default" 0.0; + aspect: 1.0 1.0; + aspect_preference: BOTH; + rel1.offset: 2 2; + rel2.offset: -3 -3; + image.normal: "pager.png"; + } + description { + state: "bigger" 0.0; + inherit: "default" 0.0; + rel1.offset: -2 -2; + rel2.offset: 3 3; + } + } + part { + name: "event"; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + color: 255 255 255 0; + } + } + } + programs { +#if 0 + program { + name: "mouse_in"; + signal: "mouse,in"; + source: "event"; + action: STATE_SET "bigger" 0.0; + transition: LINEAR 0.1; + target: "icon"; + } + program { + name: "mouse_out"; + signal: "mouse,out"; + source: "event"; + action: STATE_SET "default" 0.0; + transition: LINEAR 0.2; + target: "icon"; + } +#endif } } @@ -408,7 +465,7 @@ collections type: RECT; description { state: "default" 0.0; - visible: 0; + visible: 0; color: 255 255 255 180; rel1 { relative: 0.0 0.0; diff --git a/images/pager.png b/images/pager.png new file mode 100644 index 0000000000000000000000000000000000000000..b5794250bd14606364ca6d044bf15040f4204681 GIT binary patch literal 987 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoY)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP?hn%Q}pycdBkAOmwC9V-A&iT2ysd*&~&PAz-C8;S2 z<(VZJ3hti10pX2&;tUMT&YmugAr-gY&W$g=2muywVT}q=X}&Ow>-JCxB6RN**6gZ7Dptc$Q5P!r*`$S^HqAE z7Jn|(5wrPpgYyILeLdN=90z|Vl)pRSU87U^#!2|%+6fJOANXGEJfCUxqv!(v0kIzs z?^S1?d2Bu5s8_@LT-$^h%U+&IdNapI&D`Ps-x*6Xf8Fdjer2nx+@hvcoE|){uZtS! z#6~L?=6)X4N|JGXhbu!30%T4X76J_1fFfH)``{fKEH!UXDw)@ti=x~37 zpaUmAPGDNXpy|N1LxuIqUFCDF?IH`L7Dy?udN2kx2rW?b07*M?O<-ctb9MM&Ar!8HkqK=7k#TM&b(l>tm+w)mpPptdKtFvC;&+}BiS*5bDi^(V<+v4r* zpf|^#uvDZh^yIi1aHXu%yMg~e_5;h~5AAAWGwFuuE) ze<9a|u`WJiep2|St=8XfzMq(ra-*~{zrp^1>~G$U%nw=x`|rQoqj*61!rF!6TVkG_ ze%7&!>HD&dt=8Mz_a`4!J~1coxXG8^*R^%ai+Iwz%9rM7%+Z|Ze!t_m)DN+0saxL; zU&t~0of7zS+2xn+-)>*ht-P~i+leIA2L~3VSp4?5A#Eb$EO&1~;^PS)^?TeFYh2Wu ze!A#E^QEn-{MPL~4~1VeIv<c_ROBD9tN65##=>ko(V}3yPBiEP{m|Sp~n-jL}SOKQmRZ-@2Ty z=tRq;FaH|iUS?dH9x9jr_rmj~=LN;NjSzZD;?!W2@xk{$J->puo`t dL({wJ&D(GP__k3j8kpx8JYD@<);T3K0RRzgurdGu literal 0 HcmV?d00001 diff --git a/images/scale.png b/images/scale.png new file mode 100644 index 0000000000000000000000000000000000000000..071b43e0c36062066f8a9451b1b56ad476b32c10 GIT binary patch literal 959 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoY)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP?hn%Roxes6T1)z{*iEBiObAE1aYF-J0b5UwyNotBh zd1gt5g1e`0KzJjcI0FN-x~Gd{NX4zUb5Hl(au9IsXEe4re_lb!<&={3r1kzcQVoMR znCcW)YxHyS-;UfNEfuCLz5C1$xs#jHFFbg)ZeM6`sA+?M6Nh38gjgiFNc&H1$puFZd!nqdxp<|dXh^9;(v1D{ z7#Bad)pg|T(T7Sp*QA>IxK4b2R5$tLl8G1frhC_0GQIn=b)&4|2Hnqgp~Vh4J3c)+ zP?v4}EA_MAO@R^~*Se=ai{Do7zg+vvualwH*;-5WuNGHF!-;|i>9;e0+_yWbe(7YL zeh{U7(1UU9W@oMmOiLIv7kG2+_|{dSRp!BX3J8N5L=;$0FmgFM0i|1jY!2J53yV1x z$}EskSkj>WLE}+GTe{7MJ*<2yLS$_Io{-l^Cd_xp6lH?O$i9@Me=I&|^Zg z-sV*~3|FIy6l? daRm1LZ&H&#do1~g2QXhTc)I$ztaD0e0s!#rqH6#E literal 0 HcmV?d00001 diff --git a/src/e_mod_main.c b/src/e_mod_main.c index 8b171b8..1473e49 100644 --- a/src/e_mod_main.c +++ b/src/e_mod_main.c @@ -7,17 +7,23 @@ // while scale is active? // -static E_Gadcon_Client *_gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style); +static E_Gadcon_Client *_gc_init_scale(E_Gadcon *gc, const char *name, const char *id, const char *style); +static E_Gadcon_Client *_gc_init_scale_all(E_Gadcon *gc, const char *name, const char *id, const char *style); +static E_Gadcon_Client *_gc_init_pager(E_Gadcon *gc, const char *name, const char *id, const char *style); +static char *_gc_label_scale(E_Gadcon_Client_Class *client_class); +static char *_gc_label_scale_all(E_Gadcon_Client_Class *client_class); +static char *_gc_label_pager(E_Gadcon_Client_Class *client_class); static void _gc_shutdown(E_Gadcon_Client *gcc); static void _gc_orient(E_Gadcon_Client *gcc, E_Gadcon_Orient orient); -static char *_gc_label(E_Gadcon_Client_Class *client_class); static const char *_gc_id_new(E_Gadcon_Client_Class *client_class); static Evas_Object *_gc_icon(E_Gadcon_Client_Class *client_class, Evas *evas); static void _scale_conf_new(void); static void _scale_conf_free(void); static Config_Item *_scale_conf_item_get(const char *id); -static void _scale_gc_cb_mouse_down(void *data, Evas *evas, Evas_Object *obj, void *event); +static void _scale_gc_cb_mouse_down_scale(void *data, Evas *evas, Evas_Object *obj, void *event); +static void _scale_gc_cb_mouse_down_scale_all(void *data, Evas *evas, Evas_Object *obj, void *event); +static void _scale_gc_cb_mouse_down_pager(void *data, Evas *evas, Evas_Object *obj, void *event); static void _scale_gc_cb_menu_post(void *data, E_Menu *menu); static void _scale_gc_cb_menu_configure(void *data, E_Menu *mn, E_Menu_Item *mi); @@ -184,10 +190,26 @@ static E_Config_DD *conf_edd = NULL; static E_Config_DD *conf_item_edd = NULL; Config *scale_conf = NULL; -static const E_Gadcon_Client_Class _gc_class = +static const E_Gadcon_Client_Class _gc_class_scale = { GADCON_CLIENT_CLASS_VERSION, "scale", - {_gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon, + {_gc_init_scale, _gc_shutdown, _gc_orient, _gc_label_scale, _gc_icon, + _gc_id_new, NULL, NULL}, + E_GADCON_CLIENT_STYLE_PLAIN + }; + +static const E_Gadcon_Client_Class _gc_class_scale_all = + { + GADCON_CLIENT_CLASS_VERSION, "scale-all", + {_gc_init_scale_all, _gc_shutdown, _gc_orient, _gc_label_scale_all, _gc_icon, + _gc_id_new, NULL, NULL}, + E_GADCON_CLIENT_STYLE_PLAIN + }; + +static const E_Gadcon_Client_Class _gc_class_pager = + { + GADCON_CLIENT_CLASS_VERSION, "scale-pager", + {_gc_init_pager, _gc_shutdown, _gc_orient, _gc_label_pager, _gc_icon, _gc_id_new, NULL, NULL}, E_GADCON_CLIENT_STYLE_PLAIN }; @@ -268,7 +290,9 @@ e_modapi_init(E_Module *m) scale_conf->module->dir); scale_conf->theme_path = eina_stringshare_add(buf); - e_gadcon_provider_register(&_gc_class); + e_gadcon_provider_register(&_gc_class_scale); + e_gadcon_provider_register(&_gc_class_scale_all); + e_gadcon_provider_register(&_gc_class_pager); act = e_action_add("scale-windows"); if (act) @@ -323,7 +347,10 @@ e_modapi_shutdown(E_Module *m) scale_conf->cfd = NULL; scale_conf->module = NULL; - e_gadcon_provider_unregister(&_gc_class); + + e_gadcon_provider_unregister(&_gc_class_scale); + e_gadcon_provider_unregister(&_gc_class_scale_all); + e_gadcon_provider_unregister(&_gc_class_pager); while (scale_conf->conf_items) { @@ -372,7 +399,7 @@ e_modapi_save(E_Module *m) return 1; } -static E_Gadcon_Client * +static Instance * _gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style) { Instance *inst = NULL; @@ -382,17 +409,62 @@ _gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style) inst->o_scale = edje_object_add(gc->evas); + inst->gcc = e_gadcon_client_new(gc, name, id, style, inst->o_scale); + inst->gcc->data = inst; + + + instances = eina_list_append(instances, inst); + + return inst; +} + +static E_Gadcon_Client * +_gc_init_pager(E_Gadcon *gc, const char *name, const char *id, const char *style) +{ + Instance *inst; + + inst = _gc_init(gc, name, id, style); + + if (!e_theme_edje_object_set(inst->o_scale, "base/theme/modules/scale", + "modules/pager/main")) + edje_object_file_set(inst->o_scale, scale_conf->theme_path, "modules/pager/main"); + + evas_object_event_callback_add(inst->o_scale, EVAS_CALLBACK_MOUSE_DOWN, + _scale_gc_cb_mouse_down_pager, inst); + + return inst->gcc; +} + +static E_Gadcon_Client * +_gc_init_scale(E_Gadcon *gc, const char *name, const char *id, const char *style) +{ + Instance *inst; + + inst = _gc_init(gc, name, id, style); + if (!e_theme_edje_object_set(inst->o_scale, "base/theme/modules/scale", "modules/scale/main")) edje_object_file_set(inst->o_scale, scale_conf->theme_path, "modules/scale/main"); - inst->gcc = e_gadcon_client_new(gc, name, id, style, inst->o_scale); - inst->gcc->data = inst; + evas_object_event_callback_add(inst->o_scale, EVAS_CALLBACK_MOUSE_DOWN, + _scale_gc_cb_mouse_down_scale, inst); + + return inst->gcc; +} + +static E_Gadcon_Client * +_gc_init_scale_all(E_Gadcon *gc, const char *name, const char *id, const char *style) +{ + Instance *inst; + + inst = _gc_init(gc, name, id, style); + + if (!e_theme_edje_object_set(inst->o_scale, "base/theme/modules/scale", + "modules/scale/main")) + edje_object_file_set(inst->o_scale, scale_conf->theme_path, "modules/scale/main"); evas_object_event_callback_add(inst->o_scale, EVAS_CALLBACK_MOUSE_DOWN, - _scale_gc_cb_mouse_down, inst); - - instances = eina_list_append(instances, inst); + _scale_gc_cb_mouse_down_scale_all, inst); return inst->gcc; } @@ -413,8 +485,8 @@ _gc_shutdown(E_Gadcon_Client *gcc) } if (inst->o_scale) { - evas_object_event_callback_del(inst->o_scale, EVAS_CALLBACK_MOUSE_DOWN, - _scale_gc_cb_mouse_down); + /* evas_object_event_callback_del(inst->o_scale, EVAS_CALLBACK_MOUSE_DOWN, + * _scale_gc_cb_mouse_down); */ evas_object_del(inst->o_scale); } E_FREE(inst); @@ -428,9 +500,21 @@ _gc_orient(E_Gadcon_Client *gcc, E_Gadcon_Orient orient) } static char * -_gc_label(E_Gadcon_Client_Class *client_class) +_gc_label_scale(E_Gadcon_Client_Class *client_class) { - return D_("Scale"); + return D_("Scale Windows"); +} + +static char * +_gc_label_scale_all(E_Gadcon_Client_Class *client_class) +{ + return D_("Scale all Windows"); +} + +static char * +_gc_label_pager(E_Gadcon_Client_Class *client_class) +{ + return D_("Scale Pager"); } static const char * @@ -514,7 +598,7 @@ _scale_conf_item_get(const char *id) if (!id) { - snprintf(buf, sizeof(buf), "%s.%d", _gc_class.name, ++uuid); + snprintf(buf, sizeof(buf), "%s.%d", _gc_class_scale.name, ++uuid); id = buf; } else @@ -534,49 +618,83 @@ _scale_conf_item_get(const char *id) } static void -_scale_gc_cb_mouse_down(void *data, Evas *evas, Evas_Object *obj, void *event) +_scale_gc_menu(Instance *inst, Evas_Event_Mouse_Down *ev) +{ + E_Menu *m; + E_Menu_Item *mi; + E_Zone *zone = NULL; + int x, y; + + m = e_menu_new(); + mi = e_menu_item_new(m); + e_menu_item_label_set(mi, D_("Settings")); + e_util_menu_item_theme_icon_set(mi, "preferences-system"); + e_menu_item_callback_set(mi, _scale_gc_cb_menu_configure, NULL); + + m = e_gadcon_client_util_menu_items_append(inst->gcc, m, 0); + inst->menu = m; + + e_menu_post_deactivate_callback_set(m, _scale_gc_cb_menu_post, inst); + + e_gadcon_canvas_zone_geometry_get(inst->gcc->gadcon, &x, &y, + NULL, NULL); + + zone = e_util_zone_current_get(e_manager_current_get()); + + e_menu_activate_mouse(m, zone, (x + ev->output.x), + (y + ev->output.y), 1, 1, + E_MENU_POP_DIRECTION_AUTO, ev->timestamp); + evas_event_feed_mouse_up(inst->gcc->gadcon->evas, ev->button, + EVAS_BUTTON_NONE, ev->timestamp, NULL); + +} + +static void +_scale_gc_cb_mouse_down_scale(void *data, Evas *evas, Evas_Object *obj, void *event) { Instance *inst = NULL; Evas_Event_Mouse_Down *ev; - E_Zone *zone = NULL; - E_Menu_Item *mi = NULL; - int x, y; if (!(inst = data)) return; ev = event; if (ev->button == 1) - { - _e_mod_action_cb(NULL, "go_scale_class:*"); - } + _e_mod_action_cb(NULL, "go_scale"); else if ((ev->button == 3) && (!inst->menu)) - { - E_Menu *m; - - m = e_menu_new(); - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, D_("Settings")); - e_util_menu_item_theme_icon_set(mi, "preferences-system"); - e_menu_item_callback_set(mi, _scale_gc_cb_menu_configure, NULL); - - m = e_gadcon_client_util_menu_items_append(inst->gcc, m, 0); - inst->menu = m; - - e_menu_post_deactivate_callback_set(m, _scale_gc_cb_menu_post, inst); - - e_gadcon_canvas_zone_geometry_get(inst->gcc->gadcon, &x, &y, - NULL, NULL); - - zone = e_util_zone_current_get(e_manager_current_get()); - - e_menu_activate_mouse(m, zone, (x + ev->output.x), - (y + ev->output.y), 1, 1, - E_MENU_POP_DIRECTION_AUTO, ev->timestamp); - evas_event_feed_mouse_up(inst->gcc->gadcon->evas, ev->button, - EVAS_BUTTON_NONE, ev->timestamp, NULL); - } + _scale_gc_menu(inst, ev); } +static void +_scale_gc_cb_mouse_down_scale_all(void *data, Evas *evas, Evas_Object *obj, void *event) +{ + Instance *inst = NULL; + Evas_Event_Mouse_Down *ev; + + if (!(inst = data)) return; + ev = event; + + if (ev->button == 1) + _e_mod_action_cb(NULL, "go_scale_class:*"); + else if ((ev->button == 3) && (!inst->menu)) + _scale_gc_menu(inst, ev); +} + +static void +_scale_gc_cb_mouse_down_pager(void *data, Evas *evas, Evas_Object *obj, void *event) +{ + Instance *inst = NULL; + Evas_Event_Mouse_Down *ev; + + if (!(inst = data)) return; + ev = event; + + if (ev->button == 1) + _e_mod_action_cb(NULL, "go_pager"); + else if ((ev->button == 3) && (!inst->menu)) + _scale_gc_menu(inst, ev); +} + + static void _scale_gc_cb_menu_post(void *data, E_Menu *menu) {