fix a few bugs progressbar related (redrawing, colors)
This commit is contained in:
@@ -1132,6 +1132,7 @@ int main(int argc, char *argv[])
|
|||||||
songpos = Mpd.GetElapsedTime();
|
songpos = Mpd.GetElapsedTime();
|
||||||
|
|
||||||
SeekingInProgress = 1;
|
SeekingInProgress = 1;
|
||||||
|
*wFooter << fmtBold;
|
||||||
while (Keypressed(input, Key.SeekForward) || Keypressed(input, Key.SeekBackward))
|
while (Keypressed(input, Key.SeekForward) || Keypressed(input, Key.SeekBackward))
|
||||||
{
|
{
|
||||||
TraceMpdStatus();
|
TraceMpdStatus();
|
||||||
@@ -1154,7 +1155,6 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::string tracklength;
|
std::string tracklength;
|
||||||
*wFooter << fmtBold;
|
|
||||||
if (Config.new_design)
|
if (Config.new_design)
|
||||||
{
|
{
|
||||||
if (Config.display_remaining_time)
|
if (Config.display_remaining_time)
|
||||||
@@ -1171,32 +1171,25 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
tracklength = "[";
|
tracklength = " [";
|
||||||
if (Config.display_remaining_time)
|
if (Config.display_remaining_time)
|
||||||
{
|
{
|
||||||
tracklength += "-";
|
tracklength += "-";
|
||||||
tracklength += Song::ShowTime(Mpd.GetTotalTime()-songpos);
|
tracklength += Song::ShowTime(Mpd.GetTotalTime()-songpos);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
tracklength = Song::ShowTime(songpos);
|
tracklength += Song::ShowTime(songpos);
|
||||||
tracklength += "/";
|
tracklength += "/";
|
||||||
tracklength += MPD::Song::ShowTime(Mpd.GetTotalTime());
|
tracklength += MPD::Song::ShowTime(Mpd.GetTotalTime());
|
||||||
tracklength += "]";
|
tracklength += "]";
|
||||||
*wFooter << XY(wFooter->GetWidth()-tracklength.length(), 1) << tracklength;
|
*wFooter << XY(wFooter->GetWidth()-tracklength.length(), 1) << tracklength;
|
||||||
}
|
}
|
||||||
double progressbar_size = songpos/double(Mpd.GetTotalTime());
|
DrawProgressbar(songpos, Mpd.GetTotalTime());
|
||||||
unsigned howlong = wFooter->GetWidth()*progressbar_size;
|
|
||||||
|
|
||||||
mvwhline(wFooter->Raw(), 0, 0, 0, wFooter->GetWidth());
|
|
||||||
for (unsigned i = 0; i < howlong; ++i)
|
|
||||||
*wFooter << Config.progressbar[0];
|
|
||||||
if (howlong < wFooter->GetWidth())
|
|
||||||
*wFooter << Config.progressbar[1];
|
|
||||||
*wFooter << fmtBoldEnd;
|
|
||||||
wFooter->Refresh();
|
wFooter->Refresh();
|
||||||
}
|
}
|
||||||
Mpd.Seek(songpos);
|
*wFooter << fmtBoldEnd;
|
||||||
SeekingInProgress = 0;
|
SeekingInProgress = 0;
|
||||||
|
Mpd.Seek(songpos);
|
||||||
UpdateStatusImmediately = 1;
|
UpdateStatusImmediately = 1;
|
||||||
|
|
||||||
UnlockProgressbar();
|
UnlockProgressbar();
|
||||||
|
|||||||
@@ -51,6 +51,8 @@ namespace
|
|||||||
bool block_statusbar_update = 0;
|
bool block_statusbar_update = 0;
|
||||||
bool block_progressbar_update = 0;
|
bool block_progressbar_update = 0;
|
||||||
bool allow_statusbar_unlock = 1;
|
bool allow_statusbar_unlock = 1;
|
||||||
|
|
||||||
|
int local_elapsed;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef USE_PDCURSES
|
#ifndef USE_PDCURSES
|
||||||
@@ -144,10 +146,10 @@ void TraceMpdStatus()
|
|||||||
else
|
else
|
||||||
block_progressbar_update = !allow_statusbar_unlock;
|
block_progressbar_update = !allow_statusbar_unlock;
|
||||||
|
|
||||||
if (!Mpd.isPlaying() && !block_statusbar_update && !block_progressbar_update)
|
if (Mpd.GetState() != psPlay && !block_statusbar_update && !block_progressbar_update)
|
||||||
{
|
{
|
||||||
if (Config.new_design)
|
if (Config.new_design)
|
||||||
mvwhline(wFooter->Raw(), 0, 0, 0, wFooter->GetWidth());
|
DrawProgressbar(local_elapsed, Mpd.GetTotalTime());
|
||||||
else
|
else
|
||||||
Statusbar() << wclrtoeol;
|
Statusbar() << wclrtoeol;
|
||||||
wFooter->Refresh();
|
wFooter->Refresh();
|
||||||
@@ -178,7 +180,6 @@ void NcmpcppStatusChanged(Connection *, StatusChanges changed, void *)
|
|||||||
static size_t first_line_scroll_begin = 0;
|
static size_t first_line_scroll_begin = 0;
|
||||||
static size_t second_line_scroll_begin = 0;
|
static size_t second_line_scroll_begin = 0;
|
||||||
static std::string player_state;
|
static std::string player_state;
|
||||||
static int elapsed;
|
|
||||||
static MPD::Song np;
|
static MPD::Song np;
|
||||||
|
|
||||||
int sx, sy;
|
int sx, sy;
|
||||||
@@ -338,14 +339,8 @@ void NcmpcppStatusChanged(Connection *, StatusChanges changed, void *)
|
|||||||
wHeader->Refresh();
|
wHeader->Refresh();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!block_statusbar_update && Config.statusbar_visibility)
|
else if (!block_statusbar_update && Config.statusbar_visibility && player_state.empty())
|
||||||
{
|
*wFooter << XY(0, 1) << wclrtoeol;
|
||||||
*wFooter << XY(0, 1);
|
|
||||||
if (player_state.empty())
|
|
||||||
*wFooter << wclrtoeol;
|
|
||||||
else
|
|
||||||
*wFooter << player_state;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (changed.SongID)
|
if (changed.SongID)
|
||||||
{
|
{
|
||||||
@@ -387,10 +382,10 @@ void NcmpcppStatusChanged(Connection *, StatusChanges changed, void *)
|
|||||||
changed.ElapsedTime = 1;
|
changed.ElapsedTime = 1;
|
||||||
|
|
||||||
int mpd_elapsed = Mpd.GetElapsedTime();
|
int mpd_elapsed = Mpd.GetElapsedTime();
|
||||||
if (elapsed < mpd_elapsed-2 || elapsed+1 > mpd_elapsed)
|
if (local_elapsed < mpd_elapsed-2 || local_elapsed+1 > mpd_elapsed)
|
||||||
elapsed = mpd_elapsed;
|
local_elapsed = mpd_elapsed;
|
||||||
else if (Mpd.GetState() == psPlay && !RedrawStatusbar)
|
else if (Mpd.GetState() == psPlay && !RedrawStatusbar)
|
||||||
elapsed++;
|
++local_elapsed;
|
||||||
|
|
||||||
std::string tracklength;
|
std::string tracklength;
|
||||||
if (Config.new_design)
|
if (Config.new_design)
|
||||||
@@ -398,10 +393,10 @@ void NcmpcppStatusChanged(Connection *, StatusChanges changed, void *)
|
|||||||
if (Config.display_remaining_time)
|
if (Config.display_remaining_time)
|
||||||
{
|
{
|
||||||
tracklength = "-";
|
tracklength = "-";
|
||||||
tracklength += Song::ShowTime(Mpd.GetTotalTime()-elapsed);
|
tracklength += Song::ShowTime(Mpd.GetTotalTime()-local_elapsed);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
tracklength = Song::ShowTime(elapsed);
|
tracklength = Song::ShowTime(local_elapsed);
|
||||||
if (Mpd.GetTotalTime())
|
if (Mpd.GetTotalTime())
|
||||||
{
|
{
|
||||||
tracklength += "/";
|
tracklength += "/";
|
||||||
@@ -454,17 +449,17 @@ void NcmpcppStatusChanged(Connection *, StatusChanges changed, void *)
|
|||||||
if (Config.display_remaining_time)
|
if (Config.display_remaining_time)
|
||||||
{
|
{
|
||||||
tracklength += "-";
|
tracklength += "-";
|
||||||
tracklength += Song::ShowTime(Mpd.GetTotalTime()-elapsed);
|
tracklength += Song::ShowTime(Mpd.GetTotalTime()-local_elapsed);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
tracklength += Song::ShowTime(elapsed);
|
tracklength += Song::ShowTime(local_elapsed);
|
||||||
tracklength += "/";
|
tracklength += "/";
|
||||||
tracklength += MPD::Song::ShowTime(Mpd.GetTotalTime());
|
tracklength += MPD::Song::ShowTime(Mpd.GetTotalTime());
|
||||||
tracklength += "]";
|
tracklength += "]";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
tracklength += Song::ShowTime(elapsed);
|
tracklength += Song::ShowTime(local_elapsed);
|
||||||
tracklength += "]";
|
tracklength += "]";
|
||||||
}
|
}
|
||||||
basic_buffer<my_char_t> np_song;
|
basic_buffer<my_char_t> np_song;
|
||||||
@@ -474,20 +469,7 @@ void NcmpcppStatusChanged(Connection *, StatusChanges changed, void *)
|
|||||||
*wFooter << fmtBold << XY(wFooter->GetWidth()-tracklength.length(), 1) << tracklength;
|
*wFooter << fmtBold << XY(wFooter->GetWidth()-tracklength.length(), 1) << tracklength;
|
||||||
}
|
}
|
||||||
if (!block_progressbar_update)
|
if (!block_progressbar_update)
|
||||||
{
|
DrawProgressbar(local_elapsed, Mpd.GetTotalTime());
|
||||||
double progressbar_size = elapsed/double(Mpd.GetTotalTime());
|
|
||||||
unsigned howlong = wFooter->GetWidth()*progressbar_size;
|
|
||||||
*wFooter << Config.progressbar_color;
|
|
||||||
mvwhline(wFooter->Raw(), 0, 0, 0, wFooter->GetWidth());
|
|
||||||
if (Mpd.GetTotalTime())
|
|
||||||
{
|
|
||||||
for (unsigned i = 0; i < howlong; ++i)
|
|
||||||
*wFooter << Config.progressbar[0];
|
|
||||||
if (howlong < wFooter->GetWidth())
|
|
||||||
*wFooter << Config.progressbar[1];
|
|
||||||
}
|
|
||||||
*wFooter << Config.statusbar_color;
|
|
||||||
}
|
|
||||||
RedrawStatusbar = 0;
|
RedrawStatusbar = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -621,6 +603,21 @@ Window &Statusbar()
|
|||||||
return *wFooter;
|
return *wFooter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DrawProgressbar(unsigned elapsed, unsigned time)
|
||||||
|
{
|
||||||
|
unsigned howlong = time ? wFooter->GetWidth()*elapsed/time : 0;
|
||||||
|
*wFooter << fmtBold << Config.progressbar_color;
|
||||||
|
mvwhline(wFooter->Raw(), 0, 0, 0, wFooter->GetWidth());
|
||||||
|
if (time)
|
||||||
|
{
|
||||||
|
for (unsigned i = 0; i < howlong; ++i)
|
||||||
|
*wFooter << Config.progressbar[0];
|
||||||
|
if (howlong < wFooter->GetWidth())
|
||||||
|
*wFooter << Config.progressbar[1];
|
||||||
|
}
|
||||||
|
*wFooter << clEnd << fmtBoldEnd;
|
||||||
|
}
|
||||||
|
|
||||||
void ShowMessage(const char *format, ...)
|
void ShowMessage(const char *format, ...)
|
||||||
{
|
{
|
||||||
if (MessagesAllowed && allow_statusbar_unlock)
|
if (MessagesAllowed && allow_statusbar_unlock)
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ void NcmpcppStatusChanged(MPD::Connection *, MPD::StatusChanges, void *);
|
|||||||
void NcmpcppErrorCallback(MPD::Connection *, int, const char *, void *);
|
void NcmpcppErrorCallback(MPD::Connection *, int, const char *, void *);
|
||||||
|
|
||||||
Window &Statusbar();
|
Window &Statusbar();
|
||||||
|
void DrawProgressbar(unsigned elapsed, unsigned time);
|
||||||
void ShowMessage(const char *, ...) GNUC_PRINTF(1, 2);
|
void ShowMessage(const char *, ...) GNUC_PRINTF(1, 2);
|
||||||
|
|
||||||
void StatusbarGetStringHelper(const std::wstring &);
|
void StatusbarGetStringHelper(const std::wstring &);
|
||||||
|
|||||||
Reference in New Issue
Block a user