From: Charlie Brej Date: Tue, 17 Nov 2009 22:03:41 +0000 (+0000) Subject: [label] Clean up dirty area on change of text or position X-Git-Tag: 0.8.0~139 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bfaa5e9742436611a181ed75cc3d0c876233f3ca;p=thirdparty%2Fplymouth.git [label] Clean up dirty area on change of text or position 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. --- diff --git a/src/plugins/controls/label/plugin.c b/src/plugins/controls/label/plugin.c index 54917b18..5f1d1679 100644 --- a/src/plugins/controls/label/plugin.c +++ b/src/plugins/controls/label/plugin.c @@ -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; } diff --git a/src/plugins/splash/two-step/plugin.c b/src/plugins/splash/two-step/plugin.c index 07397ccc..967eac9c 100644 --- a/src/plugins/splash/two-step/plugin.c +++ b/src/plugins/splash/two-step/plugin.c @@ -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 *