Author: Pedro Lucas Porcellis <porcellis@eletrotupi.com>
ui: move rendering progress bar to its own function as well
src/ui.c | 85 +++++++++++++++++++++++++++++++++------------------------
diff --git a/src/ui.c b/src/ui.c index 1575acd21966b194ec3ee4c6fc9fb6ae68dbedd5..e8e0d2d2ed996a6c185d9d769791d59787edfeb4 100644 --- a/src/ui.c +++ b/src/ui.c @@ -26,6 +26,8 @@ static int render_status_window(TickitWindow *win, TickitEventFlags flags, void *_info, void *data); static int render_main_window(TickitWindow *win, TickitEventFlags flags, void *_info, void *data); static int render_queue(struct seamus_frontend *seamus, TickitRenderBuffer *render_buffer); static int render_library(struct seamus_frontend *seamus, TickitRenderBuffer *render_buffer); +static void render_progress_bar(TickitWindow *win, TickitRenderBuffer *render_buffer, + struct seamus_frontend *seamus); int tickit_init(struct seamus_frontend *s) @@ -519,56 +521,67 @@ tickit_renderbuffer_goto(rb, row + 2, col); tickit_renderbuffer_text(rb, "\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98"); } -static int -render_status_window(TickitWindow *win, TickitEventFlags flags, void *_info, void *data) +static void +render_progress_bar(TickitWindow *win, TickitRenderBuffer *render_buffer, + struct seamus_frontend *seamus) { - (void)win; - (void)flags; - TickitExposeEventInfo *info = _info; - TickitRenderBuffer *render_buffer = info->rb; - struct seamus_frontend *seamus = (struct seamus_frontend*) data; + if (!seamus->status) return; - tickit_renderbuffer_eraserect(render_buffer, &info->rect); + int bar_width = tickit_window_cols(win); - int r = fetch_current_status(seamus); + if (bar_width > 60) { + bar_width = 40; + } - // Progress bar - if (seamus->status) { - int bar_width = tickit_window_cols(win); - if (bar_width > 60) bar_width = 40; - if (bar_width < 10) bar_width = 10; + if (bar_width < 10) { + bar_width = 10; + } + + int filled = 0; + if (seamus->status->total_time > 0) { + filled = (int)((double)seamus->status->elapsed_time / + seamus->status->total_time * bar_width); + } + + if (filled > bar_width) { + filled = bar_width; + } - int filled = 0; + tickit_renderbuffer_goto(render_buffer, 1, 0); - if (seamus->status->total_time > 0) { - filled = (int) ((double)seamus->status->elapsed_time / - seamus->status->total_time * bar_width); - } + tickit_renderbuffer_savepen(render_buffer); + + TickitPen *bar_pen = tickit_pen_new_attrs( + TICKIT_PEN_FG, 6, + 0); - if (filled > bar_width) { - filled = bar_width; - } + tickit_renderbuffer_setpen(render_buffer, bar_pen); - tickit_renderbuffer_goto(render_buffer, 1, 0); + for (int i = 0; i < filled; i++) { + tickit_renderbuffer_text(render_buffer, "\xe2\x96\x88"); + } - tickit_renderbuffer_savepen(render_buffer); + for (int i = filled; i < bar_width; i++) { + tickit_renderbuffer_text(render_buffer, "\xe2\x96\x91"); + } - TickitPen *bar_pen = tickit_pen_new_attrs( - TICKIT_PEN_FG, 6, - 0); + tickit_renderbuffer_restore(render_buffer); +} - tickit_renderbuffer_setpen(render_buffer, bar_pen); +static int +render_status_window(TickitWindow *win, TickitEventFlags flags, void *_info, void *data) +{ + (void)win; + (void)flags; + TickitExposeEventInfo *info = _info; + TickitRenderBuffer *render_buffer = info->rb; + struct seamus_frontend *seamus = (struct seamus_frontend*) data; - for (int i = 0; i < filled; i++) { - tickit_renderbuffer_text(render_buffer, "\xe2\x96\x88"); - } + tickit_renderbuffer_eraserect(render_buffer, &info->rect); - for (int i = filled; i < bar_width; i++) { - tickit_renderbuffer_text(render_buffer, "\xe2\x96\x91"); - } + int r = fetch_current_status(seamus); - tickit_renderbuffer_restore(render_buffer); - } + render_progress_bar(win, render_buffer, seamus); const char *pause_desc = seamus->status->state == MPD_STATE_PLAY ? "Pause" : "Play";