:: commit a39a588b0e8bedaedc272284f75fbf6e5b05eff7

mintsuki <mintsuki@protonmail.com> — 2021-07-08 13:47

parents: d8db4b1703

menu: Avoid useless draws of the entry tree

diff --git a/stage23/menu.c b/stage23/menu.c
index 357a3677..b8c1e84a 100644
--- a/stage23/menu.c
+++ b/stage23/menu.c
@@ -414,36 +414,44 @@ static int print_tree(const char *shift, int level, int base_index, int selected
                       struct menu_entry **selected_menu_entry) {
     int max_entries = 0;
 
+    bool no_print = false;
+    if (shift == NULL) {
+        no_print = true;
+    }
+
     for (;;) {
         if (current_entry == NULL)
             break;
-        print("%s", shift);
+        if (!no_print) print("%s", shift);
         if (level) {
             for (int i = level - 1; i > 0; i--) {
                 struct menu_entry *actual_parent = current_entry;
                 for (int j = 0; j < i; j++)
                     actual_parent = actual_parent->parent;
-                if (actual_parent->next != NULL)
-                    print(" \xb3");
-                else
-                    print("  ");
+                if (actual_parent->next != NULL) {
+                    if (!no_print) print(" \xb3");
+                } else {
+                    if (!no_print) print("  ");
+                }
+            }
+            if (current_entry->next == NULL) {
+                if (!no_print) print(" \xc0");
+            } else {
+                if (!no_print) print(" \xc3");
             }
-            if (current_entry->next == NULL)
-                print(" \xc0");
-            else
-                print(" \xc3");
         }
-        if (current_entry->sub)
-            print(current_entry->expanded ? "[-]" : "[+]");
-        else if (level)
-            print("\xc4> ");
-        else
-            print("   ");
+        if (current_entry->sub) {
+            if (!no_print) print(current_entry->expanded ? "[-]" : "[+]");
+        } else if (level) {
+            if (!no_print) print("\xc4> ");
+        } else {
+            if (!no_print) print("   ");
+        }
         if (base_index + max_entries == selected_entry) {
             *selected_menu_entry = current_entry;
-            print("\e[47m\e[30m");
+            if (!no_print) print("\e[47m\e[30m");
         }
-        print(" %s \e[0m\n", current_entry->name);
+        if (!no_print) print(" %s \e[0m\n", current_entry->name);
         if (current_entry->sub && current_entry->expanded) {
             max_entries += print_tree(shift, level + 1, base_index + max_entries + 1,
                                       selected_entry,
@@ -488,7 +496,7 @@ char *menu(char **cmdline) {
     if (!timeout) {
         // Use print tree to load up selected_menu_entry and determine if the
         // default entry is valid.
-        print_tree("    ", 0, 0, selected_entry, menu_tree, &selected_menu_entry);
+        print_tree(NULL, 0, 0, selected_entry, menu_tree, &selected_menu_entry);
         if (selected_menu_entry == NULL || selected_menu_entry->sub != NULL) {
             print("Default entry is not valid or directory, booting to menu.\n");
             skip_timeout = true;
tab: 248 wrap: offon