]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
[label] Clean up dirty area on change of text or position
authorCharlie Brej <cbrej@cs.man.ac.uk>
Tue, 17 Nov 2009 22:03:41 +0000 (22:03 +0000)
committerCharlie Brej <cbrej@cs.man.ac.uk>
Tue, 17 Nov 2009 22:03:41 +0000 (22:03 +0000)
When the text or the position is changed, label will call draw events on areas
which were previously drawn on.

The two-step plugin is updated with the new method.

src/plugins/controls/label/plugin.c
src/plugins/splash/two-step/plugin.c

index 54917b18ded9ae1a59cfa6e8bff2a47bbe083691..5f1d1679a31a51f9cce25f6a62ccfd15e7ec1728 100644 (file)
@@ -211,12 +211,21 @@ draw_control (ply_label_plugin_control_t *label,
 
 void
 set_text_for_control (ply_label_plugin_control_t *label,
-                      const char  *text)
+                      const char                 *text)
 {
+  ply_rectangle_t dirty_area;
+
   if (label->text != text)
     {
+      dirty_area = label->area;
       free (label->text);
       label->text = strdup (text);
+      size_control (label);
+      if (!label->is_hidden)
+        ply_pixel_display_draw_area (label->display,
+                                     dirty_area.x, dirty_area.y,
+                                     dirty_area.width, dirty_area.height);
+
     }
 }
 
@@ -226,6 +235,9 @@ show_control (ply_label_plugin_control_t *label,
               long                        x,
               long                        y)
 {
+  ply_rectangle_t dirty_area;
+  
+  dirty_area = label->area;
   label->display = display;
   label->area.x = x;
   label->area.y = y;
@@ -234,6 +246,13 @@ show_control (ply_label_plugin_control_t *label,
 
   size_control (label);
 
+  if (!label->is_hidden)
+    ply_pixel_display_draw_area (label->display,
+                                 dirty_area.x, dirty_area.y,
+                                 dirty_area.width, dirty_area.height);
+
+  label->is_hidden = false;
+
   return true;
 }
 
index 07397ccca122fd3efc437f16b91bbc63131c8a01..967eac9ca3a35c6941f78a79c2d9c8d647eccd1b 100644 (file)
@@ -99,7 +99,6 @@ struct _ply_boot_splash_plugin
   double animation_horizontal_alignment;
   double animation_vertical_alignment;
   char *animation_dir;
-  char *message;
 
   ply_progress_animation_transition_t transition;
   double transition_duration;
@@ -144,6 +143,8 @@ view_new (ply_boot_splash_plugin_t *plugin,
 
   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);
 
   return view;
 }
@@ -429,7 +430,6 @@ create_plugin (ply_key_file_t *key_file)
   free (image_path);
 
   plugin->animation_dir = image_dir;
-  plugin->message = NULL;
 
   alignment = ply_key_file_get_value (key_file, "two-step", "HorizontalAlignment");
   if (alignment != NULL)
@@ -536,12 +536,6 @@ destroy_plugin (ply_boot_splash_plugin_t *plugin)
     ply_image_free (plugin->corner_image);
 
   free_views (plugin);
-  if (plugin->message != NULL)
-    {
-      free (plugin->message);
-      plugin->message = NULL;
-    }
-
   free (plugin);
 }
 
@@ -1039,8 +1033,6 @@ show_message (ply_boot_splash_plugin_t *plugin,
       
       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));
@@ -1059,9 +1051,6 @@ display_normal (ply_boot_splash_plugin_t *plugin)
       start_progress_animation (plugin);
 
       redraw_views (plugin);
-      if (plugin->message)
-        display_message (plugin, plugin->message);
-
     }
   unpause_views (plugin);
 }
@@ -1100,10 +1089,7 @@ static void
 display_message (ply_boot_splash_plugin_t *plugin,
                  const char               *message)
 {
-  if (plugin->message != NULL)
-    free (plugin->message);
-  plugin->message = strdup (message);
-  show_message (plugin, plugin->message);
+  show_message (plugin, message);
 }
 
 ply_boot_splash_plugin_interface_t *