be able to configure shine level on the default theme

Was asked about it too many times, so here it is :)
This commit is contained in:
Boris Faure 2017-11-11 20:12:56 +01:00
parent 2a78d2fdcd
commit bb968b968e
7 changed files with 201 additions and 50 deletions

View File

@ -1,7 +1,13 @@
=================
Terminology 0.9.1
Terminology 1.2.0
=================
Changes since 1.1.1:
--------------------
* In group "terminology/background", "message" with id 2 requires an INT to
specify the amount of shine
Changes since 0.9.1:
--------------------

View File

@ -142,16 +142,18 @@ collections {
group { name: "terminology/core";
script {
public message(Msg_Type:type, id, ...) {
new r, g, b, a, v;
if ((type != MSG_INT) || (id != 1)) return;
if (type != MSG_INT)
return;
if (id == 1) { // fade
new r, g, b, a, v;
v = (getarg(2) * 255) / 100;
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);
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 {
@ -279,19 +281,33 @@ collections {
public message(Msg_Type:type, id, ...) {
new r, g, b, a, v;
if ((type != MSG_INT) || (id != 1)) return;
if (type != MSG_INT)
return;
if (id == 1) {
v = (getarg(2) * 255) / 100;
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:"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);
} else if (id == 2) {
v = getarg(2);
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:"shine_focused", "focused", 0.0);
get_state_val(PART:"shine_focused", STATE_COLOR, r, g, b, a);
set_state_val(PART:"shine_focused", STATE_COLOR, r, g, b, v);
set_state(PART:"shine_focused", "custom", 0.0);
custom_state(PART:"shine_unfocused", "default", 0.0);
get_state_val(PART:"shine_unfocused", STATE_COLOR, r, g, b, a);
set_state_val(PART:"shine_unfocused", STATE_COLOR, r, g, b, v/8);
set_state(PART:"shine_unfocused", "custom", 0.0);
}
}
}
parts {
@ -697,7 +713,24 @@ collections {
visible: 0;
}
}
part { name: "shine";
part { name: "shine_focused";
mouse_events: 0;
description { state: "default" 0.0;
rel1.offset: 0 0;
rel2.offset: -1 -1;
image.normal: "bg_shine";
fill.smooth: 0;
align: 0.5 0.0;
aspect: (256/120) (256/120);
aspect_preference: HORIZONTAL;
color: 255 255 255 0;
}
description { state: "focused" 0.0;
inherit: "default" 0.0;
color: 255 255 255 255;
}
}
part { name: "shine_unfocused";
mouse_events: 0;
description { state: "default" 0.0;
rel1.offset: 0 0;
@ -711,7 +744,7 @@ collections {
}
description { state: "focused" 0.0;
inherit: "default" 0.0;
color: 255 255 255 255;
color: 255 255 255 0;
}
}
part { name: "glintclip"; type: RECT;
@ -1005,19 +1038,31 @@ collections {
action: STATE_SET "focused" 0.0;
target: "glint";
target: "glow";
target: "shine";
target: "shine_unfocused";
target: "shine_focused";
after: "focus_in2";
#if (EFL_VERSION_MAJOR > 1) || (EFL_VERSION_MINOR >= 9)
sequence {
action: STATE_SET "custom" 0.0;
target: "shine_focused";
}
#endif
}
program {
signal: "focused,set"; source: "terminology";
action: STATE_SET "focused" 0.0;
target: "glint";
target: "shine";
target: "shine_focused";
target: "shine_unfocused";
#if (EFL_VERSION_MAJOR > 1) || (EFL_VERSION_MINOR >= 9)
sequence {
action: STATE_SET "focused2" 0.0;
target: "glow";
}
sequence {
action: STATE_SET "custom" 0.0;
target: "shine_focused";
}
#endif
}
program { name: "focus_in2";
@ -1030,7 +1075,18 @@ collections {
action: STATE_SET "default" 0.0;
target: "glint";
target: "glow";
target: "shine";
target: "shine_focused";
target: "shine_unfocused";
#if (EFL_VERSION_MAJOR > 1) || (EFL_VERSION_MINOR >= 9)
sequence {
action: STATE_SET "focused2" 0.0;
target: "glow";
}
sequence {
action: STATE_SET "custom" 0.0;
target: "shine_unfocused";
}
#endif
}
////////////////////////////////////////////////////////////////////

View File

@ -7,7 +7,7 @@
#include "col.h"
#include "utils.h"
#define CONF_VER 16
#define CONF_VER 17
#define LIM(v, min, max) {if (v >= max) v = max; else if (v <= min) v = min;}
@ -172,6 +172,8 @@ config_init(void)
(edd_base, Config, "ty_escapes", ty_escapes, EET_T_UCHAR);
EET_DATA_DESCRIPTOR_ADD_BASIC
(edd_base, Config, "changedir_to_current", changedir_to_current, EET_T_UCHAR);
EET_DATA_DESCRIPTOR_ADD_BASIC
(edd_base, Config, "shine", shine, EET_T_INT);
}
void
@ -275,6 +277,7 @@ config_sync(const Config *config_src, Config *config)
config->mv_always_show = config_src->mv_always_show;
config->ty_escapes = config_src->ty_escapes;
config->changedir_to_current = config_src->changedir_to_current;
config->shine = config_src->shine;
}
static void
@ -541,6 +544,7 @@ config_new(void)
}
}
_add_default_keys(config);
config->shine = 255;
}
return config;
}
@ -648,7 +652,10 @@ config_load(const char *key)
_add_key(config, "Right", 0, 1, 0, 0, "term_right");
EINA_FALLTHROUGH;
/*pass through*/
case CONF_VER: /* 16 */
case 16:
config->shine = 255;
/*pass through*/
case CONF_VER: /* 17 */
config->version = CONF_VER;
break;
default:
@ -747,6 +754,7 @@ config_fork(const Config *config)
CPY(mv_always_show);
CPY(ty_escapes);
CPY(changedir_to_current);
CPY(shine);
EINA_LIST_FOREACH(config->keys, l, key)
{

View File

@ -52,6 +52,7 @@ struct _Config
double tab_zoom;
int vidmod;
int opacity;
int shine;
int cg_width;
int cg_height;
Eina_Bool jump_on_keypress;

View File

@ -21,6 +21,29 @@ struct _Theme
static Evas_Object *op_themelist;
static Eina_List *themes = NULL;
static Ecore_Timer *seltimer = NULL;
static Evas_Object *op_shine_slider = NULL;
static void
_cb_op_shine_sel(void *data,
Evas_Object *obj,
void *_event EINA_UNUSED)
{
Evas_Object *termio_obj = data;
Config *config = termio_config_get(termio_obj);
Term *term = termio_term_get(termio_obj);
Win *wn = term_win_get(term);
int shine = elm_slider_value_get(obj);
Eina_List *l, *wn_list;
if (config->shine == shine)
return;
wn_list = win_terms_get(wn);
EINA_LIST_FOREACH(wn_list, l, term)
{
term_apply_shine(term, shine);
}
}
static char *
_cb_op_theme_text_get(void *data,
@ -121,10 +144,35 @@ options_theme(Evas_Object *opbox, Evas_Object *term)
box = o = elm_box_add(opbox);
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_box_horizontal_set(o, EINA_TRUE);
elm_box_horizontal_set(o, EINA_FALSE);
elm_object_content_set(fr, o);
evas_object_show(o);
o = elm_label_add(opbox);
evas_object_size_hint_weight_set(o, 0.0, 0.0);
evas_object_size_hint_align_set(o, 0.0, 0.5);
elm_object_text_set(o, _("Shine:"));
elm_box_pack_end(box, o);
evas_object_show(o);
op_shine_slider = 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, 255);
#if (ECORE_VERSION_MAJOR > 1) || (ECORE_VERSION_MINOR >= 8)
elm_slider_step_set(o, 1);
#endif
elm_slider_value_set(o, config->shine);
elm_box_pack_end(box, o);
evas_object_show(o);
evas_object_smart_callback_add(o, "delay,changed",
_cb_op_shine_sel, term);
it_class = elm_gengrid_item_class_new();
it_class->item_style = "thumb";
it_class->func.text_get = _cb_op_theme_text_get;

View File

@ -181,6 +181,8 @@ static void _tab_new_cb(void *data, Evas_Object *_obj EINA_UNUSED, void *_event_
static Tab_Item* tab_item_new(Tabs *tabs, Term_Container *child);
static void _tabs_refresh(Tabs *tabs);
static void _term_tabregion_free(Term *term);
static void _set_trans(Config *config, Evas_Object *bg, Evas_Object *base);
static void _set_shine(Config *config, Evas_Object *bg);
/* {{{ Solo */
@ -2104,7 +2106,6 @@ _cb_tab_selector_show(Tabs *tabs, Tab_Item *to_item)
Eina_List *l;
int count;
double z;
Edje_Message_Int msg;
Win *wn = tc->wn;
Tab_Item *tab_item;
Evas_Object *o;
@ -2122,12 +2123,8 @@ _cb_tab_selector_show(Tabs *tabs, Tab_Item *to_item)
evas_object_geometry_set(tabs->selector_bg, x, y, w, h);
evas_object_hide(o);
if (wn->config->translucent)
msg.val = wn->config->opacity;
else
msg.val = 100;
edje_object_message_send(tabs->selector_bg, EDJE_MESSAGE_INT, 1, &msg);
_set_trans(wn->config, tabs->selector_bg, NULL);
_set_shine(wn->config, tabs->selector_bg);
edje_object_signal_emit(tabs->selector_bg, "begin", "terminology");
tab_item = tabs->current;
@ -3008,6 +3005,50 @@ _tabs_new(Term_Container *child, Term_Container *parent)
/* }}} */
/* {{{ Term */
static void
_set_shine(Config *config, Evas_Object *bg)
{
Edje_Message_Int msg;
if (config)
msg.val = config->shine;
else
msg.val = 255;
if (bg)
edje_object_message_send(bg, EDJE_MESSAGE_INT, 2, &msg);
}
void
term_apply_shine(Term *term, int shine)
{
Config *config = term->config;
if (config->shine != shine)
{
config->shine = shine;
_set_shine(config, term->bg);
config_save(config, NULL);
}
}
static void
_set_trans(Config *config, Evas_Object *bg, Evas_Object *base)
{
Edje_Message_Int msg;
if (config && config->translucent)
msg.val = config->opacity;
else
msg.val = 100;
if (bg)
edje_object_message_send(bg, EDJE_MESSAGE_INT, 1, &msg);
if (base)
edje_object_message_send(base, EDJE_MESSAGE_INT, 1, &msg);
}
static void
_term_config_set(Term *term, Config *config)
{
@ -4244,18 +4285,12 @@ _cb_tabcount_next(void *data,
_cb_next(data, NULL, NULL);
}
static void
_term_bg_config(Term *term)
{
Edje_Message_Int msg;
if (term->config->translucent)
msg.val = term->config->opacity;
else
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);
_set_trans(term->config, term->bg, term->base);
_set_shine(term->config, term->bg);
termio_theme_set(term->termio, term->bg);
edje_object_signal_callback_add(term->bg, "popmedia,done", "terminology",
@ -4490,7 +4525,6 @@ 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;
@ -4541,16 +4575,12 @@ term_new(Win *wn, Config *config, const char *cmd,
_term_tabregion_setup(term);
if (term->config->translucent)
msg.val = term->config->opacity;
else
msg.val = 100;
if (term->config->mv_always_show)
term->miniview_shown = EINA_TRUE;
edje_object_message_send(term->bg, EDJE_MESSAGE_INT, 1, &msg);
edje_object_message_send(term->base, EDJE_MESSAGE_INT, 1, &msg);
_set_trans(term->config, term->bg, term->base);
_set_shine(term->config, term->bg);
term->termio = o = termio_add(wn->win, config, cmd, login_shell, cd,
size_w, size_h, term, title);

View File

@ -74,5 +74,7 @@ typedef Eina_Bool (*For_Each_Term)(Term *term, void *data);
Eina_Bool
for_each_term_do(Win *wn, For_Each_Term cb, void *data);
void
term_apply_shine(Term *term, int shine);
#endif