diff --git a/applications/services/gui/application.fam b/applications/services/gui/application.fam index 193b9dfd3..43e93559e 100644 --- a/applications/services/gui/application.fam +++ b/applications/services/gui/application.fam @@ -7,6 +7,7 @@ App( requires=[ "input", "notification", + "xtreme_settings", ], stack_size=2 * 1024, order=70, diff --git a/applications/services/gui/gui.c b/applications/services/gui/gui.c index 9495128f2..2d6098851 100644 --- a/applications/services/gui/gui.c +++ b/applications/services/gui/gui.c @@ -1,3 +1,4 @@ +#include "../../settings/xtreme_settings/xtreme_settings.h" #include "gui_i.h" #include @@ -54,17 +55,23 @@ static void gui_redraw_status_bar(Gui* gui, bool need_attention) { canvas_frame_set( gui->canvas, GUI_STATUS_BAR_X, GUI_STATUS_BAR_Y, GUI_DISPLAY_WIDTH, GUI_STATUS_BAR_HEIGHT); + XtremeSettings* xtreme_settings = XTREME_SETTINGS(); + /* for support black theme - paint white area and * draw icon with transparent white color */ - canvas_set_color(gui->canvas, ColorWhite); - // canvas_draw_box(gui->canvas, 1, 1, 9, 7); - // canvas_draw_box(gui->canvas, 7, 3, 58, 6); - // canvas_draw_box(gui->canvas, 61, 1, 32, 7); - // canvas_draw_box(gui->canvas, 89, 3, 38, 6); - canvas_set_color(gui->canvas, ColorBlack); - canvas_set_bitmap_mode(gui->canvas, 1); - // canvas_draw_icon(gui->canvas, 0, 0, &I_Background_128x11); + if(xtreme_settings->status_bar) { + canvas_set_color(gui->canvas, ColorWhite); + canvas_draw_box(gui->canvas, 1, 1, 9, 7); + canvas_draw_box(gui->canvas, 7, 3, 58, 6); + canvas_draw_box(gui->canvas, 61, 1, 32, 7); + canvas_draw_box(gui->canvas, 89, 3, 38, 6); + canvas_set_color(gui->canvas, ColorBlack); + canvas_set_bitmap_mode(gui->canvas, 1); + canvas_draw_icon(gui->canvas, 0, 0, &I_Background_128x11); + } else { + canvas_set_color(gui->canvas, ColorBlack); + } canvas_set_bitmap_mode(gui->canvas, 0); // Right side @@ -85,13 +92,16 @@ static void gui_redraw_status_bar(Gui* gui, bool need_attention) { GUI_STATUS_BAR_Y + 1, width + 2, GUI_STATUS_BAR_WORKAREA_HEIGHT + 2); - // canvas_set_color(gui->canvas, ColorWhite); - // canvas_draw_box( - // gui->canvas, 0, 0, canvas_width(gui->canvas), canvas_height(gui->canvas)); + // Hide battery background + if(xtreme_settings->status_bar) { + canvas_set_color(gui->canvas, ColorWhite); + canvas_draw_box( + gui->canvas, -1, 0, canvas_width(gui->canvas) + 1, canvas_height(gui->canvas)); + } canvas_set_color(gui->canvas, ColorBlack); // ViewPort draw canvas_frame_set( - gui->canvas, x, GUI_STATUS_BAR_Y + 2, width, GUI_STATUS_BAR_WORKAREA_HEIGHT); + gui->canvas, x - xtreme_settings->status_bar, GUI_STATUS_BAR_Y + 2, width, GUI_STATUS_BAR_WORKAREA_HEIGHT); view_port_draw(view_port, gui->canvas); } ViewPortArray_next(it); @@ -100,41 +110,99 @@ static void gui_redraw_status_bar(Gui* gui, bool need_attention) { if(right_used) { canvas_frame_set( gui->canvas, - GUI_DISPLAY_WIDTH - 3 - right_used, + GUI_DISPLAY_WIDTH - 4 - right_used, GUI_STATUS_BAR_Y, - right_used + 2, + right_used + 4, GUI_STATUS_BAR_HEIGHT); - // canvas_set_color(gui->canvas, ColorBlack); - // canvas_draw_rframe( - // gui->canvas, 0, 0, canvas_width(gui->canvas), canvas_height(gui->canvas) - 1, 1); - // canvas_draw_line( - // gui->canvas, - // canvas_width(gui->canvas) - 1, - // 2, - // canvas_width(gui->canvas) - 1, - // canvas_height(gui->canvas) - 4); + // Disable battery border + if(xtreme_settings->status_bar) { + canvas_set_color(gui->canvas, ColorBlack); + canvas_draw_rframe( + gui->canvas, 0, 0, canvas_width(gui->canvas), canvas_height(gui->canvas), 1); + canvas_draw_line( + gui->canvas, + canvas_width(gui->canvas) - 2, + 1, + canvas_width(gui->canvas) - 2, + canvas_height(gui->canvas) - 2); + canvas_draw_line( + gui->canvas, + 1, + canvas_height(gui->canvas) - 2, + canvas_width(gui->canvas) - 2, + canvas_height(gui->canvas) - 2); + } } - // Extra notification - if(need_attention) { - width = icon_get_width(&I_Hidden_window_9x8); - // Prepare work area background - canvas_frame_set( - gui->canvas, - x - 1, - GUI_STATUS_BAR_Y + 1, - width + 2, - GUI_STATUS_BAR_WORKAREA_HEIGHT + 2); - canvas_set_color(gui->canvas, ColorWhite); - canvas_draw_box(gui->canvas, 0, 0, canvas_width(gui->canvas), canvas_height(gui->canvas)); - canvas_set_color(gui->canvas, ColorBlack); - // Draw Icon - canvas_frame_set( - gui->canvas, x, GUI_STATUS_BAR_Y + 2, width, GUI_STATUS_BAR_WORKAREA_HEIGHT); - canvas_draw_icon(gui->canvas, 0, 0, &I_Hidden_window_9x8); - // Recalculate next position - left_used += (width + 2); - x += (width + 2); + // Left side + if(xtreme_settings->status_bar) { + x = 2; + ViewPortArray_it(it, gui->layers[GuiLayerStatusBarLeft]); + while(!ViewPortArray_end_p(it) && (right_used + left_used) < GUI_STATUS_BAR_WIDTH) { + ViewPort* view_port = *ViewPortArray_ref(it); + if(view_port_is_enabled(view_port)) { + width = view_port_get_width(view_port); + if(!width) width = 8; + // Prepare work area background + canvas_frame_set( + gui->canvas, + x - 1, + GUI_STATUS_BAR_Y + 1, + width + 2, + GUI_STATUS_BAR_WORKAREA_HEIGHT + 2); + canvas_set_color(gui->canvas, ColorWhite); + canvas_draw_box( + gui->canvas, 0, 0, canvas_width(gui->canvas), canvas_height(gui->canvas)); + canvas_set_color(gui->canvas, ColorBlack); + // ViewPort draw + canvas_frame_set( + gui->canvas, x, GUI_STATUS_BAR_Y + 2, width, GUI_STATUS_BAR_WORKAREA_HEIGHT); + view_port_draw(view_port, gui->canvas); + // Recalculate next position + left_used += (width + 2); + x += (width + 2); + } + ViewPortArray_next(it); + } + // Extra notification + if(need_attention || !need_attention) { + width = icon_get_width(&I_Hidden_window_9x8); + // Prepare work area background + canvas_frame_set( + gui->canvas, + x - 1, + GUI_STATUS_BAR_Y + 1, + width + 2, + GUI_STATUS_BAR_WORKAREA_HEIGHT + 2); + canvas_set_color(gui->canvas, ColorWhite); + canvas_draw_box(gui->canvas, 0, 0, canvas_width(gui->canvas), canvas_height(gui->canvas)); + canvas_set_color(gui->canvas, ColorBlack); + // Draw Icon + canvas_frame_set( + gui->canvas, x, GUI_STATUS_BAR_Y + 2, width, GUI_STATUS_BAR_WORKAREA_HEIGHT); + canvas_draw_icon(gui->canvas, 0, 0, &I_Hidden_window_9x8); + // Recalculate next position + left_used += (width + 2); + x += (width + 2); + } + // Draw frame around icons on the left + if(left_used) { + canvas_frame_set(gui->canvas, 0, 0, left_used + 3, GUI_STATUS_BAR_HEIGHT); + canvas_draw_rframe( + gui->canvas, 0, 0, canvas_width(gui->canvas), canvas_height(gui->canvas), 1); + canvas_draw_line( + gui->canvas, + canvas_width(gui->canvas) - 2, + 1, + canvas_width(gui->canvas) - 2, + canvas_height(gui->canvas) - 2); + canvas_draw_line( + gui->canvas, + 1, + canvas_height(gui->canvas) - 2, + canvas_width(gui->canvas) - 2, + canvas_height(gui->canvas) - 2); + } } } diff --git a/applications/settings/xtreme_settings/scenes/xtreme_settings_scene_start.c b/applications/settings/xtreme_settings/scenes/xtreme_settings_scene_start.c index 7aec1269e..40972a31a 100644 --- a/applications/settings/xtreme_settings/scenes/xtreme_settings_scene_start.c +++ b/applications/settings/xtreme_settings/scenes/xtreme_settings_scene_start.c @@ -78,6 +78,14 @@ static void xtreme_settings_scene_start_battery_style_changed(VariableItem* item app->settings_changed = true; } +static void xtreme_settings_scene_start_status_bar_changed(VariableItem* item) { + XtremeSettingsApp* app = variable_item_get_context(item); + bool value = variable_item_get_current_value_index(item); + variable_item_set_current_value_text(item, value ? "ON" : "OFF"); + XTREME_SETTINGS()->status_bar = value; + app->settings_changed = true; +} + static void xtreme_settings_scene_start_sort_folders_before_changed(VariableItem* item) { XtremeSettingsApp* app = variable_item_get_context(item); bool value = variable_item_get_current_value_index(item); @@ -213,6 +221,11 @@ void xtreme_settings_scene_start_on_enter(void* context) { variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, battery_style_names[value_index]); + item = variable_item_list_add( + var_item_list, "Status Bar", 2, xtreme_settings_scene_start_status_bar_changed, app); + variable_item_set_current_value_index(item, xtreme_settings->status_bar); + variable_item_set_current_value_text(item, xtreme_settings->status_bar ? "ON" : "OFF"); + item = variable_item_list_add( var_item_list, "Sort Dirs Before", diff --git a/applications/settings/xtreme_settings/xtreme_settings.h b/applications/settings/xtreme_settings/xtreme_settings.h index 13bb574ad..aacbdd92a 100644 --- a/applications/settings/xtreme_settings/xtreme_settings.h +++ b/applications/settings/xtreme_settings/xtreme_settings.h @@ -22,6 +22,7 @@ typedef struct { BatteryStyle battery_style; uint16_t anim_speed; bool sort_ignore_dirs; + bool status_bar; } XtremeSettings; XtremeSettings* XTREME_SETTINGS();