From 9ba867f19e015c939abae788c7a74d14699664cd Mon Sep 17 00:00:00 2001 From: CTCaer Date: Sat, 28 Aug 2021 18:07:32 +0300 Subject: [PATCH] nyx: fix missing labels in launch if a previous label was big --- nyx/nyx_gui/frontend/gui.c | 54 +++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/nyx/nyx_gui/frontend/gui.c b/nyx/nyx_gui/frontend/gui.c index 16adeea..d6b496b 100644 --- a/nyx/nyx_gui/frontend/gui.c +++ b/nyx/nyx_gui/frontend/gui.c @@ -1339,8 +1339,13 @@ out_end: return LV_RES_OK; } +typedef struct _launch_menu_entries_t +{ + lv_obj_t *btn[16]; + lv_obj_t *label[16]; +} launch_menu_entries_t; -static lv_obj_t *launch_ctxt[16]; +static launch_menu_entries_t launch_ctxt; static lv_obj_t *launch_bg = NULL; static bool launch_bg_done = false; @@ -1358,7 +1363,7 @@ static lv_res_t _win_launch_close_action(lv_obj_t * btn) // Cleanup icons. for (u32 i = 0; i < 8; i++) { - lv_obj_t *btn = launch_ctxt[i * 2]; + lv_obj_t *btn = launch_ctxt.btn[i]; lv_btn_ext_t *ext = lv_obj_get_ext_attr(btn); if (ext->idx) { @@ -1549,7 +1554,7 @@ static lv_res_t _create_window_home_launch(lv_obj_t *btn) // Icons must be <= 192 x 192. // Create first Button. btn_boot_entry = lv_btn_create(win, NULL); - launch_ctxt[0] = btn_boot_entry; + launch_ctxt.btn[0] = btn_boot_entry; lv_obj_set_size(btn_boot_entry, 200, 200); lv_obj_set_pos(btn_boot_entry, launch_button_pos[0].btn_x, launch_button_pos[0].btn_y); lv_obj_set_opa_scale(btn_boot_entry, LV_OPA_0); @@ -1560,7 +1565,7 @@ static lv_res_t _create_window_home_launch(lv_obj_t *btn) boot_entry_label = lv_label_create(boot_entry_lbl_cont, NULL); lv_obj_set_style(boot_entry_label, &hint_small_style_white); lv_label_set_text(boot_entry_label, ""); - launch_ctxt[1] = boot_entry_label; + launch_ctxt.label[0] = boot_entry_label; lv_cont_set_fit(boot_entry_lbl_cont, false, false); lv_cont_set_layout(boot_entry_lbl_cont, LV_LAYOUT_CENTER); @@ -1569,16 +1574,16 @@ static lv_res_t _create_window_home_launch(lv_obj_t *btn) lv_obj_set_style(boot_entry_lbl_cont, &btn_label_home_transp); // Create the rest of the buttons. - for (u32 btn_idx = 2; btn_idx < 16; btn_idx += 2) + for (u32 btn_idx = 1; btn_idx < 8; btn_idx++) { btn_boot_entry = lv_btn_create(win, btn_boot_entry); - launch_ctxt[btn_idx] = btn_boot_entry; - lv_obj_set_pos(btn_boot_entry, launch_button_pos[btn_idx >> 1].btn_x, launch_button_pos[btn_idx >> 1].btn_y); + launch_ctxt.btn[btn_idx] = btn_boot_entry; + lv_obj_set_pos(btn_boot_entry, launch_button_pos[btn_idx].btn_x, launch_button_pos[btn_idx].btn_y); boot_entry_lbl_cont = lv_cont_create(win, boot_entry_lbl_cont); boot_entry_label = lv_label_create(boot_entry_lbl_cont, boot_entry_label); - lv_obj_set_pos(boot_entry_lbl_cont, launch_button_pos[btn_idx >> 1].lbl_x, launch_button_pos[btn_idx >> 1].lbl_y); - launch_ctxt[btn_idx + 1] = boot_entry_label; + lv_obj_set_pos(boot_entry_lbl_cont, launch_button_pos[btn_idx].lbl_x, launch_button_pos[btn_idx].lbl_y); + launch_ctxt.label[btn_idx] = boot_entry_label; } // Create colorized icon style based on its parrent style. @@ -1618,7 +1623,7 @@ ini_parsing: if (ini_parse_success) { // Iterate to all boot entries and load icons. - u32 i = 1; + u32 entry_idx = 1; LIST_FOREACH_ENTRY(ini_sec_t, ini_sec, &ini_sections, link) { @@ -1672,7 +1677,7 @@ ini_parsing: } // Enable button. - lv_obj_set_opa_scale(launch_ctxt[curr_btn_idx], LV_OPA_COVER); + lv_obj_set_opa_scale(launch_ctxt.btn[curr_btn_idx], LV_OPA_COVER); // Default to switch logo if no icon found at all. if (!bmp) @@ -1686,7 +1691,7 @@ ini_parsing: //Set icon. if (bmp) { - img = lv_img_create(launch_ctxt[curr_btn_idx], NULL); + img = lv_img_create(launch_ctxt.btn[curr_btn_idx], NULL); if (img_colorize) lv_img_set_style(img, &img_style); @@ -1695,7 +1700,7 @@ ini_parsing: } // Add button mask/radius and align icon. - lv_obj_t *btn = lv_btn_create(launch_ctxt[curr_btn_idx], NULL); + lv_obj_t *btn = lv_btn_create(launch_ctxt.btn[curr_btn_idx], NULL); lv_obj_set_size(btn, 200, 200); lv_btn_set_style(btn, LV_BTN_STYLE_REL, &btn_home_transp_rel); lv_btn_set_style(btn, LV_BTN_STYLE_PR, &btn_home_transp_pr); @@ -1704,9 +1709,9 @@ ini_parsing: // Set autoboot index. ext = lv_obj_get_ext_attr(btn); - ext->idx = i; - ext = lv_obj_get_ext_attr(launch_ctxt[curr_btn_idx]); // Redundancy. - ext->idx = i; + ext->idx = entry_idx; + ext = lv_obj_get_ext_attr(launch_ctxt.btn[curr_btn_idx]); // Redundancy. + ext->idx = entry_idx; // Set action. if (!more_cfg) @@ -1715,26 +1720,27 @@ ini_parsing: lv_btn_set_action(btn, LV_BTN_ACTION_CLICK, _launch_more_cfg_action); // Set button's label text. - lv_label_set_text(launch_ctxt[curr_btn_idx + 1], ini_sec->name); - lv_obj_set_opa_scale(launch_ctxt[curr_btn_idx + 1], LV_OPA_COVER); + lv_label_set_text(launch_ctxt.label[curr_btn_idx], ini_sec->name); + lv_obj_set_opa_scale(launch_ctxt.label[curr_btn_idx], LV_OPA_COVER); // Set rolling text if name is big. if (strlen(ini_sec->name) > 22) - lv_label_set_long_mode(boot_entry_label, LV_LABEL_LONG_ROLL); + lv_label_set_long_mode(launch_ctxt.label[curr_btn_idx], LV_LABEL_LONG_ROLL); - i++; - curr_btn_idx += 2; + entry_idx++; + curr_btn_idx++; - if (curr_btn_idx >= (max_entries * 2)) + // Check if we exceed max buttons. + if (curr_btn_idx >= max_entries) break; } } // Reiterate the loop with more cfgs if combined. - if (combined_cfg && (curr_btn_idx < 16) && !more_cfg) + if (combined_cfg && (curr_btn_idx < 8) && !more_cfg) goto ini_parsing; } - if (curr_btn_idx < 2) + if (curr_btn_idx < 1) no_boot_entries = true; sd_unmount();