From 76ba36ea983b60918b1df8a770282fe8c20b33ca Mon Sep 17 00:00:00 2001 From: Al Poole Date: Tue, 5 Dec 2017 22:03:46 +0000 Subject: [PATCH] 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);