mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-05-17 04:34:44 -07:00
Wii menu toggle, old menu ext apps and scroll text
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
#include "../xtreme_app.h"
|
||||
|
||||
enum VarItemListIndex {
|
||||
VarItemListIndexWiiMenu,
|
||||
VarItemListIndexApp,
|
||||
VarItemListIndexRemoveApp,
|
||||
VarItemListIndexAddApp,
|
||||
@@ -13,6 +14,14 @@ void xtreme_app_scene_mainmenu_var_item_list_callback(
|
||||
view_dispatcher_send_custom_event(app->view_dispatcher, index);
|
||||
}
|
||||
|
||||
static void xtreme_app_scene_mainmenu_wii_menu_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()->wii_menu = value;
|
||||
app->save_settings = true;
|
||||
}
|
||||
|
||||
static void xtreme_app_scene_mainmenu_app_changed(VariableItem* item) {
|
||||
XtremeApp* app = variable_item_get_context(item);
|
||||
app->mainmenu_app_index = variable_item_get_current_value_index(item);
|
||||
@@ -21,9 +30,15 @@ static void xtreme_app_scene_mainmenu_app_changed(VariableItem* item) {
|
||||
|
||||
void xtreme_app_scene_mainmenu_on_enter(void* context) {
|
||||
XtremeApp* app = context;
|
||||
XtremeSettings* xtreme_settings = XTREME_SETTINGS();
|
||||
VariableItemList* var_item_list = app->var_item_list;
|
||||
VariableItem* item;
|
||||
|
||||
item = variable_item_list_add(
|
||||
var_item_list, "Wii menu", 2, xtreme_app_scene_mainmenu_wii_menu_changed, app);
|
||||
variable_item_set_current_value_index(item, xtreme_settings->wii_menu);
|
||||
variable_item_set_current_value_text(item, xtreme_settings->wii_menu ? "ON" : "OFF");
|
||||
|
||||
item = variable_item_list_add(
|
||||
var_item_list,
|
||||
"App",
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include <gui/icon_animation_i.h>
|
||||
#include <furi.h>
|
||||
#include <m-array.h>
|
||||
#include <xtreme/settings.h>
|
||||
|
||||
struct Menu {
|
||||
View* view;
|
||||
@@ -47,51 +48,96 @@ static void menu_draw_callback(Canvas* canvas, void* _model) {
|
||||
MenuItem* item;
|
||||
FuriString* name = furi_string_alloc();
|
||||
size_t shift_position;
|
||||
if(position < 2) {
|
||||
shift_position = 0;
|
||||
} else if(position >= items_count - 2 + (items_count % 2)) {
|
||||
shift_position = position - (position % 2) - 4;
|
||||
} else {
|
||||
shift_position = position - (position % 2) - 2;
|
||||
}
|
||||
canvas_set_font(canvas, FontSecondary);
|
||||
size_t item_i;
|
||||
size_t x_off, y_off;
|
||||
for(int i = 0; i < 6; i++) {
|
||||
item_i = shift_position + i;
|
||||
if(item_i >= items_count) continue;
|
||||
x_off = (i / 2) * 43 + 1;
|
||||
y_off = (i % 2) * 32;
|
||||
size_t scroll_counter = 0;
|
||||
if(item_i == position) {
|
||||
elements_slightly_rounded_box(canvas, 0 + x_off, 0 + y_off, 40, 30);
|
||||
canvas_set_color(canvas, ColorWhite);
|
||||
scroll_counter = model->scroll_counter;
|
||||
if(scroll_counter < 1) {
|
||||
scroll_counter = 0;
|
||||
if(XTREME_SETTINGS()->wii_menu) {
|
||||
if(position < 2) {
|
||||
shift_position = 0;
|
||||
} else if(position >= items_count - 2 + (items_count % 2)) {
|
||||
shift_position = position - (position % 2) - 4;
|
||||
} else {
|
||||
shift_position = position - (position % 2) - 2;
|
||||
}
|
||||
canvas_set_font(canvas, FontSecondary);
|
||||
size_t item_i;
|
||||
size_t x_off, y_off;
|
||||
for(int i = 0; i < 6; i++) {
|
||||
item_i = shift_position + i;
|
||||
if(item_i >= items_count) continue;
|
||||
x_off = (i / 2) * 43 + 1;
|
||||
y_off = (i % 2) * 32;
|
||||
size_t scroll_counter = 0;
|
||||
if(item_i == position) {
|
||||
elements_slightly_rounded_box(canvas, 0 + x_off, 0 + y_off, 40, 30);
|
||||
canvas_set_color(canvas, ColorWhite);
|
||||
scroll_counter = model->scroll_counter;
|
||||
if(scroll_counter < 1) {
|
||||
scroll_counter = 0;
|
||||
} else {
|
||||
scroll_counter -= 1;
|
||||
}
|
||||
}
|
||||
item = MenuItemArray_get(model->items, item_i);
|
||||
if(item->icon) {
|
||||
canvas_draw_icon_animation(canvas, (40 - item->icon->icon->width) / 2 + x_off, (20 - item->icon->icon->height) / 2 + y_off, item->icon);
|
||||
}
|
||||
furi_string_set(name, item->label);
|
||||
elements_scrollable_text_line(
|
||||
canvas,
|
||||
20 + x_off,
|
||||
26 + y_off,
|
||||
36,
|
||||
name,
|
||||
scroll_counter,
|
||||
false,
|
||||
true);
|
||||
if(item_i == position) {
|
||||
canvas_set_color(canvas, ColorBlack);
|
||||
} else {
|
||||
scroll_counter -= 1;
|
||||
elements_frame(canvas, 0 + x_off, 0 + y_off, 40, 30);
|
||||
}
|
||||
}
|
||||
item = MenuItemArray_get(model->items, item_i);
|
||||
} else {
|
||||
// First line
|
||||
canvas_set_font(canvas, FontSecondary);
|
||||
shift_position = (0 + position + items_count - 1) % items_count;
|
||||
item = MenuItemArray_get(model->items, shift_position);
|
||||
if(item->icon) {
|
||||
canvas_draw_icon_animation(canvas, (40 - item->icon->icon->width) / 2 + x_off, (20 - item->icon->icon->height) / 2 + y_off, item->icon);
|
||||
canvas_draw_icon_animation(canvas, 4 + (14 - item->icon->icon->width) / 2, 3 + (14 - item->icon->icon->height) / 2, item->icon);
|
||||
}
|
||||
canvas_draw_str(canvas, 22, 14, item->label);
|
||||
// Second line main
|
||||
canvas_set_font(canvas, FontPrimary);
|
||||
shift_position = (1 + position + items_count - 1) % items_count;
|
||||
item = MenuItemArray_get(model->items, shift_position);
|
||||
if(item->icon) {
|
||||
canvas_draw_icon_animation(canvas, 4 + (14 - item->icon->icon->width) / 2, 25 + (14 - item->icon->icon->height) / 2, item->icon);
|
||||
}
|
||||
size_t scroll_counter = model->scroll_counter;
|
||||
if(scroll_counter < 1) {
|
||||
scroll_counter = 0;
|
||||
} else {
|
||||
scroll_counter -= 1;
|
||||
}
|
||||
furi_string_set(name, item->label);
|
||||
elements_scrollable_text_line(
|
||||
canvas,
|
||||
20 + x_off,
|
||||
26 + y_off,
|
||||
22,
|
||||
36,
|
||||
98,
|
||||
name,
|
||||
scroll_counter,
|
||||
false,
|
||||
true);
|
||||
if(item_i == position) {
|
||||
canvas_set_color(canvas, ColorBlack);
|
||||
} else {
|
||||
elements_frame(canvas, 0 + x_off, 0 + y_off, 40, 30);
|
||||
false);
|
||||
// Third line
|
||||
canvas_set_font(canvas, FontSecondary);
|
||||
shift_position = (2 + position + items_count - 1) % items_count;
|
||||
item = MenuItemArray_get(model->items, shift_position);
|
||||
if(item->icon) {
|
||||
canvas_draw_icon_animation(canvas, 4 + (14 - item->icon->icon->width) / 2, 47 + (14 - item->icon->icon->height) / 2, item->icon);
|
||||
}
|
||||
canvas_draw_str(canvas, 22, 58, item->label);
|
||||
// Frame and scrollbar
|
||||
elements_frame(canvas, 0, 21, 128 - 5, 21);
|
||||
elements_scrollbar(canvas, position, items_count);
|
||||
}
|
||||
furi_string_free(name);
|
||||
} else {
|
||||
@@ -292,23 +338,31 @@ static void menu_process_up(Menu* menu) {
|
||||
MenuModel * model,
|
||||
{
|
||||
size_t count = MenuItemArray_size(model->items);
|
||||
if(!(model->position == count - 1 && count % 2)) {
|
||||
MenuItem* item = MenuItemArray_get(model->items, model->position);
|
||||
if(item && item->icon) {
|
||||
icon_animation_stop(item->icon);
|
||||
}
|
||||
MenuItem* item = MenuItemArray_get(model->items, model->position);
|
||||
if(item && item->icon) {
|
||||
icon_animation_stop(item->icon);
|
||||
}
|
||||
|
||||
if(model->position % 2) {
|
||||
if(XTREME_SETTINGS()->wii_menu) {
|
||||
if(!(model->position == count - 1 && count % 2)) {
|
||||
if(model->position % 2) {
|
||||
model->position--;
|
||||
} else {
|
||||
model->position++;
|
||||
}
|
||||
model->scroll_counter = 0;
|
||||
}
|
||||
} else {
|
||||
if(model->position > 0) {
|
||||
model->position--;
|
||||
} else {
|
||||
model->position++;
|
||||
model->position = count - 1;
|
||||
}
|
||||
model->scroll_counter = 0;
|
||||
}
|
||||
|
||||
item = MenuItemArray_get(model->items, model->position);
|
||||
if(item && item->icon) {
|
||||
icon_animation_start(item->icon);
|
||||
}
|
||||
item = MenuItemArray_get(model->items, model->position);
|
||||
if(item && item->icon) {
|
||||
icon_animation_start(item->icon);
|
||||
}
|
||||
},
|
||||
true);
|
||||
@@ -320,29 +374,38 @@ static void menu_process_down(Menu* menu) {
|
||||
MenuModel * model,
|
||||
{
|
||||
size_t count = MenuItemArray_size(model->items);
|
||||
if(!(model->position == count - 1 && count % 2)) {
|
||||
MenuItem* item = MenuItemArray_get(model->items, model->position);
|
||||
if(item && item->icon) {
|
||||
icon_animation_stop(item->icon);
|
||||
}
|
||||
MenuItem* item = MenuItemArray_get(model->items, model->position);
|
||||
if(item && item->icon) {
|
||||
icon_animation_stop(item->icon);
|
||||
}
|
||||
|
||||
if(model->position % 2) {
|
||||
model->position--;
|
||||
} else {
|
||||
if(XTREME_SETTINGS()->wii_menu) {
|
||||
if(!(model->position == count - 1 && count % 2)) {
|
||||
if(model->position % 2) {
|
||||
model->position--;
|
||||
} else {
|
||||
model->position++;
|
||||
}
|
||||
model->scroll_counter = 0;
|
||||
}
|
||||
} else {
|
||||
if(model->position < count - 1) {
|
||||
model->position++;
|
||||
} else {
|
||||
model->position = 0;
|
||||
}
|
||||
model->scroll_counter = 0;
|
||||
}
|
||||
|
||||
item = MenuItemArray_get(model->items, model->position);
|
||||
if(item && item->icon) {
|
||||
icon_animation_start(item->icon);
|
||||
}
|
||||
item = MenuItemArray_get(model->items, model->position);
|
||||
if(item && item->icon) {
|
||||
icon_animation_start(item->icon);
|
||||
}
|
||||
},
|
||||
true);
|
||||
}
|
||||
|
||||
static void menu_process_left(Menu* menu) {
|
||||
if(!XTREME_SETTINGS()->wii_menu) return;
|
||||
with_view_model(
|
||||
menu->view,
|
||||
MenuModel * model,
|
||||
@@ -373,6 +436,7 @@ static void menu_process_left(Menu* menu) {
|
||||
}
|
||||
|
||||
static void menu_process_right(Menu* menu) {
|
||||
if(!XTREME_SETTINGS()->wii_menu) return;
|
||||
with_view_model(
|
||||
menu->view,
|
||||
MenuModel * model,
|
||||
|
||||
@@ -39,6 +39,7 @@ void XTREME_SETTINGS_LOAD() {
|
||||
xtreme_settings->anim_speed = 100; // 100%
|
||||
xtreme_settings->cycle_anims = 0; // Meta.txt
|
||||
xtreme_settings->unlock_anims = false; // OFF
|
||||
xtreme_settings->wii_menu = true; // ON
|
||||
xtreme_settings->battery_icon = BatteryIconBarPercent; // Bar %
|
||||
xtreme_settings->status_icons = true; // ON
|
||||
xtreme_settings->bar_borders = true; // ON
|
||||
|
||||
@@ -15,7 +15,7 @@ extern "C" {
|
||||
|
||||
#define MAX_PACK_NAME_LEN 32
|
||||
|
||||
#define XTREME_SETTINGS_VERSION (5)
|
||||
#define XTREME_SETTINGS_VERSION (6)
|
||||
#define XTREME_SETTINGS_PATH_OLD INT_PATH(XTREME_SETTINGS_FILE_NAME)
|
||||
#define XTREME_SETTINGS_PATH EXT_PATH(XTREME_SETTINGS_FILE_NAME)
|
||||
#define XTREME_SETTINGS_MAGIC (0x69)
|
||||
@@ -30,6 +30,7 @@ typedef struct {
|
||||
uint16_t anim_speed;
|
||||
int32_t cycle_anims;
|
||||
bool unlock_anims;
|
||||
bool wii_menu;
|
||||
BatteryIcon battery_icon;
|
||||
bool status_icons;
|
||||
bool bar_borders;
|
||||
|
||||
Reference in New Issue
Block a user