diff --git a/data/themes/default.edc b/data/themes/default.edc index 4027d8f8..21a76b93 100644 --- a/data/themes/default.edc +++ b/data/themes/default.edc @@ -13,12 +13,20 @@ collections { fill.smooth: 0; visible: 0; } + description { state: "translucent" 0.0; + inherit: "default" 0.0; + visible: 1; + } } part { name: "base"; type: RECT; mouse_events: 1; description { state: "default" 0.0; color: 48 48 48 255; } + description { state: "translucent" 0.0; + inherit: "default" 0.0; + visible: 0; + } } part { name: "terminology.content"; type: SWALLOW; description { state: "default" 0.0; @@ -84,6 +92,20 @@ collections { transition: DECELERATE 0.5; target: "terminology.options"; } + program { name: "trans_on"; + signal: "translucent,on"; + source: "terminology"; + action: STATE_SET "translucent" 0.0; + target: "base"; + target: "shadow"; + } + program { name: "trans_off"; + signal: "translucent,off"; + source: "terminology"; + action: STATE_SET "default" 0.0; + target: "base"; + target: "shadow"; + } } } } diff --git a/data/themes/images/bg_shadow.png b/data/themes/images/bg_shadow.png index ae502f8a..be97a9ae 100644 Binary files a/data/themes/images/bg_shadow.png and b/data/themes/images/bg_shadow.png differ diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am index fbebdbbb..eddc6eeb 100644 --- a/src/bin/Makefile.am +++ b/src/bin/Makefile.am @@ -15,6 +15,7 @@ keyin.c keyin.h \ main.c main.h \ options.c options.h \ options_font.c options_font.h \ +options_behavior.c options_behavior.h \ termio.c termio.h \ termpty.c termpty.h \ utf8.c utf8.h \ diff --git a/src/bin/main.c b/src/bin/main.c index 507d7bf0..1b99be67 100644 --- a/src/bin/main.c +++ b/src/bin/main.c @@ -47,6 +47,21 @@ _cb_options(void *data, Evas_Object *obj, void *event) options_toggle(win, bg, term); } +void +main_trans_update(void) +{ + if (config->translucent) + { + edje_object_signal_emit(bg, "translucent,on", "terminology"); + elm_win_alpha_set(win, EINA_TRUE); + } + else + { + edje_object_signal_emit(bg, "translucent,off", "terminology"); + elm_win_alpha_set(win, EINA_FALSE); + } +} + EAPI_MAIN int elm_main(int argc, char **argv) { @@ -90,6 +105,8 @@ elm_main(int argc, char **argv) evas_object_smart_callback_add(o, "options", _cb_options, NULL); evas_object_show(o); + main_trans_update(); + evas_object_smart_callback_add(win, "focus,in", _cb_focus_in, term); evas_object_smart_callback_add(win, "focus,out", _cb_focus_out, term); _cb_size_hint(win, evas_object_evas_get(win), term, NULL); diff --git a/src/bin/main.h b/src/bin/main.h index e69de29b..216876c6 100644 --- a/src/bin/main.h +++ b/src/bin/main.h @@ -0,0 +1 @@ +void main_trans_update(void); diff --git a/src/bin/options.c b/src/bin/options.c index f5ea827f..b1380aa4 100644 --- a/src/bin/options.c +++ b/src/bin/options.c @@ -1,6 +1,7 @@ #include #include "options.h" #include "options_font.h" +#include "options_behavior.h" static Evas_Object *op_frame, *op_box = NULL, *op_toolbar = NULL, *op_opbox = NULL; static Eina_Bool op_out = EINA_FALSE; @@ -30,7 +31,7 @@ static void _cb_op_behavior(void *data, Evas_Object *obj, void *event) { elm_box_clear(op_opbox); - // XXX: not done yet + options_behavior(op_opbox, data); } void diff --git a/src/bin/options_behavior.c b/src/bin/options_behavior.c new file mode 100644 index 00000000..b398dab6 --- /dev/null +++ b/src/bin/options_behavior.c @@ -0,0 +1,109 @@ +#include +#include "config.h" +#include "termio.h" +#include "options.h" +#include "options_font.h" +#include "main.h" + +static Evas_Object *op_sbslider, *op_jumpcheck, *op_trans, *op_wordsep; + +static void +_cb_op_behavior_jump_chg(void *data, Evas_Object *obj, void *event) +{ + config->jump_on_change = elm_check_state_get(obj); + termio_config_update(data); + config_save(); +} + +static void +_cb_op_behavior_trans_chg(void *data, Evas_Object *obj, void *event) +{ + config->translucent = elm_check_state_get(obj); + main_trans_update(); + config_save(); +} + +static void +_cb_op_behavior_wsep_chg(void *data, Evas_Object *obj, void *event) +{ + // XXX: do +} + +static void +_cb_op_behavior_sback_chg(void *data, Evas_Object *obj, void *event) +{ + // XXX: do +} + +void +options_behavior(Evas_Object *opbox, Evas_Object *term) +{ + Evas_Object *o; + char *txt; + + op_jumpcheck = o = elm_check_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_object_text_set(o, "Jump to bottom on change"); + elm_check_state_set(o, config->jump_on_change); + elm_box_pack_end(opbox, o); + evas_object_show(o); + evas_object_smart_callback_add(o, "changed", + _cb_op_behavior_jump_chg, term); + + op_jumpcheck = o = elm_check_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_object_text_set(o, "Translucent"); + elm_check_state_set(o, config->translucent); + elm_box_pack_end(opbox, o); + evas_object_show(o); + evas_object_smart_callback_add(o, "changed", + _cb_op_behavior_trans_chg, NULL); + + 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, "Word separators:"); + elm_box_pack_end(opbox, o); + evas_object_show(o); + + op_wordsep = o = elm_entry_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_entry_scrollable_set(o, EINA_TRUE); + elm_entry_single_line_set(o, EINA_TRUE); + txt = elm_entry_utf8_to_markup(config->wordsep); + if (txt) + { + elm_object_text_set(o, txt); + free(txt); + } + elm_box_pack_end(opbox, o); + evas_object_show(o); + evas_object_smart_callback_add(o, "changed", + _cb_op_behavior_wsep_chg, term); + + 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, "Scrollback lines:"); + elm_box_pack_end(opbox, o); + evas_object_show(o); + + op_sbslider = 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.0); + elm_slider_span_size_set(o, 160); + elm_slider_unit_format_set(o, "%1.0f"); + elm_slider_indicator_format_set(o, "%1.0f"); + elm_slider_min_max_set(o, 0, 10000); + elm_slider_value_set(o, config->scrollback); + elm_box_pack_end(opbox, o); + evas_object_show(o); + evas_object_smart_callback_add(o, "delay,changed", + _cb_op_behavior_sback_chg, term); + + elm_box_pack_end(opbox, o); + evas_object_show(o); +} diff --git a/src/bin/options_behavior.h b/src/bin/options_behavior.h new file mode 100644 index 00000000..ede2d282 --- /dev/null +++ b/src/bin/options_behavior.h @@ -0,0 +1 @@ +void options_behavior(Evas_Object *opbox, Evas_Object *term);