From 3c9ccd2c50440a10fc6b56a2dbca848585fcf61a Mon Sep 17 00:00:00 2001 From: Willy-JL Date: Wed, 1 Mar 2023 00:46:40 +0000 Subject: [PATCH] Left handed mode --- .../xtreme_app/scenes/xtreme_app_scene_misc.c | 14 ++++++++++++++ applications/services/gui/canvas.c | 9 +++++++++ applications/services/gui/gui.c | 19 +++++++++++++++++++ applications/services/xtreme/settings.c | 1 + applications/services/xtreme/settings.h | 1 + 5 files changed, 44 insertions(+) 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 22b5fb1b0..eec11c94a 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c @@ -3,6 +3,7 @@ enum VarItemListIndex { VarItemListIndexSortDirsFirst, VarItemListIndexDarkMode, + VarItemListIndexLeftHanded, VarItemListIndexChangeDeviceName, }; @@ -27,6 +28,14 @@ static void xtreme_app_scene_misc_dark_mode_changed(VariableItem* item) { app->save_settings = true; } +static void xtreme_app_scene_misc_left_handed_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()->left_handed = value; + app->save_settings = true; +} + void xtreme_app_scene_misc_on_enter(void* context) { XtremeApp* app = context; XtremeSettings* xtreme_settings = XTREME_SETTINGS(); @@ -43,6 +52,11 @@ void xtreme_app_scene_misc_on_enter(void* context) { variable_item_set_current_value_index(item, xtreme_settings->dark_mode); variable_item_set_current_value_text(item, xtreme_settings->dark_mode ? "ON" : "OFF"); + item = variable_item_list_add( + var_item_list, "Exp. Left Handed", 2, xtreme_app_scene_misc_left_handed_changed, app); + variable_item_set_current_value_index(item, xtreme_settings->left_handed); + variable_item_set_current_value_text(item, xtreme_settings->left_handed ? "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 f2a5f359f..eadbd4834 100644 --- a/applications/services/gui/canvas.c +++ b/applications/services/gui/canvas.c @@ -27,6 +27,8 @@ Canvas* canvas_init() { // Wake up display u8g2_SetPowerSave(&canvas->fb, 0); + canvas_set_orientation(canvas, CanvasOrientationHorizontal); + // Clear buffer and send to device canvas_clear(canvas); canvas_commit(canvas); @@ -408,6 +410,13 @@ void canvas_set_bitmap_mode(Canvas* canvas, bool alpha) { void canvas_set_orientation(Canvas* canvas, CanvasOrientation orientation) { furi_assert(canvas); + if(XTREME_SETTINGS()->left_handed) { + if(orientation == CanvasOrientationHorizontal) { + orientation = CanvasOrientationHorizontalFlip; + } else if(orientation == CanvasOrientationHorizontalFlip) { + orientation = CanvasOrientationHorizontal; + } + } if(canvas->orientation != orientation) { switch(orientation) { case CanvasOrientationHorizontal: diff --git a/applications/services/gui/gui.c b/applications/services/gui/gui.c index 835bca2c8..8e3c432c5 100644 --- a/applications/services/gui/gui.c +++ b/applications/services/gui/gui.c @@ -326,6 +326,25 @@ static void gui_input(Gui* gui, InputEvent* input_event) { gui->ongoing_input_view_port = view_port; } + if(XTREME_SETTINGS()->left_handed) { + switch(input_event->key) { + case InputKeyUp: + input_event->key = InputKeyDown; + break; + case InputKeyDown: + input_event->key = InputKeyUp; + break; + case InputKeyLeft: + input_event->key = InputKeyRight; + break; + case InputKeyRight: + input_event->key = InputKeyLeft; + break; + default: + break; + } + } + if(view_port && view_port == gui->ongoing_input_view_port) { view_port_input(view_port, input_event); } else if(gui->ongoing_input_view_port && input_event->type == InputTypeRelease) { diff --git a/applications/services/xtreme/settings.c b/applications/services/xtreme/settings.c index cb9e1bb2b..8036c8d58 100644 --- a/applications/services/xtreme/settings.c +++ b/applications/services/xtreme/settings.c @@ -42,6 +42,7 @@ void XTREME_SETTINGS_LOAD() { xtreme_settings->butthurt_timer = 43200; // 12 H xtreme_settings->sort_dirs_first = true; // ON xtreme_settings->dark_mode = false; // OFF + xtreme_settings->left_handed = false; // OFF } } } diff --git a/applications/services/xtreme/settings.h b/applications/services/xtreme/settings.h index f1ddfd9a6..b870235ec 100644 --- a/applications/services/xtreme/settings.h +++ b/applications/services/xtreme/settings.h @@ -31,6 +31,7 @@ typedef struct { int32_t butthurt_timer; bool sort_dirs_first; bool dark_mode; + bool left_handed; } XtremeSettings; XtremeSettings* XTREME_SETTINGS();