static void on_boot_progress (ply_boot_splash_plugin_t *plugin, double duration, double percent_done) { ply_list_node_t *node; double total_duration; total_duration = duration / percent_done; /* Fun made-up smoothing function to make the growth asymptotic: * fraction(time,estimate)=1-2^(-(time^1.45)/estimate) */ percent_done = 1.0 - pow (2.0, -pow (duration, 1.45) / total_duration) * (1.0 - percent_done); 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_progress_bar_set_percent_done (view->progress_bar, percent_done); ply_progress_bar_draw (view->progress_bar); node = next_node; } }
void ply_progress_bar_show (ply_progress_bar_t *progress_bar, ply_pixel_display_t *display, long x, long y) { assert (progress_bar != NULL); progress_bar->display = display; ply_progress_bar_update_area (progress_bar, x, y); progress_bar->is_hidden = false; ply_progress_bar_draw (progress_bar); }
static void system_update (ply_boot_splash_plugin_t *plugin, int progress) { ply_list_node_t *node; if (plugin->mode != PLY_BOOT_SPLASH_MODE_UPDATES) return; 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_progress_bar_set_percent_done (view->progress_bar, (double) progress / 100.f); ply_progress_bar_draw (view->progress_bar); node = next_node; } }