forked from enlightenment/terminology
options: opacity level configuration support
Summary: In translucency mode, opacity level could be changed with this patch. @fixes T1066 Test Plan: option -> video -> turn on translucency -> change opacity level Reviewers: billiob, raster Subscribers: seoz Maniphest Tasks: T1066 Differential Revision: https://phab.enlightenment.org/D1180
This commit is contained in:
parent
1891ce2ef1
commit
5bcf35d642
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue