window: fill background color on clearing to EOL
This commit is contained in:
@@ -465,7 +465,8 @@ void Status::Changes::playerState()
|
|||||||
myPlaylist->reloadRemaining();
|
myPlaylist->reloadRemaining();
|
||||||
if (Config.design == Design::Alternative)
|
if (Config.design == Design::Alternative)
|
||||||
{
|
{
|
||||||
*wHeader << NC::XY(0, 0) << wclrtoeol << NC::XY(0, 1) << wclrtoeol;
|
*wHeader << NC::XY(0, 0) << NC::TermManip::ClearToEOL;
|
||||||
|
*wHeader << NC::XY(0, 1) << NC::TermManip::ClearToEOL;
|
||||||
mixer();
|
mixer();
|
||||||
flags();
|
flags();
|
||||||
}
|
}
|
||||||
@@ -488,7 +489,7 @@ void Status::Changes::playerState()
|
|||||||
{
|
{
|
||||||
*wFooter << NC::XY(0, 1);
|
*wFooter << NC::XY(0, 1);
|
||||||
if (state.empty())
|
if (state.empty())
|
||||||
*wFooter << wclrtoeol;
|
*wFooter << NC::TermManip::ClearToEOL;
|
||||||
else
|
else
|
||||||
*wFooter << NC::Format::Bold << state << NC::Format::NoBold;
|
*wFooter << NC::Format::Bold << state << NC::Format::NoBold;
|
||||||
}
|
}
|
||||||
@@ -551,7 +552,7 @@ void Status::Changes::elapsedTime(bool update_elapsed)
|
|||||||
if (m_player_state == MPD::psStop)
|
if (m_player_state == MPD::psStop)
|
||||||
{
|
{
|
||||||
if (Statusbar::isUnlocked() && Config.statusbar_visibility)
|
if (Statusbar::isUnlocked() && Config.statusbar_visibility)
|
||||||
*wFooter << NC::XY(0, 1) << wclrtoeol;
|
*wFooter << NC::XY(0, 1) << NC::TermManip::ClearToEOL;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -592,7 +593,7 @@ void Status::Changes::elapsedTime(bool update_elapsed)
|
|||||||
}
|
}
|
||||||
NC::WBuffer np_song;
|
NC::WBuffer np_song;
|
||||||
Format::print(Config.song_status_wformat, np_song, &np);
|
Format::print(Config.song_status_wformat, np_song, &np);
|
||||||
*wFooter << NC::XY(0, 1) << wclrtoeol << NC::Format::Bold << ps << NC::Format::NoBold;
|
*wFooter << NC::XY(0, 1) << NC::TermManip::ClearToEOL << NC::Format::Bold << ps << NC::Format::NoBold;
|
||||||
writeCyclicBuffer(np_song, *wFooter, playing_song_scroll_begin, wFooter->getWidth()-ps.length()-tracklength.length(), L" ** ");
|
writeCyclicBuffer(np_song, *wFooter, playing_song_scroll_begin, wFooter->getWidth()-ps.length()-tracklength.length(), L" ** ");
|
||||||
*wFooter << NC::Format::Bold << NC::XY(wFooter->getWidth()-tracklength.length(), 1) << tracklength << NC::Format::NoBold;
|
*wFooter << NC::Format::Bold << NC::XY(wFooter->getWidth()-tracklength.length(), 1) << tracklength << NC::Format::NoBold;
|
||||||
}
|
}
|
||||||
@@ -631,11 +632,11 @@ void Status::Changes::elapsedTime(bool update_elapsed)
|
|||||||
size_t second_start = second_len < COLS-second_margin ? (COLS-second_len)/2 : ps.length()+1;
|
size_t second_start = second_len < COLS-second_margin ? (COLS-second_len)/2 : ps.length()+1;
|
||||||
|
|
||||||
if (!Global::SeekingInProgress)
|
if (!Global::SeekingInProgress)
|
||||||
*wHeader << NC::XY(0, 0) << wclrtoeol << tracklength;
|
*wHeader << NC::XY(0, 0) << NC::TermManip::ClearToEOL << tracklength;
|
||||||
*wHeader << NC::XY(first_start, 0);
|
*wHeader << NC::XY(first_start, 0);
|
||||||
writeCyclicBuffer(first, *wHeader, first_line_scroll_begin, COLS-tracklength.length()-VolumeState.length()-1, L" ** ");
|
writeCyclicBuffer(first, *wHeader, first_line_scroll_begin, COLS-tracklength.length()-VolumeState.length()-1, L" ** ");
|
||||||
|
|
||||||
*wHeader << NC::XY(0, 1) << wclrtoeol << NC::Format::Bold << ps << NC::Format::NoBold;
|
*wHeader << NC::XY(0, 1) << NC::TermManip::ClearToEOL << NC::Format::Bold << ps << NC::Format::NoBold;
|
||||||
*wHeader << NC::XY(second_start, 1);
|
*wHeader << NC::XY(second_start, 1);
|
||||||
writeCyclicBuffer(second, *wHeader, second_line_scroll_begin, COLS-ps.length()-8-2, L" ** ");
|
writeCyclicBuffer(second, *wHeader, second_line_scroll_begin, COLS-ps.length()-8-2, L" ** ");
|
||||||
|
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ Statusbar::ScopedLock::~ScopedLock() noexcept
|
|||||||
switch (Config.design)
|
switch (Config.design)
|
||||||
{
|
{
|
||||||
case Design::Classic:
|
case Design::Classic:
|
||||||
put() << wclrtoeol;
|
put(); // clear statusbar
|
||||||
break;
|
break;
|
||||||
case Design::Alternative:
|
case Design::Alternative:
|
||||||
Progressbar::draw(Status::State::elapsedTime(), Status::State::totalTime());
|
Progressbar::draw(Status::State::elapsedTime(), Status::State::totalTime());
|
||||||
@@ -149,7 +149,7 @@ void Statusbar::tryRedraw()
|
|||||||
{
|
{
|
||||||
case MPD::psUnknown:
|
case MPD::psUnknown:
|
||||||
case MPD::psStop:
|
case MPD::psStop:
|
||||||
put() << wclrtoeol;
|
put(); // clear statusbar
|
||||||
break;
|
break;
|
||||||
case MPD::psPlay:
|
case MPD::psPlay:
|
||||||
case MPD::psPause:
|
case MPD::psPause:
|
||||||
@@ -168,7 +168,7 @@ void Statusbar::tryRedraw()
|
|||||||
|
|
||||||
NC::Window &Statusbar::put()
|
NC::Window &Statusbar::put()
|
||||||
{
|
{
|
||||||
*wFooter << NC::XY(0, Config.statusbar_visibility ? 1 : 0) << wclrtoeol;
|
*wFooter << NC::XY(0, Config.statusbar_visibility ? 1 : 0) << NC::TermManip::ClearToEOL;
|
||||||
return *wFooter;
|
return *wFooter;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -183,7 +183,7 @@ void Statusbar::print(int delay, const std::string &message)
|
|||||||
else
|
else
|
||||||
progressbar_block_update = true;
|
progressbar_block_update = true;
|
||||||
wFooter->goToXY(0, Config.statusbar_visibility);
|
wFooter->goToXY(0, Config.statusbar_visibility);
|
||||||
*wFooter << message << wclrtoeol;
|
*wFooter << message << NC::TermManip::ClearToEOL;
|
||||||
wFooter->refresh();
|
wFooter->refresh();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,14 +47,14 @@ void drawHeader()
|
|||||||
switch (Config.design)
|
switch (Config.design)
|
||||||
{
|
{
|
||||||
case Design::Classic:
|
case Design::Classic:
|
||||||
*wHeader << NC::XY(0, 0) << wclrtoeol << NC::Format::Bold << myScreen->title() << NC::Format::NoBold;
|
*wHeader << NC::XY(0, 0) << NC::TermManip::ClearToEOL << NC::Format::Bold << myScreen->title() << NC::Format::NoBold;
|
||||||
*wHeader << Config.volume_color;
|
*wHeader << Config.volume_color;
|
||||||
*wHeader << NC::XY(wHeader->getWidth()-VolumeState.length(), 0) << VolumeState;
|
*wHeader << NC::XY(wHeader->getWidth()-VolumeState.length(), 0) << VolumeState;
|
||||||
*wHeader << NC::Color::End;
|
*wHeader << NC::Color::End;
|
||||||
break;
|
break;
|
||||||
case Design::Alternative:
|
case Design::Alternative:
|
||||||
std::wstring title = myScreen->title();
|
std::wstring title = myScreen->title();
|
||||||
*wHeader << NC::XY(0, 3) << wclrtoeol;
|
*wHeader << NC::XY(0, 3) << NC::TermManip::ClearToEOL;
|
||||||
*wHeader << NC::Format::Bold << Config.alternative_ui_separator_color;
|
*wHeader << NC::Format::Bold << Config.alternative_ui_separator_color;
|
||||||
mvwhline(wHeader->raw(), 2, 0, 0, COLS);
|
mvwhline(wHeader->raw(), 2, 0, 0, COLS);
|
||||||
mvwhline(wHeader->raw(), 4, 0, 0, COLS);
|
mvwhline(wHeader->raw(), 4, 0, 0, COLS);
|
||||||
|
|||||||
@@ -1094,9 +1094,18 @@ Window &Window::operator<<(Format format)
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
Window &Window::operator<<(int (*f)(WINDOW *))
|
Window &Window::operator<<(TermManip tm)
|
||||||
{
|
{
|
||||||
f(m_window);
|
switch (tm)
|
||||||
|
{
|
||||||
|
case TermManip::ClearToEOL:
|
||||||
|
{
|
||||||
|
auto x = getX(), y = getY();
|
||||||
|
mvwhline(m_window, y, x, ' ', m_width-x);
|
||||||
|
goToXY(x, y);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -187,6 +187,9 @@ private:
|
|||||||
std::ostream &operator<<(std::ostream &os, const Color &c);
|
std::ostream &operator<<(std::ostream &os, const Color &c);
|
||||||
std::istream &operator>>(std::istream &is, Color &f);
|
std::istream &operator>>(std::istream &is, Color &f);
|
||||||
|
|
||||||
|
/// Terminal manipulation functions
|
||||||
|
enum class TermManip { ClearToEOL };
|
||||||
|
|
||||||
/// Format flags used by NCurses
|
/// Format flags used by NCurses
|
||||||
enum class Format {
|
enum class Format {
|
||||||
None,
|
None,
|
||||||
@@ -410,8 +413,7 @@ struct Window
|
|||||||
/// @param where indicates how many lines it has to scroll
|
/// @param where indicates how many lines it has to scroll
|
||||||
virtual void scroll(Scroll where);
|
virtual void scroll(Scroll where);
|
||||||
|
|
||||||
/// Applies function of compatible prototype to internal WINDOW pointer
|
Window &operator<<(TermManip tm);
|
||||||
Window &operator<<(int (*f)(WINDOW *));
|
|
||||||
Window &operator<<(const Color &color);
|
Window &operator<<(const Color &color);
|
||||||
Window &operator<<(Format format);
|
Window &operator<<(Format format);
|
||||||
Window &operator<<(const XY &coords);
|
Window &operator<<(const XY &coords);
|
||||||
|
|||||||
Reference in New Issue
Block a user