From: Hans de Goede Date: Thu, 7 Feb 2019 16:44:32 +0000 (+0100) Subject: two-step: Add MessageBelowAnimation option X-Git-Tag: 0.9.5~74^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c5d7b61dc52064f9653b5d95ce4399e1508b3149;p=thirdparty%2Fplymouth.git two-step: Add MessageBelowAnimation option So far we've always printed messages coming from "plymouth display-message" in the top left corner. In some cases the theme may want to instead display the messages below the animation (where they are more prominently visible). My first attempt to support this added MessageHorizontal/VerticalAlignment options. That did not work since we want a more or less fixed distance between the animation bottom and the message and with screen-heights varying from 480 to 1200 that is not possible using alignment options to place both the animation and the message. Note the default is unchanged and still is the top left corner. Signed-off-by: Hans de Goede --- diff --git a/src/plugins/splash/two-step/plugin.c b/src/plugins/splash/two-step/plugin.c index 2051240f..c6f99edb 100644 --- a/src/plugins/splash/two-step/plugin.c +++ b/src/plugins/splash/two-step/plugin.c @@ -96,6 +96,7 @@ typedef struct ply_rectangle_t box_area, lock_area, watermark_area, dialog_area; ply_trigger_t *end_trigger; ply_pixel_buffer_t *background_buffer; + int animation_bottom; } view_t; typedef struct @@ -154,6 +155,7 @@ struct _ply_boot_splash_plugin uint32_t is_idle : 1; uint32_t use_firmware_background : 1; uint32_t dialog_clears_firmware_background : 1; + uint32_t message_below_animation : 1; }; ply_boot_splash_plugin_interface_t *ply_boot_splash_plugin_get_interface (void); @@ -647,6 +649,7 @@ view_start_end_animation (view_t *view, ply_animation_start (view->end_animation, view->display, trigger, x, y); + view->animation_bottom = y + height; } static void @@ -689,6 +692,7 @@ view_start_progress_animation (view_t *view) plugin->loop, view->display, x, y); ply_pixel_display_draw_area (view->display, x, y, width, height); + view->animation_bottom = y + height; } /* We don't really know how long shutdown will so @@ -706,6 +710,7 @@ view_start_progress_animation (view_t *view) view->display, x, y); ply_pixel_display_draw_area (view->display, x, y, width, height); + view->animation_bottom = y + height; } } @@ -952,6 +957,9 @@ create_plugin (ply_key_file_t *key_file) plugin->dialog_clears_firmware_background = ply_key_file_get_bool (key_file, "two-step", "DialogClearsFirmwareBackground"); + plugin->message_below_animation = + ply_key_file_get_bool (key_file, "two-step", "MessageBelowAnimation"); + progress_function = ply_key_file_get_value (key_file, "two-step", "ProgressFunction"); if (progress_function != NULL) { @@ -1668,6 +1676,29 @@ hide_prompt (ply_boot_splash_plugin_t *plugin) } +static void +view_show_message (view_t *view, + const char *message) +{ + ply_boot_splash_plugin_t *plugin = view->plugin; + int x, y, width, height; + + ply_label_set_text (view->message_label, message); + width = ply_label_get_width (view->message_label); + height = ply_label_get_height (view->message_label); + + if (plugin->message_below_animation) { + x = (ply_pixel_display_get_width (view->display) - width) * 0.5; + y = view->animation_bottom + 10; + } else { + x = 10; + y = 10; + } + + ply_label_show (view->message_label, view->display, x, y); + ply_pixel_display_draw_area (view->display, x, y, width, height); +} + static void show_message (ply_boot_splash_plugin_t *plugin, const char *message) @@ -1676,19 +1707,8 @@ show_message (ply_boot_splash_plugin_t *plugin, ply_list_node_t *node; node = ply_list_get_first_node (plugin->views); while (node != NULL) { - ply_list_node_t *next_node; - view_t *view; - - view = ply_list_node_get_data (node); - next_node = ply_list_get_next_node (plugin->views, node); - - ply_label_set_text (view->message_label, message); - ply_label_show (view->message_label, view->display, 10, 10); - - ply_pixel_display_draw_area (view->display, 10, 10, - ply_label_get_width (view->message_label), - ply_label_get_height (view->message_label)); - node = next_node; + view_show_message (ply_list_node_get_data (node), message); + node = ply_list_get_next_node (plugin->views, node); } }