From 71003dbeacc9ca4c7fd2cb55fc2fe63739c31de0 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Fri, 11 Jan 2013 11:53:29 +0000 Subject: [PATCH] add options (conf2 only for the next few minutes) and functionality to enable "fast" comp effects in theme SVN revision: 82631 --- ChangeLog | 1 + NEWS | 1 + data/themes/edc/comp.edc | 72 ++++++++++++++++++++++++++++++++++++++++ src/bin/e_comp.c | 56 +++++++++++++++++++++++++------ src/bin/e_comp_cfdata.c | 4 +++ src/bin/e_comp_cfdata.h | 5 +++ 6 files changed, 128 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index 16b031dde..251b2d676 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,6 +4,7 @@ * added option to disable comp effects on screen * fixed bug where backlight settings would try to update dummy backlight devices * added focus-out color class and functionality to default theme + * added options and functionality for "fast" composite effects 2013-01-10 Carsten Haitzler diff --git a/NEWS b/NEWS index ad024a222..95b4cc2a8 100644 --- a/NEWS +++ b/NEWS @@ -25,6 +25,7 @@ Additions: * comp settings now uses the "e_comp" config domain * added options to disable comp effects on types of windows * added option to disable comp effects on screen + * added options and functionality for "fast" composite effects Changes: Modules: diff --git a/data/themes/edc/comp.edc b/data/themes/edc/comp.edc index 9dcd5a599..d606f4ce7 100644 --- a/data/themes/edc/comp.edc +++ b/data/themes/edc/comp.edc @@ -323,6 +323,7 @@ group { name: "e/comp/default"; target: "shadow"; } program { + name: "visible_on"; signal: "e,state,visible,on"; source: "e"; action: STATE_SET "visible" 0.0; transition: DECELERATE 0.15; @@ -334,6 +335,7 @@ group { name: "e/comp/default"; action: SIGNAL_EMIT "e,action,show,done" "e"; } program { + name: "visible_off"; signal: "e,state,visible,off"; source: "e"; action: STATE_SET "default" 0.0; transition: DECELERATE 0.30; @@ -345,6 +347,7 @@ group { name: "e/comp/default"; action: SIGNAL_EMIT "e,action,hide,done" "e"; } program { + name: "focus_on"; signal: "e,state,focus,on"; source: "e"; action: STATE_SET "focused" 0.0; transition: SINUSOIDAL 0.1; @@ -358,6 +361,7 @@ group { name: "e/comp/default"; target: "glow"; } program { + name: "focus_off"; signal: "e,state,focus,off"; source: "e"; action: STATE_SET "default" 0.0; transition: SINUSOIDAL 0.1; @@ -385,6 +389,38 @@ group { name: "e/comp/default"; } } + +group { name: "e/comp/default/fast"; + alias: "e/comp/popup/fast"; + inherit: "e/comp/default"; + programs { + program { + name: "visible_on"; + transition: DECELERATE 0; + } + program { + name: "visible_off"; + transition: DECELERATE 0; + } + program { + name: "focus_on"; + transition: SINUSOIDAL 0.1; + target: "glow"; + after: "focus2"; + } + program { + name: "focus_on2"; + signal: "e,state,focus,on"; source: "e"; + action: STATE_SET "focused" 0.0; + target: "focus-clipper"; + } + program { + name: "focus_off"; + transition: SINUSOIDAL 0; + } + } +} + group { name: "e/comp/none"; parts { part { name: "e.swallow.content"; type: SWALLOW; @@ -416,6 +452,18 @@ group { name: "e/comp/still"; } } +group { name: "e/comp/still/fast"; + inherit: "e/comp/default/fast"; + parts { + part { name: "shower"; + description { state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + } + } + } +} + group { name: "e/comp/menu"; inherit: "e/comp/default"; parts { @@ -428,6 +476,18 @@ group { name: "e/comp/menu"; } } +group { name: "e/comp/menu/fast"; + inherit: "e/comp/default/fast"; + parts { + part { name: "shower"; + description { state: "default" 0.0; + rel1.relative: 0.05 0.0; + rel2.relative: 0.95 0.9; + } + } + } +} + group { name: "e/comp/everything"; inherit: "e/comp/default"; parts { @@ -440,6 +500,18 @@ group { name: "e/comp/everything"; } } +group { name: "e/comp/everything"; + inherit: "e/comp/default/fast"; + parts { + part { name: "shower"; + description { state: "default" 0.0; + rel1.relative: -0.3 -0.3; + rel2.relative: 1.3 1.3; + } + } + } +} + group { name: "e/comp/fullscreen"; images.image: "win_shadow.png" COMP; images.image: "screen_circular_shadow.png" COMP; diff --git a/src/bin/e_comp.c b/src/bin/e_comp.c index 95129d5ce..14d22d2b5 100644 --- a/src/bin/e_comp.c +++ b/src/bin/e_comp.c @@ -1616,7 +1616,7 @@ _e_comp_win_shadow_setup(E_Comp_Win *cw) char buf[4096]; Eina_List *list = NULL, *l; E_Comp_Match *m; - Eina_Bool focus = EINA_FALSE, urgent = EINA_FALSE, skip = EINA_FALSE; + Eina_Bool focus = EINA_FALSE, urgent = EINA_FALSE, skip = EINA_FALSE, fast = EINA_FALSE; const char *title = NULL, *name = NULL, *clas = NULL, *role = NULL; Ecore_X_Window_Type primary_type = ECORE_X_WINDOW_TYPE_UNKNOWN; @@ -1635,6 +1635,7 @@ _e_comp_win_shadow_setup(E_Comp_Win *cw) role = cw->bd->client.icccm.window_role; primary_type = cw->bd->client.netwm.type; skip = (conf->match.disable_borders); + fast = conf->fast_borders; } else if (cw->pop) { @@ -1644,12 +1645,14 @@ _e_comp_win_shadow_setup(E_Comp_Win *cw) list = conf->match.popups; name = cw->pop->name; skip = (conf->match.disable_popups); + fast = conf->fast_popups; } else if (cw->menu) { // FIXME: e has no way to tell e menus apart... need naming list = conf->match.menus; skip = (conf->match.disable_menus); + fast = conf->fast_menus; } else { @@ -1660,6 +1663,7 @@ _e_comp_win_shadow_setup(E_Comp_Win *cw) role = cw->role; primary_type = cw->primary_type; skip = (conf->match.disable_overrides); + fast = conf->fast_overrides; } if (!skip) @@ -1766,10 +1770,16 @@ _e_comp_win_shadow_setup(E_Comp_Win *cw) urgent = m->urgent; if (m->shadow_style) { - snprintf(buf, sizeof(buf), "e/comp/%s", - m->shadow_style); - ok = e_theme_edje_object_set(cw->shobj, "base/theme/borders", - buf); + if (fast) + { + snprintf(buf, sizeof(buf), "e/comp/%s/fast", m->shadow_style); + ok = e_theme_edje_object_set(cw->shobj, "base/theme/borders", buf); + } + if (!ok) + { + snprintf(buf, sizeof(buf), "e/comp/%s", m->shadow_style); + ok = e_theme_edje_object_set(cw->shobj, "base/theme/borders", buf); + } if (ok) break; } } @@ -1783,14 +1793,24 @@ _e_comp_win_shadow_setup(E_Comp_Win *cw) if (ok) break; if (conf->shadow_style) { - snprintf(buf, sizeof(buf), "e/comp/%s", - conf->shadow_style); - ok = e_theme_edje_object_set(cw->shobj, "base/theme/borders", - buf); + if (fast) + { + snprintf(buf, sizeof(buf), "e/comp/%s/fast", conf->shadow_style); + ok = e_theme_edje_object_set(cw->shobj, "base/theme/borders", buf); + } + if (!ok) + { + snprintf(buf, sizeof(buf), "e/comp/%s", conf->shadow_style); + ok = e_theme_edje_object_set(cw->shobj, "base/theme/borders", buf); + } } if (!ok) - ok = e_theme_edje_object_set(cw->shobj, "base/theme/borders", - "e/comp/default"); + { + if (fast) + ok = e_theme_edje_object_set(cw->shobj, "base/theme/borders", "e/comp/default/fast"); + if (!ok) + ok = e_theme_edje_object_set(cw->shobj, "base/theme/borders", "e/comp/default"); + } break; } edje_object_part_swallow(cw->shobj, "e.swallow.content", cw->obj); @@ -4221,6 +4241,20 @@ _e_comp_cfg_init(void) E_CONFIGURE_OPTION_ADD(co, BOOL, vsync, conf, _("Tear-free compositing (VSYNC)"), _("composite"), _("border")); co->requires_restart = 1; cfg_opts = eina_inlist_append(cfg_opts, EINA_INLIST_GET(co)); + + E_CONFIGURE_OPTION_ADD(co, BOOL, fast_borders, conf, _("Use fast composite effects for windows"), _("composite"), _("border"), _("theme"), _("animate")); + co->funcs[1].none = co->funcs[0].none = e_comp_shadows_reset; + cfg_opts = eina_inlist_append(cfg_opts, EINA_INLIST_GET(co)); + E_CONFIGURE_OPTION_ADD(co, BOOL, fast_menus, conf, _("Use fast composite effects for menus"), _("composite"), _("menu"), _("theme"), _("animate")); + co->funcs[1].none = co->funcs[0].none = e_comp_shadows_reset; + cfg_opts = eina_inlist_append(cfg_opts, EINA_INLIST_GET(co)); + E_CONFIGURE_OPTION_ADD(co, BOOL, fast_popups, conf, _("Use fast composite effects for popups"), _("composite"), _("popup"), _("theme"), _("animate")); + co->funcs[1].none = co->funcs[0].none = e_comp_shadows_reset; + cfg_opts = eina_inlist_append(cfg_opts, EINA_INLIST_GET(co)); + E_CONFIGURE_OPTION_ADD(co, BOOL, fast_overrides, conf, _("Use fast composite effects for override-redirect windows (tooltips and such)"), _("composite"), _("theme"), _("animate")); + co->funcs[1].none = co->funcs[0].none = e_comp_shadows_reset; + cfg_opts = eina_inlist_append(cfg_opts, EINA_INLIST_GET(co)); + E_CONFIGURE_OPTION_ADD(co, BOOL, match.disable_borders, conf, _("Disable composite effects for windows"), _("composite"), _("border"), _("theme"), _("animate")); co->funcs[1].none = co->funcs[0].none = e_comp_shadows_reset; cfg_opts = eina_inlist_append(cfg_opts, EINA_INLIST_GET(co)); diff --git a/src/bin/e_comp_cfdata.c b/src/bin/e_comp_cfdata.c index a3233deba..f2498c809 100644 --- a/src/bin/e_comp_cfdata.c +++ b/src/bin/e_comp_cfdata.c @@ -54,6 +54,10 @@ e_comp_cfdata_edd_init(E_Config_DD **conf_edd, E_Config_DD **match_edd) E_CONFIG_VAL(D, T, smooth_windows, UCHAR); E_CONFIG_VAL(D, T, first_draw_delay, DOUBLE); E_CONFIG_VAL(D, T, disable_screen_effects, UCHAR); + E_CONFIG_VAL(D, T, fast_popups, UCHAR); + E_CONFIG_VAL(D, T, fast_borders, UCHAR); + E_CONFIG_VAL(D, T, fast_menus, UCHAR); + E_CONFIG_VAL(D, T, fast_overrides, UCHAR); E_CONFIG_VAL(D, T, match.disable_popups, UCHAR); E_CONFIG_VAL(D, T, match.disable_borders, UCHAR); E_CONFIG_VAL(D, T, match.disable_overrides, UCHAR); diff --git a/src/bin/e_comp_cfdata.h b/src/bin/e_comp_cfdata.h index e588d72d9..a9c86046e 100644 --- a/src/bin/e_comp_cfdata.h +++ b/src/bin/e_comp_cfdata.h @@ -29,6 +29,11 @@ struct _E_Comp_Config unsigned char smooth_windows; double first_draw_delay; Eina_Bool disable_screen_effects; + // the following options add the "/fast" suffix to the normal groups + Eina_Bool fast_popups; + Eina_Bool fast_borders; + Eina_Bool fast_menus; + Eina_Bool fast_overrides; struct {