Finer progress bar thanks to Unicode
This commit is contained in:
parent
e4f3f8ebf0
commit
7e35164e77
38
nncmpp.c
38
nncmpp.c
|
@ -787,6 +787,35 @@ app_write_time (struct row_buffer *buf, int seconds, chtype attrs)
|
||||||
str_free (&s);
|
str_free (&s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
app_write_gauge (struct row_buffer *buf, float ratio, int width)
|
||||||
|
{
|
||||||
|
// Always compute it in exactly eight times the resolution,
|
||||||
|
// because sometimes Unicode is even useful
|
||||||
|
int len_left = ratio * width * 8 + 0.5;
|
||||||
|
|
||||||
|
static const char *partials[] = { " ", "▏", "▎", "▍", "▌", "▋", "▊", "▉"};
|
||||||
|
int remainder = len_left % N_ELEMENTS (partials);
|
||||||
|
len_left /= N_ELEMENTS (partials);
|
||||||
|
|
||||||
|
// Assuming that if we can show the 1/8 box then we can show them all
|
||||||
|
const char *partial = NULL;
|
||||||
|
// TODO: cache this setting and make it configurable since it doesn't seem
|
||||||
|
// to work 100% (e.g. incompatible with undelining in urxvt)
|
||||||
|
if (!app_is_character_in_locale (L'▏'))
|
||||||
|
len_left += remainder >= (int) N_ELEMENTS (partials) / 2;
|
||||||
|
else
|
||||||
|
partial = partials[remainder];
|
||||||
|
|
||||||
|
int len_right = width - len_left;
|
||||||
|
while (len_left-- > 0)
|
||||||
|
row_buffer_append (buf, " ", APP_ATTR (ELAPSED));
|
||||||
|
if (partial && len_right-- > 0)
|
||||||
|
row_buffer_append (buf, partial, APP_ATTR (REMAINS));
|
||||||
|
while (len_right-- > 0)
|
||||||
|
row_buffer_append (buf, " ", APP_ATTR (REMAINS));
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
app_redraw_status (void)
|
app_redraw_status (void)
|
||||||
{
|
{
|
||||||
|
@ -842,13 +871,8 @@ app_redraw_status (void)
|
||||||
if (!stopped && g_ctx.song_elapsed >= 0 && g_ctx.song_duration >= 1
|
if (!stopped && g_ctx.song_elapsed >= 0 && g_ctx.song_duration >= 1
|
||||||
&& remaining > 0)
|
&& remaining > 0)
|
||||||
{
|
{
|
||||||
int len_elapsed = (int) ((float) g_ctx.song_elapsed
|
app_write_gauge (&buf,
|
||||||
/ g_ctx.song_duration * remaining + 0.5);
|
(float) g_ctx.song_elapsed / g_ctx.song_duration, remaining);
|
||||||
int len_remains = remaining - len_elapsed;
|
|
||||||
while (len_elapsed-- > 0)
|
|
||||||
row_buffer_append (&buf, " ", APP_ATTR (ELAPSED));
|
|
||||||
while (len_remains-- > 0)
|
|
||||||
row_buffer_append (&buf, " ", APP_ATTR (REMAINS));
|
|
||||||
}
|
}
|
||||||
else while (remaining-- > 0)
|
else while (remaining-- > 0)
|
||||||
row_buffer_append (&buf, " ", a_normal);
|
row_buffer_append (&buf, " ", a_normal);
|
||||||
|
|
Loading…
Reference in New Issue