feat: Eurocorp menu theme

This commit is contained in:
Struan Clark
2023-08-14 21:13:54 -06:00
parent 88e54a86b2
commit 9bae4dc291
7 changed files with 181 additions and 54 deletions

View File

@@ -14,14 +14,8 @@ void xtreme_app_scene_interface_mainmenu_var_item_list_callback(void* context, u
view_dispatcher_send_custom_event(app->view_dispatcher, index);
}
const char* const menu_style_names[MenuStyleCount] = {
"List",
"Wii",
"DSi",
"PS4",
"Vertical",
"C64",
};
const char* const menu_style_names[MenuStyleCount] =
{"List", "Wii", "DSi", "PS4", "Vertical", "C64", "Eurocorp"};
static void xtreme_app_scene_interface_mainmenu_menu_style_changed(VariableItem* item) {
XtremeApp* app = variable_item_get_context(item);
uint8_t index = variable_item_get_current_value_index(item);

View File

@@ -15,6 +15,10 @@ const CanvasFontParameters canvas_font_params[FontTotalNumber] = {
[FontKeyboard] = {.leading_default = 11, .leading_min = 9, .height = 7, .descender = 2},
[FontBigNumbers] = {.leading_default = 18, .leading_min = 16, .height = 15, .descender = 0},
[FontBatteryPercent] = {.leading_default = 11, .leading_min = 9, .height = 6, .descender = 0},
[FontScummRomanOutline] =
{.leading_default = 12, .leading_min = 11, .height = 12, .descender = 2},
[FontScummRoman] = {.leading_default = 12, .leading_min = 11, .height = 10, .descender = 2},
[FontEurocorp] = {.leading_default = 12, .leading_min = 11, .height = 18, .descender = 2},
};
Canvas* canvas_init() {
@@ -161,6 +165,15 @@ void canvas_set_font(Canvas* canvas, Font font) {
case FontBatteryPercent:
u8g2_SetFont(&canvas->fb, u8g2_font_5x7_tf); //u8g2_font_micro_tr);
break;
case FontScummRomanOutline:
u8g2_SetFont(&canvas->fb, u8g2_font_lucasarts_scumm_subtitle_o_tr);
break;
case FontScummRoman:
u8g2_SetFont(&canvas->fb, u8g2_font_lucasarts_scumm_subtitle_r_tr);
break;
case FontEurocorp:
u8g2_SetFont(&canvas->fb, u8g2_font_eurocorp_tr);
break;
default:
furi_crash(NULL);
break;

View File

@@ -27,6 +27,9 @@ typedef enum {
FontKeyboard,
FontBigNumbers,
FontBatteryPercent,
FontScummRomanOutline,
FontScummRoman,
FontEurocorp,
// Keep last for fonts number calculation
FontTotalNumber,

View File

@@ -52,6 +52,15 @@ static void menu_short_name(MenuItem* item, FuriString* name) {
}
}
static void menu_string_to_upper_case(FuriString* str) {
for(size_t i = 0; i < furi_string_size(str); i++) {
char c = furi_string_get_char(str, i);
if(c >= 'a' && c <= 'z') {
furi_string_set_char(str, i, c - 'a' + 'A');
}
}
}
static void menu_centered_icon(
Canvas* canvas,
MenuItem* item,
@@ -321,6 +330,32 @@ static void menu_draw_callback(Canvas* canvas, void* _model) {
break;
}
case MenuStyleEurocorp: {
for(uint8_t i = 0; i < 3; i++) {
canvas_set_color(canvas, ColorBlack);
canvas_set_font(canvas, FontEurocorp);
shift_position = (position + items_count + i - 1) % items_count;
item = MenuItemArray_get(model->items, shift_position);
menu_short_name(item, name);
menu_string_to_upper_case(name);
size_t scroll_counter = menu_scroll_counter(model, i == 1);
if(i == 1) {
canvas_draw_box(canvas, 0, 22, 128, 22);
canvas_set_color(canvas, ColorWhite);
// Clip corner
for(uint8_t i = 0; i < 6; i++) {
for(uint8_t j = 0; j < 6; j++) {
if(j - i >= 0) {
canvas_draw_dot(canvas, 128 - i, 22 + j - i);
}
}
}
}
elements_scrollable_text_line(
canvas, 2, 19 + 22 * i, 128 - 3, name, scroll_counter, false);
}
break;
}
default:
break;
}
@@ -545,6 +580,7 @@ static void menu_process_up(Menu* menu) {
switch(XTREME_SETTINGS()->menu_style) {
case MenuStyleList:
case MenuStyleEurocorp:
if(position > 0) {
position--;
if(vertical_offset && vertical_offset == position) {
@@ -592,6 +628,7 @@ static void menu_process_down(Menu* menu) {
switch(XTREME_SETTINGS()->menu_style) {
case MenuStyleList:
case MenuStyleEurocorp:
if(position < count - 1) {
position++;
if(vertical_offset < count - 8 && vertical_offset == position - 7) {