aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBoris Faure <billiob@gmail.com>2017-11-11 20:12:56 +0100
committerBoris Faure <billiob@gmail.com>2017-11-11 20:12:56 +0100
commitbb968b968e48813f750cc74711eb8572e5446800 (patch)
treec6f3748458fa3001ad5f4b88b02ab4723c55b14f
parentmeson: fix typo (diff)
downloadterminology-bb968b968e48813f750cc74711eb8572e5446800.tar.gz
be able to configure shine level on the default theme
Was asked about it too many times, so here it is :)
-rw-r--r--ChangeLog.theme8
-rw-r--r--data/themes/default.edc102
-rw-r--r--src/bin/config.c12
-rw-r--r--src/bin/config.h1
-rw-r--r--src/bin/options_theme.c50
-rw-r--r--src/bin/win.c76
-rw-r--r--src/bin/win.h2
7 files changed, 201 insertions, 50 deletions
diff --git a/ChangeLog.theme b/ChangeLog.theme
index 1791a2f..49288df 100644
--- a/ChangeLog.theme
+++ b/ChangeLog.theme
@@ -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:
--------------------
diff --git a/data/themes/default.edc b/data/themes/default.edc
index 113ecda..c794f28 100644
--- a/data/themes/default.edc
+++ b/data/themes/default.edc
@@ -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;
- v = (getarg(2) * 255) / 100;
+ if (type != MSG_INT)
+ return;
+ if (id == 1) { // fade
+ new r, g, b, a, v;
+ 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:"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:"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_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,7 @@ collections {
visible: 0;
}
}
- part { name: "shine";
+ part { name: "shine_focused";
mouse_events: 0;
description { state: "default" 0.0;
rel1.offset: 0 0;
@@ -707,13 +723,30 @@ collections {
align: 0.5 0.0;
aspect: (256/120) (256/120);
aspect_preference: HORIZONTAL;
- color: 255 255 255 64;
+ 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;
+ 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 64;
+ }
+ description { state: "focused" 0.0;
+ inherit: "default" 0.0;
+ color: 255 255 255 0;
+ }
+ }
part { name: "glintclip"; type: RECT;
description { state: "default" 0.0;
}
@@ -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
}
////////////////////////////////////////////////////////////////////
diff --git a/src/bin/config.c b/src/bin/config.c
index 56a34b2..9138066 100644
--- a/src/bin/config.c
+++ b/src/bin/config.c
@@ -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)
{
diff --git a/src/bin/config.h b/src/bin/config.h
index cef03fc..21e1bd7 100644
--- a/src/bin/config.h
+++ b/src/bin/config.h
@@ -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;
diff --git a/src/bin/options_theme.c b/src/bin/options_theme.c
index 19ab60d..f3838c1 100644
--- a/src/bin/options_theme.c
+++ b/src/bin/options_theme.c
@@ -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;
diff --git a/src/bin/win.c b/src/bin/win.c
index 1b8315a..6c0cb50 100644
--- a/src/bin/win.c
+++ b/src/bin/win.c
@@ -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;
@@ -3009,6 +3006,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)
{
Config *old_config = term->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);
diff --git a/src/bin/win.h b/src/bin/win.h
index ef9f311..c646f90 100644
--- a/src/bin/win.h
+++ b/src/bin/win.h
@@ -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