]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
ply-console-viewer: Reorder the labels.
authornerdopolis <bluescreen_avenger@verizon.net>
Wed, 13 Dec 2023 00:58:59 +0000 (19:58 -0500)
committern3rdopolis <bluescreenavenger@gmail.com>
Sat, 16 Dec 2023 13:25:01 +0000 (13:25 +0000)
When there is less than 1 screenful of lines, the first line now appears at the top, more similar to a terminal emulator

src/libply-splash-graphics/ply-console-viewer.c

index 07de4b48e7426e2084e6c026ea4a0cf6dad7e1fe..86c9959811ff22d3b1c4f4d971800cc7d7b4b4c0 100644 (file)
@@ -132,7 +132,7 @@ update_console_messages (ply_console_viewer_t *console_viewer)
 {
         ply_list_node_t *node;
         ply_label_t *console_message_label;
-        size_t message_number;
+        size_t message_number, number_of_messages, visible_line_count;
         ssize_t characters_left;
         ply_rich_text_span_t span;
 
@@ -144,9 +144,18 @@ update_console_messages (ply_console_viewer_t *console_viewer)
         if (console_viewer->display == NULL)
                 return;
 
-        message_number = ply_terminal_emulator_get_line_count (console_viewer->terminal_emulator) - 1;
+        visible_line_count = ply_list_get_length (console_viewer->message_labels);
 
-        if (message_number < 0)
+        number_of_messages = ply_terminal_emulator_get_line_count (console_viewer->terminal_emulator);
+
+        message_number = ply_terminal_emulator_get_line_count (console_viewer->terminal_emulator);
+        if (message_number < visible_line_count) {
+                message_number = 0;
+        } else {
+                message_number = number_of_messages - visible_line_count;
+        }
+
+        if (number_of_messages < 0)
                 return;
 
         ply_pixel_display_pause_updates (console_viewer->display);
@@ -193,10 +202,10 @@ update_console_messages (ply_console_viewer_t *console_viewer)
                 if (line != NULL)
                         ply_rich_text_drop_reference (line);
 
-                if (message_number <= 0)
-                        break;
+                message_number++;
 
-                message_number--;
+                if (message_number >= number_of_messages)
+                        break;
         }
         console_viewer->needs_redraw = true;
         ply_pixel_display_draw_area (console_viewer->display, 0, 0,
@@ -226,7 +235,7 @@ ply_console_viewer_show (ply_console_viewer_t *console_viewer,
                 console_message_label = ply_list_node_get_data (node);
                 ply_label_show (console_message_label, console_viewer->display,
                                 console_viewer->font_width / 2,
-                                (ply_pixel_display_get_height (console_viewer->display) - (console_viewer->font_height * label_index) - console_viewer->font_height));
+                                console_viewer->font_height * label_index);
                 ply_label_set_hex_color (console_message_label, label_color);
                 label_index++;
         }
@@ -257,7 +266,7 @@ ply_console_viewer_draw_area (ply_console_viewer_t *console_viewer,
                 console_message_label = ply_list_node_get_data (node);
                 ply_label_draw_area (console_message_label, buffer,
                                      MAX (x, console_viewer->font_width / 2),
-                                     MAX (y, (ply_pixel_display_get_height (console_viewer->display) - (console_viewer->font_height * label_index) - console_viewer->font_height)),
+                                     MAX (y, console_viewer->font_height * label_index),
                                      MIN (ply_label_get_width (console_message_label), width),
                                      MIN (height, console_viewer->font_height));
                 label_index++;