mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-04-26 03:39:58 -07:00
Keep menu logic in order like enum
This commit is contained in:
@@ -49,62 +49,6 @@ static void menu_draw_callback(Canvas* canvas, void* _model) {
|
||||
MenuItem* item;
|
||||
size_t shift_position;
|
||||
switch(XTREME_SETTINGS()->menu_style) {
|
||||
case MenuStyleWii: {
|
||||
FuriString* name = furi_string_alloc();
|
||||
if(items_count > 6 && position >= 4) {
|
||||
if(position >= items_count - 2 + (items_count % 2)) {
|
||||
shift_position = position - (position % 2) - 4;
|
||||
} else {
|
||||
shift_position = position - (position % 2) - 2;
|
||||
}
|
||||
} else {
|
||||
shift_position = 0;
|
||||
}
|
||||
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);
|
||||
if(furi_string_start_with_str(name, "[")) {
|
||||
size_t trim = furi_string_search_str(name, "] ", 1);
|
||||
if(trim != STRING_FAILURE) {
|
||||
furi_string_right(name, trim + 2);
|
||||
}
|
||||
}
|
||||
elements_scrollable_text_line_centered(
|
||||
canvas, 20 + x_off, 26 + y_off, 36, 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);
|
||||
}
|
||||
}
|
||||
furi_string_free(name);
|
||||
break;
|
||||
}
|
||||
case MenuStyleList: {
|
||||
// First line
|
||||
canvas_set_font(canvas, FontSecondary);
|
||||
@@ -154,6 +98,62 @@ static void menu_draw_callback(Canvas* canvas, void* _model) {
|
||||
elements_scrollbar(canvas, position, items_count);
|
||||
break;
|
||||
}
|
||||
case MenuStyleWii: {
|
||||
FuriString* name = furi_string_alloc();
|
||||
if(items_count > 6 && position >= 4) {
|
||||
if(position >= items_count - 2 + (items_count % 2)) {
|
||||
shift_position = position - (position % 2) - 4;
|
||||
} else {
|
||||
shift_position = position - (position % 2) - 2;
|
||||
}
|
||||
} else {
|
||||
shift_position = 0;
|
||||
}
|
||||
canvas_set_font(canvas, FontSecondary);
|
||||
size_t item_i;
|
||||
size_t x_off, y_off;
|
||||
for(uint8_t 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);
|
||||
if(furi_string_start_with_str(name, "[")) {
|
||||
size_t trim = furi_string_search_str(name, "] ", 1);
|
||||
if(trim != STRING_FAILURE) {
|
||||
furi_string_right(name, trim + 2);
|
||||
}
|
||||
}
|
||||
elements_scrollable_text_line_centered(
|
||||
canvas, 20 + x_off, 26 + y_off, 36, 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);
|
||||
}
|
||||
}
|
||||
furi_string_free(name);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -362,6 +362,13 @@ static void menu_process_up(Menu* menu) {
|
||||
}
|
||||
|
||||
switch(XTREME_SETTINGS()->menu_style) {
|
||||
case MenuStyleList:
|
||||
if(model->position > 0) {
|
||||
model->position--;
|
||||
} else {
|
||||
model->position = count - 1;
|
||||
}
|
||||
break;
|
||||
case MenuStyleWii:
|
||||
if(model->position % 2 || (model->position == count - 1 && count % 2)) {
|
||||
model->position--;
|
||||
@@ -370,13 +377,6 @@ static void menu_process_up(Menu* menu) {
|
||||
}
|
||||
model->scroll_counter = 0;
|
||||
break;
|
||||
case MenuStyleList:
|
||||
if(model->position > 0) {
|
||||
model->position--;
|
||||
} else {
|
||||
model->position = count - 1;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -401,6 +401,13 @@ static void menu_process_down(Menu* menu) {
|
||||
}
|
||||
|
||||
switch(XTREME_SETTINGS()->menu_style) {
|
||||
case MenuStyleList:
|
||||
if(model->position < count - 1) {
|
||||
model->position++;
|
||||
} else {
|
||||
model->position = 0;
|
||||
}
|
||||
break;
|
||||
case MenuStyleWii:
|
||||
if(model->position % 2 || (model->position == count - 1 && count % 2)) {
|
||||
model->position--;
|
||||
@@ -409,13 +416,6 @@ static void menu_process_down(Menu* menu) {
|
||||
}
|
||||
model->scroll_counter = 0;
|
||||
break;
|
||||
case MenuStyleList:
|
||||
if(model->position < count - 1) {
|
||||
model->position++;
|
||||
} else {
|
||||
model->position = 0;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user