diff --git a/data/themes/default.edc b/data/themes/default.edc index 7d653aa2..5b97f4c7 100644 --- a/data/themes/default.edc +++ b/data/themes/default.edc @@ -84,26 +84,26 @@ collections { /////////////////////////////////////////////////////////////////////////// //// the background and general container for the terminal group { name: "terminology/core"; + script { + public message(Msg_Type:type, id, ...) { + new r, g, b, a, v; + + if (type != MSG_INT || id != 1) return; + + v = getarg(2) * 255 / 100; + + custom_state(PART:"fade", "default", 0.0); + get_state_val(PART:"fade", STATE_COLOR, r, g, b, a); + set_state_val(PART:"fade", STATE_COLOR, r, g, b, v); + set_state(PART:"fade", "custom", 0.0); + } + } parts { //////////////////////////////////////////////////////////////////// // background handling part { name: "fade"; type: RECT; description { state: "default" 0.0; } - description { state: "translucent" 0.0; - inherit: "default" 0.0; - color: 255 255 255 128; - } - } - program { - signal: "translucent,on"; source: "terminology"; - action: STATE_SET "translucent" 0.0; - target: "fade"; - } - program { - signal: "translucent,off"; source: "terminology"; - action: STATE_SET "default" 0.0; - target: "fade"; } part { name: "terminology.background"; type: SWALLOW; clip_to: "fade"; @@ -186,6 +186,25 @@ collections { source: "bell.wav"; } } + script { + public message(Msg_Type:type, id, ...) { + new r, g, b, a, v; + + if (type != MSG_INT || id != 1) return; + + v = getarg(2) * 255 / 100; + + custom_state(PART:"shadow", "default", 0.0); + get_state_val(PART:"shadow", STATE_COLOR, r, g, b, a); + set_state_val(PART:"shadow", STATE_COLOR, r, g, b, v); + set_state(PART:"shadow", "custom", 0.0); + + custom_state(PART:"base", "default", 0.0); + get_state_val(PART:"base", STATE_COLOR, r, g, b, a); + set_state_val(PART:"base", STATE_COLOR, r, g, b, v); + set_state(PART:"base", "custom", 0.0); + } + } parts { //////////////////////////////////////////////////////////////////// // background handling @@ -194,11 +213,6 @@ collections { description { state: "default" 0.0; image.normal: "bg_shadow"; fill.smooth: 0; - visible: 0; - } - description { state: "translucent" 0.0; - inherit: "default" 0.0; - visible: 1; } } part { name: "base"; type: RECT; @@ -206,22 +220,6 @@ collections { description { state: "default" 0.0; color: BG_COL; } - description { state: "translucent" 0.0; - inherit: "default" 0.0; - visible: 0; - } - } - program { - signal: "translucent,on"; source: "terminology"; - action: STATE_SET "translucent" 0.0; - target: "base"; - target: "shadow"; - } - program { - signal: "translucent,off"; source: "terminology"; - action: STATE_SET "default" 0.0; - target: "base"; - target: "shadow"; } //////////////////////////////////////////////////////////////////// @@ -2581,6 +2579,25 @@ target: "0.clip"; target: "1.clip"; target: "2.clip"; target: "3.clip"; target: image { image: "bg_shadow2.png" COMP; size: 200 150 400 300; } image { image: "bg_shadow3.png" COMP; size: 400 300 99999 99999; } } + script { + public message(Msg_Type:type, id, ...) { + new r, g, b, a, v; + + if (type != MSG_INT || id != 1) return; + + v = getarg(2) * 255 / 100; + + custom_state(PART:"shadow", "default", 0.0); + get_state_val(PART:"shadow", STATE_COLOR, r, g, b, a); + set_state_val(PART:"shadow", STATE_COLOR, r, g, b, v); + set_state(PART:"shadow", "custom", 0.0); + + if (v < 255) + set_state(PART:"fill", "translucent", 0.0); + else + set_state(PART:"fill", "default", 0.0); + } + } parts { //////////////////////////////////////////////////////////////////// // background and shadows @@ -2605,16 +2622,6 @@ target: "0.clip"; target: "1.clip"; target: "2.clip"; target: "3.clip"; target: visible: 0; } } - program { - signal: "translucent,on"; source: "terminology"; - action: STATE_SET "translucent" 0.0; - target: "fill"; - } - program { - signal: "translucent,off"; source: "terminology"; - action: STATE_SET "default" 0.0; - target: "fill"; - } //////////////////////////////////////////////////////////////////// // content (where the grid of terms goes) diff --git a/data/themes/mild.edc b/data/themes/mild.edc index 2db3618b..c976b344 100644 --- a/data/themes/mild.edc +++ b/data/themes/mild.edc @@ -38,6 +38,27 @@ collections { source: "bell.wav"; } } + + script { + public message(Msg_Type:type, id, ...) { + new r, g, b, a, v; + + if (type != MSG_INT || id != 1) return; + + v = getarg(2) * 255 / 100; + + custom_state(PART:"base", "default", 0.0); + get_state_val(PART:"base", STATE_COLOR, r, g, b, a); + set_state_val(PART:"base", STATE_COLOR, r, g, b, v); + set_state(PART:"base", "custom", 0.0); + + custom_state(PART:"fade", "default", 0.0); + get_state_val(PART:"fade", STATE_COLOR, r, g, b, a); + set_state_val(PART:"fade", STATE_COLOR, r, g, b, v); + set_state(PART:"fade", "custom", 0.0); + } + } + parts { //////////////////////////////////////////////////////////////////// // background handling @@ -96,18 +117,10 @@ collections { description { state: "default" 0.0; color: BG_COLOR; } - description { state: "translucent" 0.0; - inherit: "default" 0.0; - color: BG_COLOR_TRANSLUCENT; - } } part { name: "fade"; type: RECT; description { state: "default" 0.0; } - description { state: "translucent" 0.0; - inherit: "default" 0.0; - color: 255 255 255 128; - } } part { name: "terminology.background"; type: SWALLOW; clip_to: "fade"; @@ -126,20 +139,6 @@ collections { inherit: "default" 0.0; } } - program { name: "trans_on"; - signal: "translucent,on"; - source: "terminology"; - action: STATE_SET "translucent" 0.0; - target: "base"; - target: "fade"; - } - program { name: "trans_off"; - signal: "translucent,off"; - source: "terminology"; - action: STATE_SET "default" 0.0; - target: "base"; - target: "fade"; - } program { name: "media_off"; signal: "media,off"; source: "terminology"; @@ -1275,6 +1274,16 @@ collections { images { image: "pm_fill.png" COMP; } + script { + public message(Msg_Type:type, id, ...) { + if (type != MSG_INT || id != 1) return; + + if (getarg(2) < 100) + set_state(PART:"fill", "translucent", 0.0); + else + set_state(PART:"fill", "default", 0.0); + } + } parts { //////////////////////////////////////////////////////////////////// // background and shadows diff --git a/data/themes/nyanology/default.edc b/data/themes/nyanology/default.edc index 62b94bff..8515657d 100644 --- a/data/themes/nyanology/default.edc +++ b/data/themes/nyanology/default.edc @@ -16,6 +16,30 @@ collections { image: "pm_overlay.png" COMP; image: "pm_fill.png" COMP; } + script { + public message(Msg_Type:type, id, ...) { + new r, g, b, a, v; + + if (type != MSG_INT || id != 1) return; + + v = getarg(2) * 255 / 100; + + custom_state(PART:"shadow", "default", 0.0); + get_state_val(PART:"shadow", STATE_COLOR, r, g, b, a); + set_state_val(PART:"shadow", STATE_COLOR, r, g, b, v); + set_state(PART:"shadow", "custom", 0.0); + + custom_state(PART:"base", "default", 0.0); + get_state_val(PART:"base", STATE_COLOR, r, g, b, a); + set_state_val(PART:"base", STATE_COLOR, r, g, b, v); + set_state(PART:"base", "custom", 0.0); + + custom_state(PART:"fade", "default", 0.0); + get_state_val(PART:"fade", STATE_COLOR, r, g, b, a); + set_state_val(PART:"fade", STATE_COLOR, r, g, b, v); + set_state(PART:"base", "custom", 0.0); + } + } parts { // other signals sent not handled here // program { name: "focus_in"; @@ -34,11 +58,6 @@ collections { description { state: "default" 0.0; image.normal: "bg_shadow.png"; fill.smooth: 0; - visible: 0; - } - description { state: "translucent" 0.0; - inherit: "default" 0.0; - visible: 1; } } part { name: "base"; type: RECT; @@ -46,18 +65,10 @@ collections { description { state: "default" 0.0; color: 48 48 48 255; } - description { state: "translucent" 0.0; - inherit: "default" 0.0; - visible: 0; - } } part { name: "fade"; type: RECT; description { state: "default" 0.0; } - description { state: "translucent" 0.0; - inherit: "default" 0.0; - color: 255 255 255 128; - } } part { name: "terminology.background"; type: SWALLOW; clip_to: "fade"; @@ -76,22 +87,6 @@ collections { inherit: "default" 0.0; } } - program { name: "trans_on"; - signal: "translucent,on"; - source: "terminology"; - action: STATE_SET "translucent" 0.0; - target: "base"; - target: "shadow"; - target: "fade"; - } - program { name: "trans_off"; - signal: "translucent,off"; - source: "terminology"; - action: STATE_SET "default" 0.0; - target: "base"; - target: "shadow"; - target: "fade"; - } program { name: "media_off"; signal: "media,off"; source: "terminology"; diff --git a/data/themes/nyanology/nyanology.edc b/data/themes/nyanology/nyanology.edc index 3cb365f7..bbbe90e2 100644 --- a/data/themes/nyanology/nyanology.edc +++ b/data/themes/nyanology/nyanology.edc @@ -12,6 +12,20 @@ collections { image: "pm_fill.png" COMP; image: "cr_glow.png" COMP; } + script { + public message(Msg_Type:type, id, ...) { + new r, g, b, a, v; + + if (type != MSG_INT || id != 1) return; + + v = getarg(2) * 255 / 100; + + custom_state(PART:"base", "default", 0.0); + get_state_val(PART:"base", STATE_COLOR, r, g, b, a); + set_state_val(PART:"base", STATE_COLOR, r, g, b, v); + set_state(PART:"base", "custom", 0.0); + } + } parts { // other signals sent not handled here // program { name: "focus_in"; @@ -30,10 +44,6 @@ collections { description { state: "default" 0.0; color: 0 0 0 255; } - description { state: "translucent" 0.0; - inherit: "default" 0.0; - visible: 0; - } description { state: "catblue" 0.0; color: 0 51 102 255; } @@ -67,18 +77,6 @@ collections { inherit: "default" 0.0; } } - program { name: "trans_on"; - signal: "translucent,on"; - source: "terminology"; - action: STATE_SET "translucent" 0.0; - target: "base"; - } - program { name: "trans_off"; - signal: "translucent,off"; - source: "terminology"; - action: STATE_SET "default" 0.0; - target: "base"; - } program { name: "media_off"; signal: "media,off"; source: "terminology"; diff --git a/src/bin/config.c b/src/bin/config.c index 4672843f..2396d0d2 100644 --- a/src/bin/config.c +++ b/src/bin/config.c @@ -100,6 +100,8 @@ config_init(void) (edd_base, Config, "active_links", active_links, EET_T_UCHAR); EET_DATA_DESCRIPTOR_ADD_BASIC (edd_base, Config, "translucent", translucent, EET_T_UCHAR); + EET_DATA_DESCRIPTOR_ADD_BASIC + (edd_base, Config, "opacity", opacity, EET_T_INT); EET_DATA_DESCRIPTOR_ADD_BASIC (edd_base, Config, "mute", mute, EET_T_UCHAR); EET_DATA_DESCRIPTOR_ADD_BASIC @@ -507,6 +509,7 @@ config_load(const char *key) config->theme = eina_stringshare_add("default.edj"); config->background = NULL; config->translucent = EINA_FALSE; + config->opacity = 50; config->jump_on_change = EINA_TRUE; config->jump_on_keypress = EINA_TRUE; config->flicker_on_key = EINA_FALSE; @@ -597,6 +600,7 @@ config_fork(Config *config) CPY(bell_rings); CPY(active_links); CPY(translucent); + CPY(opacity); CPY(mute); CPY(urg_bell); CPY(multi_instance); diff --git a/src/bin/config.h b/src/bin/config.h index d38b11bc..afb04d70 100644 --- a/src/bin/config.h +++ b/src/bin/config.h @@ -45,6 +45,7 @@ struct _Config Eina_Bool bell_rings; Eina_Bool active_links; Eina_Bool translucent; + int opacity; Eina_Bool mute; Eina_Bool urg_bell; Eina_Bool multi_instance; diff --git a/src/bin/main.c b/src/bin/main.c index ff52eea1..5e260ce7 100644 --- a/src/bin/main.c +++ b/src/bin/main.c @@ -1341,14 +1341,16 @@ _sel_go(Split *sp, Term *term) Eina_List *l; Term *tm; double z; + Edje_Message_Int msg; evas_object_hide(sp->term->bg); sp->sel_bg = edje_object_add(evas_object_evas_get(sp->wn->win)); theme_apply(sp->sel_bg, term->config, "terminology/sel/base"); - if (term->config->translucent) - edje_object_signal_emit(sp->sel_bg, "translucent,on", "terminology"); + if (sp->term->config->translucent) + msg.val = term->config->opacity; else - edje_object_signal_emit(sp->sel_bg, "translucent,off", "terminology"); + msg.val = 100; + edje_object_message_send(sp->sel_bg, EDJE_MESSAGE_INT, 1, &msg); edje_object_signal_emit(sp->sel_bg, "begin", "terminology"); sp->sel = sel_add(sp->wn->win); EINA_LIST_FOREACH(sp->terms, l, tm) @@ -1722,16 +1724,15 @@ _cb_cmdbox(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED) static void _win_trans(Win *wn, Term *term, Eina_Bool trans) { + Edje_Message_Int msg; + if (term->config->translucent) - { - edje_object_signal_emit(term->bg, "translucent,on", "terminology"); - edje_object_signal_emit(term->base, "translucent,on", "terminology"); - } + msg.val = term->config->opacity; else - { - edje_object_signal_emit(term->bg, "translucent,off", "terminology"); - edje_object_signal_emit(term->base, "translucent,off", "terminology"); - } + msg.val = 100; + edje_object_message_send(term->bg, EDJE_MESSAGE_INT, 1, &msg); + edje_object_message_send(term->base, EDJE_MESSAGE_INT, 1, &msg); + if (trans) { elm_win_alpha_set(wn->win, EINA_TRUE); @@ -2076,16 +2077,15 @@ _cb_tabcount_next(void *data, Evas_Object *obj EINA_UNUSED, const char *sig EINA static void main_term_bg_config(Term *term) { + Edje_Message_Int msg; + if (term->config->translucent) - { - edje_object_signal_emit(term->bg, "translucent,on", "terminology"); - edje_object_signal_emit(term->base, "translucent,on", "terminology"); - } + msg.val = term->config->opacity; else - { - edje_object_signal_emit(term->bg, "translucent,off", "terminology"); - edje_object_signal_emit(term->base, "translucent,off", "terminology"); - } + msg.val = 100; + + edje_object_message_send(term->bg, EDJE_MESSAGE_INT, 1, &msg); + edje_object_message_send(term->base, EDJE_MESSAGE_INT, 1, &msg); termio_theme_set(term->term, term->bg); edje_object_signal_callback_add(term->bg, "popmedia,done", "terminology", @@ -2203,6 +2203,7 @@ main_term_new(Win *wn, Config *config, const char *cmd, Term *term; Evas_Object *o; Evas *canvas = evas_object_evas_get(wn->win); + Edje_Message_Int msg; term = calloc(1, sizeof(Term)); if (!term) return NULL; @@ -2241,15 +2242,12 @@ main_term_new(Win *wn, Config *config, const char *cmd, evas_object_show(o); if (term->config->translucent) - { - edje_object_signal_emit(term->bg, "translucent,on", "terminology"); - edje_object_signal_emit(term->base, "translucent,on", "terminology"); - } + msg.val = term->config->opacity; else - { - edje_object_signal_emit(term->bg, "translucent,off", "terminology"); - edje_object_signal_emit(term->base, "translucent,off", "terminology"); - } + msg.val = 100; + + edje_object_message_send(term->bg, EDJE_MESSAGE_INT, 1, &msg); + edje_object_message_send(term->base, EDJE_MESSAGE_INT, 1, &msg); term->term = o = termio_add(wn->win, config, cmd, login_shell, cd, size_w, size_h, term); diff --git a/src/bin/options_video.c b/src/bin/options_video.c index 74d56682..64c4d518 100644 --- a/src/bin/options_video.c +++ b/src/bin/options_video.c @@ -7,7 +7,7 @@ #include "options_video.h" #include "main.h" -static Evas_Object *op_trans, *op_mute, *op_vidmod; +static Evas_Object *op_trans, *op_opacity, *op_mute, *op_vidmod; static void _cb_op_video_trans_chg(void *data, Evas_Object *obj, void *event EINA_UNUSED) @@ -15,6 +15,18 @@ _cb_op_video_trans_chg(void *data, Evas_Object *obj, void *event EINA_UNUSED) Evas_Object *term = data; Config *config = termio_config_get(term); config->translucent = elm_check_state_get(obj); + elm_object_disabled_set(op_opacity, !config->translucent); + main_trans_update(config); + config_save(config, NULL); +} + +static void +_cb_op_video_opacity_chg(void *data, Evas_Object *obj, void *event EINA_UNUSED) +{ + Evas_Object *term = data; + Config *config = termio_config_get(term); + config->opacity = elm_slider_value_get(obj); + if (!config->translucent) return; main_trans_update(config); config_save(config, NULL); } @@ -70,6 +82,20 @@ options_video(Evas_Object *opbox, Evas_Object *term) evas_object_smart_callback_add(o, "changed", _cb_op_video_trans_chg, term); + op_opacity = o = elm_slider_add(opbox); + evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.5); + elm_slider_span_size_set(o, 40); + elm_slider_unit_format_set(o, "%1.0f"); + elm_slider_indicator_format_set(o, "%1.0f"); + elm_slider_min_max_set(o, 0, 100); + elm_slider_value_set(o, config->opacity); + elm_object_disabled_set(o, !config->translucent); + elm_box_pack_end(bx0, o); + evas_object_show(o); + evas_object_smart_callback_add(o, "changed", + _cb_op_video_opacity_chg, term); + o = elm_separator_add(opbox); evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0); evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.5);