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:
wonguk.jeong 2014-07-13 15:07:41 +02:00 committed by Boris Faure
parent 1891ce2ef1
commit 5bcf35d642
8 changed files with 178 additions and 140 deletions

View File

@ -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)

View File

@ -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

View File

@ -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";

View File

@ -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";

View File

@ -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);

View File

@ -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;

View File

@ -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);

View File

@ -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);