]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
space-flares plugin: show messages in the top left corner
authorRichard Hughes <richard@hughsie.com>
Thu, 7 Jun 2012 15:17:36 +0000 (16:17 +0100)
committerRay Strode <rstrode@redhat.com>
Fri, 8 Jun 2012 22:12:11 +0000 (18:12 -0400)
https://bugs.freedesktop.org/show_bug.cgi?id=50845

src/plugins/splash/space-flares/plugin.c

index 32412e0c03086b074be17bee5d17acd958778db7..fc86c8c7419b6c5d3d69a482e6961d6012e1bd58 100644 (file)
@@ -163,6 +163,7 @@ typedef struct
   ply_pixel_display_t *display;
   ply_entry_t *entry;
   ply_label_t *label;
+  ply_label_t *message_label;
   ply_list_t *sprites;
   ply_rectangle_t box_area, lock_area, logo_area;
   ply_image_t *scaled_background_image;
@@ -217,6 +218,10 @@ view_new (ply_boot_splash_plugin_t *plugin,
 
   view->entry = ply_entry_new (plugin->image_dir);
   view->label = ply_label_new ();
+  view->message_label = ply_label_new ();
+  ply_label_set_text (view->message_label, "");
+  ply_label_show (view->message_label, view->display, 10, 10);
+
   view->sprites = ply_list_new ();
 
   return view;
@@ -230,6 +235,7 @@ view_free (view_t *view)
 
   ply_entry_free (view->entry);
   ply_label_free (view->label);
+  ply_label_free (view->message_label);
   view_free_sprites (view);
   ply_list_free (view->sprites);
 
@@ -1365,6 +1371,9 @@ on_draw (view_t                   *view,
   if (single_pixel){
       ply_pixel_buffer_fill_with_color (pixel_buffer, &clip_area, pixel_r, pixel_g, pixel_b, 1.0);
       }
+  ply_label_draw_area (view->message_label,
+                       pixel_buffer,
+                       x, y, width, height);
 }
 
 static void
@@ -1785,6 +1794,28 @@ become_idle (ply_boot_splash_plugin_t *plugin,
   ply_trigger_pull (idle_trigger, NULL);
 }
 
+static void
+show_message (ply_boot_splash_plugin_t *plugin,
+              const char               *message)
+{
+  ply_trace ("Showing message '%s'", message);
+  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_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;
+    }
+}
+
 static void
 display_normal (ply_boot_splash_plugin_t *plugin)
 {
@@ -1828,6 +1859,13 @@ display_question (ply_boot_splash_plugin_t *plugin,
   unpause_views (plugin);
 }
 
+static void
+display_message (ply_boot_splash_plugin_t *plugin,
+                 const char               *message)
+{
+  show_message (plugin, message);
+}
+
 ply_boot_splash_plugin_interface_t *
 ply_boot_splash_plugin_get_interface (void)
 {
@@ -1846,6 +1884,7 @@ ply_boot_splash_plugin_get_interface (void)
       .display_normal = display_normal,
       .display_password = display_password,
       .display_question = display_question,      
+      .display_message = display_message,
     };
 
   return &plugin_interface;