]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
Make spinfinity plugin provide erase/draw handlers
authorRay Strode <rstrode@redhat.com>
Wed, 16 Jul 2008 20:48:26 +0000 (16:48 -0400)
committerRay Strode <rstrode@redhat.com>
Tue, 29 Jul 2008 19:15:51 +0000 (15:15 -0400)
src/splash-plugins/spinfinity/plugin.c

index 454071b1ad7bcac2200ad7d8f4bceeba3ebdfc78..96164941e4468734feb3750aecad88c5370c5c48 100644 (file)
@@ -148,9 +148,16 @@ static void
 draw_background (ply_boot_splash_plugin_t *plugin,
                  ply_frame_buffer_area_t  *area)
 {
-    ply_frame_buffer_fill_with_gradient (plugin->frame_buffer, area,
-                                         PLYMOUTH_BACKGROUND_START_COLOR,
-                                         PLYMOUTH_BACKGROUND_END_COLOR);
+  ply_frame_buffer_area_t screen_area;
+
+  if (area == NULL)
+    {
+      ply_frame_buffer_get_size (plugin->frame_buffer, &screen_area);
+      area = &screen_area;
+    }
+
+  ply_window_erase_area (plugin->window, area->x, area->y,
+                         area->width, area->height);
 }
 
 static void
@@ -284,6 +291,47 @@ on_enter (ply_boot_splash_plugin_t *plugin,
   start_animation (plugin);
 }
 
+void
+on_draw (ply_boot_splash_plugin_t *plugin,
+         int                       x,
+         int                       y,
+         int                       width,
+         int                       height)
+{
+  ply_frame_buffer_area_t area;
+
+  area.x = x;
+  area.y = y;
+  area.width = width;
+  area.height = height;
+
+  draw_background (plugin, &area);
+
+  if (plugin->pending_password_answer != NULL)
+    draw_password_entry (plugin);
+  else
+    draw_logo (plugin);
+}
+
+void
+on_erase (ply_boot_splash_plugin_t *plugin,
+          int                       x,
+          int                       y,
+          int                       width,
+          int                       height)
+{
+  ply_frame_buffer_area_t area;
+
+  area.x = x;
+  area.y = y;
+  area.width = width;
+  area.height = height;
+
+  ply_frame_buffer_fill_with_gradient (plugin->frame_buffer, &area,
+                                       PLYMOUTH_BACKGROUND_START_COLOR,
+                                       PLYMOUTH_BACKGROUND_END_COLOR);
+}
+
 bool
 show_splash_screen (ply_boot_splash_plugin_t *plugin,
                     ply_event_loop_t         *loop,
@@ -303,6 +351,14 @@ show_splash_screen (ply_boot_splash_plugin_t *plugin,
                                 (ply_window_enter_handler_t)
                                 on_enter, plugin);
 
+  ply_window_set_draw_handler (window,
+                               (ply_window_draw_handler_t)
+                               on_draw, plugin);
+
+  ply_window_set_erase_handler (window,
+                               (ply_window_erase_handler_t)
+                               on_erase, plugin);
+
   plugin->loop = loop;
 
   ply_trace ("loading logo image");
@@ -369,6 +425,8 @@ hide_splash_screen (ply_boot_splash_plugin_t *plugin,
   ply_window_set_keyboard_input_handler (window, NULL, NULL);
   ply_window_set_backspace_handler (window, NULL, NULL);
   ply_window_set_enter_handler (window, NULL, NULL);
+  ply_window_set_draw_handler (window, NULL, NULL);
+  ply_window_set_erase_handler (window, NULL, NULL);
 
   if (plugin->loop != NULL)
     {
@@ -392,6 +450,9 @@ draw_password_entry (ply_boot_splash_plugin_t *plugin)
   uint32_t *box_data, *lock_data, *entry_data, *bullet_data;
   int i;
 
+  if (plugin->pending_password_answer == NULL)
+    return;
+
   ply_frame_buffer_pause_updates (plugin->frame_buffer);
 
   entry_data = ply_image_get_data (plugin->entry_image);