From 007447cc614eb4a0a03cd3be66bfc2d8e1f2d70c Mon Sep 17 00:00:00 2001 From: Willy-JL Date: Mon, 27 Feb 2023 19:12:48 +0000 Subject: [PATCH 1/3] Add experimental dark mode setting --- .../xtreme_app/scenes/xtreme_app_scene_misc.c | 22 +++++++++++++++++-- applications/services/gui/canvas.c | 14 +++++++++++- applications/services/xtreme/settings.c | 3 ++- applications/services/xtreme/settings.h | 5 +++-- firmware/targets/f7/api_symbols.csv | 1 + lib/u8g2/u8g2.h | 1 + lib/u8g2/u8g2_buffer.c | 8 +++++++ 7 files changed, 48 insertions(+), 6 deletions(-) diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c index c9b5e9d5e..83608c0bd 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c @@ -2,6 +2,7 @@ enum VarItemListIndex { VarItemListIndexSortDirsFirst, + VarItemListIndexDarkMode, VarItemListIndexChangeDeviceName, }; @@ -10,7 +11,7 @@ void xtreme_app_scene_misc_var_item_list_callback(void* context, uint32_t index) view_dispatcher_send_custom_event(app->view_dispatcher, index); } -static void xtreme_app_scene_misc_sort_folders_before_changed(VariableItem* item) { +static void xtreme_app_scene_misc_sort_dirs_first_changed(VariableItem* item) { XtremeApp* 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"); @@ -18,6 +19,14 @@ static void xtreme_app_scene_misc_sort_folders_before_changed(VariableItem* item app->save_settings = true; } +static void xtreme_app_scene_misc_dark_mode_changed(VariableItem* item) { + XtremeApp* 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()->dark_mode = value; + app->save_settings = true; +} + void xtreme_app_scene_misc_on_enter(void* context) { XtremeApp* app = context; XtremeSettings* xtreme_settings = XTREME_SETTINGS(); @@ -28,11 +37,20 @@ void xtreme_app_scene_misc_on_enter(void* context) { var_item_list, "Sort Dirs First", 2, - xtreme_app_scene_misc_sort_folders_before_changed, + xtreme_app_scene_misc_sort_dirs_first_changed, app); variable_item_set_current_value_index(item, xtreme_settings->sort_dirs_first); variable_item_set_current_value_text(item, xtreme_settings->sort_dirs_first ? "ON" : "OFF"); + item = variable_item_list_add( + var_item_list, + "Dark Mode (Exp.)", + 2, + xtreme_app_scene_misc_dark_mode_changed, + app); + variable_item_set_current_value_index(item, xtreme_settings->dark_mode); + variable_item_set_current_value_text(item, xtreme_settings->dark_mode ? "ON" : "OFF"); + variable_item_list_add(var_item_list, "Change Device Name", 0, NULL, app); variable_item_list_set_enter_callback( diff --git a/applications/services/gui/canvas.c b/applications/services/gui/canvas.c index ee472138e..47366e2a2 100644 --- a/applications/services/gui/canvas.c +++ b/applications/services/gui/canvas.c @@ -6,6 +6,7 @@ #include #include #include +#include const CanvasFontParameters canvas_font_params[FontTotalNumber] = { [FontPrimary] = {.leading_default = 12, .leading_min = 11, .height = 8, .descender = 2}, @@ -105,11 +106,22 @@ CanvasFontParameters* canvas_get_font_params(Canvas* canvas, Font font) { void canvas_clear(Canvas* canvas) { furi_assert(canvas); - u8g2_ClearBuffer(&canvas->fb); + if(XTREME_SETTINGS()->dark_mode) { + u8g2_FillBuffer(&canvas->fb); + } else { + u8g2_ClearBuffer(&canvas->fb); + } } void canvas_set_color(Canvas* canvas, Color color) { furi_assert(canvas); + if(XTREME_SETTINGS()->dark_mode) { + if(color == ColorBlack) { + color = ColorWhite; + } else if(color == ColorWhite) { + color = ColorBlack; + } + } u8g2_SetDrawColor(&canvas->fb, color); } diff --git a/applications/services/xtreme/settings.c b/applications/services/xtreme/settings.c index 05d0892dd..cb9e1bb2b 100644 --- a/applications/services/xtreme/settings.c +++ b/applications/services/xtreme/settings.c @@ -39,8 +39,9 @@ void XTREME_SETTINGS_LOAD() { xtreme_settings->bar_borders = true; // ON xtreme_settings->bar_background = false; // OFF xtreme_settings->bad_bt = false; // USB - xtreme_settings->sort_dirs_first = true; // ON xtreme_settings->butthurt_timer = 43200; // 12 H + xtreme_settings->sort_dirs_first = true; // ON + xtreme_settings->dark_mode = false; // OFF } } } diff --git a/applications/services/xtreme/settings.h b/applications/services/xtreme/settings.h index 44ad37abf..f1ddfd9a6 100644 --- a/applications/services/xtreme/settings.h +++ b/applications/services/xtreme/settings.h @@ -11,7 +11,7 @@ #define MAX_PACK_NAME_LEN 32 -#define XTREME_SETTINGS_VERSION (3) +#define XTREME_SETTINGS_VERSION (4) #define XTREME_SETTINGS_PATH INT_PATH(XTREME_SETTINGS_FILE_NAME) #define XTREME_SETTINGS_MAGIC (0x69) @@ -28,8 +28,9 @@ typedef struct { bool bar_borders; bool bar_background; bool bad_bt; - bool sort_dirs_first; int32_t butthurt_timer; + bool sort_dirs_first; + bool dark_mode; } XtremeSettings; XtremeSettings* XTREME_SETTINGS(); diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index 2db05fc50..7d2804b3b 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -3431,6 +3431,7 @@ Function,-,u8g2_DrawUTF8Lines,u8g2_uint_t,"u8g2_t*, u8g2_uint_t, u8g2_uint_t, u8 Function,-,u8g2_DrawVLine,void,"u8g2_t*, u8g2_uint_t, u8g2_uint_t, u8g2_uint_t" Function,-,u8g2_DrawXBM,void,"u8g2_t*, u8g2_uint_t, u8g2_uint_t, u8g2_uint_t, u8g2_uint_t, const uint8_t*" Function,-,u8g2_DrawXBMP,void,"u8g2_t*, u8g2_uint_t, u8g2_uint_t, u8g2_uint_t, u8g2_uint_t, const uint8_t*" +Function,-,u8g2_FillBuffer,void,u8g2_t* Function,-,u8g2_FirstPage,void,u8g2_t* Function,-,u8g2_GetFontSize,size_t,const uint8_t* Function,-,u8g2_GetGlyphWidth,int8_t,"u8g2_t*, uint16_t" diff --git a/lib/u8g2/u8g2.h b/lib/u8g2/u8g2.h index 68611d482..0068ea61d 100644 --- a/lib/u8g2/u8g2.h +++ b/lib/u8g2/u8g2.h @@ -3548,6 +3548,7 @@ void u8g2_Setup_a2printer_384x240_f( void u8g2_SendBuffer(u8g2_t* u8g2); void u8g2_ClearBuffer(u8g2_t* u8g2); +void u8g2_FillBuffer(u8g2_t* u8g2); void u8g2_SetBufferCurrTileRow(u8g2_t* u8g2, uint8_t row) U8G2_NOINLINE; diff --git a/lib/u8g2/u8g2_buffer.c b/lib/u8g2/u8g2_buffer.c index 45855bd5d..06686b79b 100644 --- a/lib/u8g2/u8g2_buffer.c +++ b/lib/u8g2/u8g2_buffer.c @@ -45,6 +45,14 @@ void u8g2_ClearBuffer(u8g2_t* u8g2) { memset(u8g2->tile_buf_ptr, 0, cnt); } +void u8g2_FillBuffer(u8g2_t* u8g2) { + size_t cnt; + cnt = u8g2_GetU8x8(u8g2)->display_info->tile_width; + cnt *= u8g2->tile_buf_height; + cnt *= 8; + memset(u8g2->tile_buf_ptr, 255, cnt); +} + /*============================================*/ static void u8g2_send_tile_row(u8g2_t* u8g2, uint8_t src_tile_row, uint8_t dest_tile_row) { From b7d4b1c73d9bd1d1c3f1f3e5d968ff86db7ff570 Mon Sep 17 00:00:00 2001 From: Willy-JL Date: Mon, 27 Feb 2023 19:15:29 +0000 Subject: [PATCH 2/3] Fix asset packer encoding --- scripts/asset_packer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/asset_packer.py b/scripts/asset_packer.py index cc28ee540..d7e309b0d 100755 --- a/scripts/asset_packer.py +++ b/scripts/asset_packer.py @@ -30,7 +30,7 @@ def convert_bm(img: "Image.Image | pathlib.Path") -> bytes: data_enc = bytearray(data_encoded_str) data_enc = bytearray([len(data_enc) & 0xFF, len(data_enc) >> 8]) + data_enc - if len(data_enc) < len(data_bin) + 1: + if len(data_enc) + 2 < len(data_bin) + 1: return b"\x01\x00" + data_enc else: return b"\x00" + data_bin From 14ed0e24b191cbf06b427c114aa6d690ef0d4661 Mon Sep 17 00:00:00 2001 From: Willy-JL Date: Mon, 27 Feb 2023 19:16:45 +0000 Subject: [PATCH 3/3] Format --- .../main/xtreme_app/scenes/xtreme_app_scene_misc.c | 12 ++---------- .../plugins/barcode_generator/application.fam | 2 +- applications/plugins/protoview/application.fam | 2 +- applications/plugins/swd_probe/application.fam | 2 +- scripts/asset_packer.py | 8 ++++++-- 5 files changed, 11 insertions(+), 15 deletions(-) diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c index 83608c0bd..54ad0371e 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c @@ -34,20 +34,12 @@ void xtreme_app_scene_misc_on_enter(void* context) { VariableItem* item; item = variable_item_list_add( - var_item_list, - "Sort Dirs First", - 2, - xtreme_app_scene_misc_sort_dirs_first_changed, - app); + var_item_list, "Sort Dirs First", 2, xtreme_app_scene_misc_sort_dirs_first_changed, app); variable_item_set_current_value_index(item, xtreme_settings->sort_dirs_first); variable_item_set_current_value_text(item, xtreme_settings->sort_dirs_first ? "ON" : "OFF"); item = variable_item_list_add( - var_item_list, - "Dark Mode (Exp.)", - 2, - xtreme_app_scene_misc_dark_mode_changed, - app); + var_item_list, "Dark Mode (Exp.)", 2, xtreme_app_scene_misc_dark_mode_changed, app); variable_item_set_current_value_index(item, xtreme_settings->dark_mode); variable_item_set_current_value_text(item, xtreme_settings->dark_mode ? "ON" : "OFF"); diff --git a/applications/plugins/barcode_generator/application.fam b/applications/plugins/barcode_generator/application.fam index d2d7c4b96..a02255334 100644 --- a/applications/plugins/barcode_generator/application.fam +++ b/applications/plugins/barcode_generator/application.fam @@ -12,4 +12,4 @@ App( order=50, fap_icon="barcode_10px.png", fap_category="Misc", -) \ No newline at end of file +) diff --git a/applications/plugins/protoview/application.fam b/applications/plugins/protoview/application.fam index 6cd31372e..d3614524c 100644 --- a/applications/plugins/protoview/application.fam +++ b/applications/plugins/protoview/application.fam @@ -5,7 +5,7 @@ App( entry_point="protoview_app_entry", cdefines=["APP_PROTOVIEW"], requires=["gui"], - stack_size=8*1024, + stack_size=8 * 1024, order=50, fap_icon="appicon.png", fap_category="Tools", diff --git a/applications/plugins/swd_probe/application.fam b/applications/plugins/swd_probe/application.fam index 64140d130..9720e485f 100644 --- a/applications/plugins/swd_probe/application.fam +++ b/applications/plugins/swd_probe/application.fam @@ -9,5 +9,5 @@ App( order=10, fap_icon="icons/app.png", fap_category="Tools", - fap_icon_assets="icons" + fap_icon_assets="icons", ) diff --git a/scripts/asset_packer.py b/scripts/asset_packer.py index d7e309b0d..ebf52c4a1 100755 --- a/scripts/asset_packer.py +++ b/scripts/asset_packer.py @@ -124,12 +124,16 @@ def pack( continue for icon in icons.iterdir(): if icon.is_dir(): - logger(f"Compile: icon for pack '{source.name}': {icons.name}/{icon.name}") + logger( + f"Compile: icon for pack '{source.name}': {icons.name}/{icon.name}" + ) pack_icon_animated( icon, packed / "Icons" / icons.name / icon.name ) elif icon.is_file(): - logger(f"Compile: icon for pack '{source.name}': {icons.name}/{icon.name}") + logger( + f"Compile: icon for pack '{source.name}': {icons.name}/{icon.name}" + ) pack_icon_static( icon, packed / "Icons" / icons.name / icon.name )