From 76ba36ea983b60918b1df8a770282fe8c20b33ca Mon Sep 17 00:00:00 2001 From: Al Poole Date: Tue, 5 Dec 2017 22:03:46 +0000 Subject: [PATCH 1/7] theme: add settings for alpha --- src/bin/edi_config.c | 4 ++- src/bin/edi_config.h | 1 + src/bin/edi_main.c | 9 +++++ src/bin/edi_private.h | 2 ++ src/bin/edi_theme.c | 32 ++++++++++++++++- src/bin/edi_theme.h | 2 ++ src/bin/editor/edi_editor.c | 1 + src/bin/mainview/edi_mainview.c | 1 + src/bin/screens/edi_settings.c | 62 ++++++++++++++++++++++++++++++--- 9 files changed, 108 insertions(+), 6 deletions(-) diff --git a/src/bin/edi_config.c b/src/bin/edi_config.c index d8a4da7..453d821 100644 --- a/src/bin/edi_config.c +++ b/src/bin/edi_config.c @@ -273,6 +273,7 @@ _edi_config_init(void) EDI_CONFIG_VAL(D, T, font.name, EET_T_STRING); EDI_CONFIG_VAL(D, T, font.size, EET_T_INT); EDI_CONFIG_VAL(D, T, gui.translucent, EET_T_UCHAR); + EDI_CONFIG_VAL(D, T, gui.alpha, EET_T_INT); EDI_CONFIG_VAL(D, T, gui.theme, EET_T_STRING); EDI_CONFIG_VAL(D, T, gui.width, EET_T_INT); EDI_CONFIG_VAL(D, T, gui.height, EET_T_INT); @@ -506,7 +507,8 @@ _edi_project_config_load() /* setup defaults */ IFPCFG(0x0001); - _edi_project_config->gui.translucent = EINA_TRUE; + _edi_project_config->gui.translucent = EINA_FALSE; + _edi_project_config->gui.alpha = 255; _edi_project_config->gui.width = 640; _edi_project_config->gui.height = 480; _edi_project_config->gui.leftsize = 0.25; diff --git a/src/bin/edi_config.h b/src/bin/edi_config.h index 703c24b..bd591e4 100644 --- a/src/bin/edi_config.h +++ b/src/bin/edi_config.h @@ -79,6 +79,7 @@ struct _Edi_Project_Config struct { Eina_Bool translucent; + int alpha; const char *theme; int width, height, bottomtab; double leftsize, bottomsize; diff --git a/src/bin/edi_main.c b/src/bin/edi_main.c index 0fcab10..5ef6b66 100644 --- a/src/bin/edi_main.c +++ b/src/bin/edi_main.c @@ -8,10 +8,12 @@ #include #include +#include #include #include "Edi.h" #include "edi_config.h" +#include "edi_theme.h" #include "edi_filepanel.h" #include "edi_file.h" #include "edi_logpanel.h" @@ -1472,6 +1474,11 @@ _win_delete_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event edi_close(); } +Evas_Object *edi_main_win_get(void) +{ + return _edi_main_win; +} + Eina_Bool edi_open(const char *inputpath) { @@ -1508,6 +1515,8 @@ edi_open(const char *inputpath) elm_win_resize_object_add(win, hbx); evas_object_show(hbx); + edi_theme_window_alpha_set(); + tb = edi_toolbar_setup(hbx); elm_box_pack_start(hbx, tb); _edi_toolbar = tb; diff --git a/src/bin/edi_private.h b/src/bin/edi_private.h index 5301a72..2eae697 100644 --- a/src/bin/edi_private.h +++ b/src/bin/edi_private.h @@ -48,6 +48,8 @@ extern int EDI_EVENT_FILE_SAVED; Eina_Bool edi_open(const char *path); +Evas_Object *edi_main_win_get(void); + void edi_close(); void edi_open_url(); diff --git a/src/bin/edi_theme.c b/src/bin/edi_theme.c index 9ef3084..e18af9e 100644 --- a/src/bin/edi_theme.c +++ b/src/bin/edi_theme.c @@ -3,6 +3,7 @@ #endif #include +#include #include "Edi.h" #include "edi_theme.h" @@ -14,13 +15,41 @@ static Eina_List *_edi_themes = NULL; // we are hooking into Efl for now... Efl_Ui_Theme_Apply efl_ui_widget_theme_apply(Eo *obj); +void +edi_theme_window_alpha_set(void) +{ + Evas_Object *win; + Eina_Bool enabled = _edi_project_config->gui.translucent; + + win = edi_main_win_get(); + + elm_win_alpha_set(win, enabled); + efl_gfx_color_set(efl_part(win, "background"), 64, 64, 64, _edi_project_config->gui.alpha); +} + +void edi_theme_elm_code_alpha_set(Evas_Object *obj) +{ + edi_theme_window_alpha_set(); + + if (_edi_project_config->gui.translucent) + evas_object_color_set(obj, 255, 255, 255, 1); + else + evas_object_color_set(obj, 255, 255, 255, 255); + + edi_theme_window_alpha_set(); + if (_edi_project_config->gui.translucent) + elm_code_widget_alpha_set(obj, _edi_project_config->gui.alpha); + else + elm_code_widget_alpha_set(obj, 255); +} + void edi_theme_elm_code_set(Evas_Object *obj, const char *name) { Eina_List *l; Edi_Theme *theme; - if (!name) + if (!obj || !name) return; edi_theme_themes_get(); @@ -33,6 +62,7 @@ edi_theme_elm_code_set(Evas_Object *obj, const char *name) elm_layout_file_set(obj, theme->path, "elm/code/layout/default"); efl_ui_widget_theme_apply(obj); } + } Edi_Theme * diff --git a/src/bin/edi_theme.h b/src/bin/edi_theme.h index 6d02315..39f3211 100644 --- a/src/bin/edi_theme.h +++ b/src/bin/edi_theme.h @@ -57,7 +57,9 @@ Eina_List *edi_theme_themes_get(void); */ Edi_Theme *edi_theme_theme_by_name(const char *name); +void edi_theme_window_alpha_set(void); +void edi_theme_elm_code_alpha_set(Evas_Object *obj); /** * @} */ diff --git a/src/bin/editor/edi_editor.c b/src/bin/editor/edi_editor.c index 7c6b903..7d85633 100644 --- a/src/bin/editor/edi_editor.c +++ b/src/bin/editor/edi_editor.c @@ -1307,6 +1307,7 @@ _edi_editor_config_changed(void *data, int type EINA_UNUSED, void *event EINA_UN code->config.trim_whitespace = _edi_config->trim_whitespace; elm_obj_code_widget_font_set(widget, _edi_project_config->font.name, _edi_project_config->font.size); + edi_theme_elm_code_alpha_set(widget); edi_theme_elm_code_set(widget, _edi_project_config->gui.theme); elm_obj_code_widget_show_whitespace_set(widget, _edi_project_config->gui.show_whitespace); elm_obj_code_widget_tab_inserts_spaces_set(widget, _edi_project_config->gui.tab_inserts_spaces); diff --git a/src/bin/mainview/edi_mainview.c b/src/bin/mainview/edi_mainview.c index 5553390..5726061 100644 --- a/src/bin/mainview/edi_mainview.c +++ b/src/bin/mainview/edi_mainview.c @@ -297,6 +297,7 @@ _edi_mainview_split_config_changed_cb(void *data, int type EINA_UNUSED, void *ev Elm_Code_Widget *widget = data; elm_code_widget_font_set(widget, _edi_project_config->font.name, _edi_project_config->font.size); + edi_theme_elm_code_alpha_set(widget); edi_theme_elm_code_set(widget, _edi_project_config->gui.theme); return ECORE_CALLBACK_RENEW; diff --git a/src/bin/screens/edi_settings.c b/src/bin/screens/edi_settings.c index 443133c..3f39c13 100644 --- a/src/bin/screens/edi_settings.c +++ b/src/bin/screens/edi_settings.c @@ -108,6 +108,19 @@ _edi_settings_toolbar_hidden_cb(void *data EINA_UNUSED, Evas_Object *obj, _edi_project_config_save(); } +static void +_edi_settings_translucent_state_cb(void *data EINA_UNUSED, Evas_Object *obj, + void *event EINA_UNUSED) +{ + Evas_Object *check = obj; + int state = elm_check_state_get(check); + + _edi_project_config->gui.translucent = state; + _edi_project_config_save(); + + elm_object_disabled_set((Evas_Object *) data, !state); +} + static void _edi_settings_font_choose_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { @@ -173,11 +186,19 @@ _edi_settings_display_theme_text_get_cb(void *data, Evas_Object *obj EINA_UNUSED return strdup(current->title); } +static void +_edi_settings_display_alpha_changed_cb(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) +{ + + _edi_project_config->gui.alpha = elm_slider_value_get(obj); + _edi_project_config_save(); +} + static Evas_Object * _edi_settings_display_create(Evas_Object *parent) { Evas_Object *box, *hbox, *frame, *label, *spinner, *check, *button, *preview; - Evas_Object *table, *combobox; + Evas_Object *table, *combobox, *slider; Elm_Genlist_Item_Class *itc; Edi_Theme *theme; Eina_List *themes, *l; @@ -216,7 +237,7 @@ _edi_settings_display_create(Evas_Object *parent) elm_table_pack(table, label, 0, 1, 1, 1); evas_object_show(label); - // START OF COLOR SELECTOR + // START OF THEME SELECTOR combobox = elm_combobox_add(table); evas_object_size_hint_weight_set(combobox, 0.75, 0.0); @@ -246,17 +267,50 @@ _edi_settings_display_create(Evas_Object *parent) elm_genlist_realized_items_update(combobox); elm_genlist_item_class_free(itc); - // END OF COLOR SELECTOR + // END OF THEME SELECTOR + + // START OF ALPHA SELECTOR + + slider = elm_slider_add(table); + check = elm_check_add(box); + elm_check_state_set(check, _edi_project_config->gui.translucent); + elm_object_text_set(check, _("Translucent")); + evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(table, check, 1, 2, 1, 1); + evas_object_show(check); + evas_object_smart_callback_add(check, "changed", + _edi_settings_translucent_state_cb, slider); + + label = elm_label_add(table); + elm_object_text_set(label, _("Shine")); + evas_object_size_hint_align_set(label, EVAS_HINT_EXPAND, 0.5); + elm_table_pack(table, label, 0, 3, 1, 1); + evas_object_show(label); + + elm_object_disabled_set(slider, !_edi_project_config->gui.translucent); + evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, 0.5); + evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_slider_min_max_set(slider, 0, 255); + elm_slider_value_set(slider, _edi_project_config->gui.alpha); + elm_slider_span_size_set(slider, 255); + elm_slider_step_set(slider, 1); + elm_slider_indicator_format_set(slider, "%1.0f"); + elm_table_pack(table, slider, 1, 3, 1, 1); + evas_object_show(slider); + evas_object_smart_callback_add(slider, "delay,changed", _edi_settings_display_alpha_changed_cb, NULL); + + // END OF ALPHA SELECTOR check = elm_check_add(box); elm_object_text_set(check, _("Display whitespace")); elm_check_state_set(check, _edi_project_config->gui.show_whitespace); elm_box_pack_end(box, check); + evas_object_show(check); evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, 0.0); evas_object_size_hint_align_set(check, 0.0, 0.5); evas_object_smart_callback_add(check, "changed", _edi_settings_display_whitespace_cb, NULL); - evas_object_show(check); hbox = elm_box_add(box); elm_box_horizontal_set(hbox, EINA_TRUE); From 7c674db18c0d70b9cd61c1730006c8611d71b36a Mon Sep 17 00:00:00 2001 From: Andy Williams Date: Wed, 6 Dec 2017 11:23:39 +0000 Subject: [PATCH 2/7] alpha: Fix config defaults --- src/bin/edi_config.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/bin/edi_config.c b/src/bin/edi_config.c index 453d821..dc8884e 100644 --- a/src/bin/edi_config.c +++ b/src/bin/edi_config.c @@ -42,7 +42,7 @@ ((EDI_CONFIG_FILE_EPOCH << 16) | EDI_CONFIG_FILE_GENERATION) # define EDI_PROJECT_CONFIG_FILE_EPOCH 0x0002 -# define EDI_PROJECT_CONFIG_FILE_GENERATION 0x0004 +# define EDI_PROJECT_CONFIG_FILE_GENERATION 0x0005 # define EDI_PROJECT_CONFIG_FILE_VERSION \ ((EDI_PROJECT_CONFIG_FILE_EPOCH << 16) | EDI_PROJECT_CONFIG_FILE_GENERATION) @@ -507,8 +507,6 @@ _edi_project_config_load() /* setup defaults */ IFPCFG(0x0001); - _edi_project_config->gui.translucent = EINA_FALSE; - _edi_project_config->gui.alpha = 255; _edi_project_config->gui.width = 640; _edi_project_config->gui.height = 480; _edi_project_config->gui.leftsize = 0.25; @@ -531,6 +529,17 @@ _edi_project_config_load() _edi_project_config->gui.tab_inserts_spaces = EINA_TRUE; IFPCFGEND; + IFPCFG(0x0004); + _edi_project_config->panels = NULL; + _panel_add(); + _edi_project_config->windows = NULL; + IFPCFGEND; + + IFPCFG(0x0005); + _edi_project_config->gui.translucent = EINA_FALSE; + _edi_project_config->gui.alpha = 255; + IFPCFGEND; + /* limit config values so they are sane */ EDI_CONFIG_LIMIT(_edi_project_config->font.size, EDI_FONT_MIN, EDI_FONT_MAX); EDI_CONFIG_LIMIT(_edi_project_config->gui.width, 150, 10000); @@ -541,12 +550,6 @@ _edi_project_config_load() _edi_project_config->version = EDI_PROJECT_CONFIG_FILE_VERSION; - IFPCFG(0x0004); - _edi_project_config->panels = NULL; - _panel_add(); - _edi_project_config->windows = NULL; - IFPCFGEND; - if (save) _edi_project_config_save_no_notify(); } From 27e1b6c5fe37ec6142b7d8a1095477c8e73f71f3 Mon Sep 17 00:00:00 2001 From: Al Poole Date: Wed, 6 Dec 2017 18:34:53 +0000 Subject: [PATCH 3/7] theme: fix small bug and change label. --- src/bin/edi_theme.c | 12 +++++------- src/bin/edi_theme.h | 1 - src/bin/screens/edi_settings.c | 2 +- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/bin/edi_theme.c b/src/bin/edi_theme.c index e18af9e..75bbd4d 100644 --- a/src/bin/edi_theme.c +++ b/src/bin/edi_theme.c @@ -24,19 +24,17 @@ edi_theme_window_alpha_set(void) win = edi_main_win_get(); elm_win_alpha_set(win, enabled); - efl_gfx_color_set(efl_part(win, "background"), 64, 64, 64, _edi_project_config->gui.alpha); + + if (enabled) + efl_gfx_color_set(efl_part(win, "background"), 64, 64, 64, _edi_project_config->gui.alpha); + else + efl_gfx_color_set(efl_part(win, "background"), 64, 64, 64, 255); } void edi_theme_elm_code_alpha_set(Evas_Object *obj) { edi_theme_window_alpha_set(); - if (_edi_project_config->gui.translucent) - evas_object_color_set(obj, 255, 255, 255, 1); - else - evas_object_color_set(obj, 255, 255, 255, 255); - - edi_theme_window_alpha_set(); if (_edi_project_config->gui.translucent) elm_code_widget_alpha_set(obj, _edi_project_config->gui.alpha); else diff --git a/src/bin/edi_theme.h b/src/bin/edi_theme.h index 39f3211..d6d3992 100644 --- a/src/bin/edi_theme.h +++ b/src/bin/edi_theme.h @@ -58,7 +58,6 @@ Eina_List *edi_theme_themes_get(void); Edi_Theme *edi_theme_theme_by_name(const char *name); void edi_theme_window_alpha_set(void); - void edi_theme_elm_code_alpha_set(Evas_Object *obj); /** * @} diff --git a/src/bin/screens/edi_settings.c b/src/bin/screens/edi_settings.c index 3f39c13..45814e9 100644 --- a/src/bin/screens/edi_settings.c +++ b/src/bin/screens/edi_settings.c @@ -283,7 +283,7 @@ _edi_settings_display_create(Evas_Object *parent) _edi_settings_translucent_state_cb, slider); label = elm_label_add(table); - elm_object_text_set(label, _("Shine")); + elm_object_text_set(label, _("Alpha")); evas_object_size_hint_align_set(label, EVAS_HINT_EXPAND, 0.5); elm_table_pack(table, label, 0, 3, 1, 1); evas_object_show(label); From 30064502d13e9fb02a40ba00d3582d82128209b9 Mon Sep 17 00:00:00 2001 From: Al Poole Date: Wed, 6 Dec 2017 19:45:49 +0000 Subject: [PATCH 4/7] alpha: make sure window alpha is set on config change. --- src/bin/edi_main.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/bin/edi_main.c b/src/bin/edi_main.c index 5ef6b66..643e2f1 100644 --- a/src/bin/edi_main.c +++ b/src/bin/edi_main.c @@ -1368,6 +1368,8 @@ static Eina_Bool _edi_config_changed(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED) { _edi_toolbar_set_visible(!_edi_project_config->gui.toolbar_hidden); + edi_theme_window_alpha_set(); + return ECORE_CALLBACK_RENEW; } From c4c0db1383f68e0fa8e8ed463abc90b4ded417a9 Mon Sep 17 00:00:00 2001 From: Al Poole Date: Wed, 6 Dec 2017 23:43:44 +0000 Subject: [PATCH 5/7] theme: remove unnecessary call, and slight tidy. --- src/bin/edi_theme.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/bin/edi_theme.c b/src/bin/edi_theme.c index 75bbd4d..b6cb42f 100644 --- a/src/bin/edi_theme.c +++ b/src/bin/edi_theme.c @@ -33,8 +33,6 @@ edi_theme_window_alpha_set(void) void edi_theme_elm_code_alpha_set(Evas_Object *obj) { - edi_theme_window_alpha_set(); - if (_edi_project_config->gui.translucent) elm_code_widget_alpha_set(obj, _edi_project_config->gui.alpha); else @@ -60,7 +58,6 @@ edi_theme_elm_code_set(Evas_Object *obj, const char *name) elm_layout_file_set(obj, theme->path, "elm/code/layout/default"); efl_ui_widget_theme_apply(obj); } - } Edi_Theme * From 61aa3512b8d5b1613231c6f314272f0486c8019e Mon Sep 17 00:00:00 2001 From: Al Poole Date: Wed, 6 Dec 2017 23:53:04 +0000 Subject: [PATCH 6/7] settings: slight tidy up and make code easier to read. --- src/bin/screens/edi_settings.c | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/src/bin/screens/edi_settings.c b/src/bin/screens/edi_settings.c index 45814e9..d74952e 100644 --- a/src/bin/screens/edi_settings.c +++ b/src/bin/screens/edi_settings.c @@ -108,19 +108,6 @@ _edi_settings_toolbar_hidden_cb(void *data EINA_UNUSED, Evas_Object *obj, _edi_project_config_save(); } -static void -_edi_settings_translucent_state_cb(void *data EINA_UNUSED, Evas_Object *obj, - void *event EINA_UNUSED) -{ - Evas_Object *check = obj; - int state = elm_check_state_get(check); - - _edi_project_config->gui.translucent = state; - _edi_project_config_save(); - - elm_object_disabled_set((Evas_Object *) data, !state); -} - static void _edi_settings_font_choose_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { @@ -186,6 +173,24 @@ _edi_settings_display_theme_text_get_cb(void *data, Evas_Object *obj EINA_UNUSED return strdup(current->title); } +static void +_edi_settings_display_translucent_state_cb(void *data EINA_UNUSED, Evas_Object *obj, + void *event EINA_UNUSED) +{ + Evas_Object *slider, *check; + int state; + + check = obj; + slider = data; + + state = elm_check_state_get(check); + + _edi_project_config->gui.translucent = state; + _edi_project_config_save(); + + elm_object_disabled_set(slider, !state); +} + static void _edi_settings_display_alpha_changed_cb(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) { @@ -280,7 +285,7 @@ _edi_settings_display_create(Evas_Object *parent) elm_table_pack(table, check, 1, 2, 1, 1); evas_object_show(check); evas_object_smart_callback_add(check, "changed", - _edi_settings_translucent_state_cb, slider); + _edi_settings_display_translucent_state_cb, slider); label = elm_label_add(table); elm_object_text_set(label, _("Alpha")); From 392ab14c43e0088f9a6bda6c4aaec8d5b8be061f Mon Sep 17 00:00:00 2001 From: Andy Williams Date: Fri, 8 Dec 2017 22:39:38 +0000 Subject: [PATCH 7/7] alpha: Tidy settings screen for translucency --- src/bin/screens/edi_settings.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/bin/screens/edi_settings.c b/src/bin/screens/edi_settings.c index d74952e..382b46e 100644 --- a/src/bin/screens/edi_settings.c +++ b/src/bin/screens/edi_settings.c @@ -199,6 +199,12 @@ _edi_settings_display_alpha_changed_cb(void *data EINA_UNUSED, Evas_Object *obj, _edi_project_config_save(); } +static char * +_edi_settings_display_alpha_format(double value) +{ + return (char*)eina_stringshare_printf("%1.0f%%", (value/255)*100); +} + static Evas_Object * _edi_settings_display_create(Evas_Object *parent) { @@ -275,11 +281,15 @@ _edi_settings_display_create(Evas_Object *parent) // END OF THEME SELECTOR // START OF ALPHA SELECTOR + label = elm_label_add(table); + elm_object_text_set(label, _("Translucent")); + evas_object_size_hint_align_set(label, EVAS_HINT_EXPAND, 0.5); + elm_table_pack(table, label, 0, 2, 1, 1); + evas_object_show(label); slider = elm_slider_add(table); check = elm_check_add(box); elm_check_state_set(check, _edi_project_config->gui.translucent); - elm_object_text_set(check, _("Translucent")); evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, 0.0); evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL); elm_table_pack(table, check, 1, 2, 1, 1); @@ -300,10 +310,13 @@ _edi_settings_display_create(Evas_Object *parent) elm_slider_value_set(slider, _edi_project_config->gui.alpha); elm_slider_span_size_set(slider, 255); elm_slider_step_set(slider, 1); - elm_slider_indicator_format_set(slider, "%1.0f"); + elm_slider_units_format_function_set(slider, _edi_settings_display_alpha_format, + (void(*)(char*))eina_stringshare_del); + elm_slider_indicator_format_function_set(slider, _edi_settings_display_alpha_format, + (void(*)(char*))eina_stringshare_del); elm_table_pack(table, slider, 1, 3, 1, 1); evas_object_show(slider); - evas_object_smart_callback_add(slider, "delay,changed", _edi_settings_display_alpha_changed_cb, NULL); + evas_object_smart_callback_add(slider, "slider,drag,stop", _edi_settings_display_alpha_changed_cb, NULL); // END OF ALPHA SELECTOR