summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2013-03-19 19:32:39 +0100
committerMaxime Coste <frrrwww@gmail.com>2013-03-20 19:11:58 +0100
commit07a2c2944f10c77ef5c201803217718faea87df2 (patch)
tree1279cc599a031d5298f30c82029837d97a386453 /src
parent3f467ba451dab2b2ecfa2a9cb7ffd11a6d8e10e2 (diff)
NCurses: draw a scroll bar
Diffstat (limited to 'src')
-rw-r--r--src/ncurses.cc14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/ncurses.cc b/src/ncurses.cc
index bc875123..c7eeffa1 100644
--- a/src/ncurses.cc
+++ b/src/ncurses.cc
@@ -325,10 +325,14 @@ void NCursesUI::draw_menu()
auto menu_fg = get_color_pair({ Color::Blue, Color::Cyan });
auto menu_bg = get_color_pair({ Color::Cyan, Color::Blue });
+ auto scroll_fg = get_color_pair({ Color::White, Color::White });
+ auto scroll_bg = get_color_pair({ Color::White, Color::Blue });
+
wattron(m_menu_win, COLOR_PAIR(menu_bg));
wbkgdset(m_menu_win, COLOR_PAIR(menu_bg));
DisplayCoord menu_size = window_size(m_menu_win);
- CharCount column_width = menu_size.column / m_menu_columns;
+ CharCount column_width = (menu_size.column - 1) / m_menu_columns;
+ LineCount mark_line = (menu_size.line * m_selected_choice) / (int)m_choices.size();
for (auto line = 0_line; line < menu_size.line; ++line)
{
wmove(m_menu_win, (int)line, 0);
@@ -349,6 +353,10 @@ void NCursesUI::draw_menu()
wattron(m_menu_win, COLOR_PAIR(menu_bg));
}
wclrtoeol(m_menu_win);
+ wmove(m_menu_win, (int)line, (int)menu_size.column - 1);
+ wattron(m_menu_win, COLOR_PAIR(line == mark_line ? scroll_fg : scroll_bg));
+ waddch(m_menu_win, ' ');
+ wattron(m_menu_win, COLOR_PAIR(menu_bg));
}
redraw();
}
@@ -366,12 +374,12 @@ void NCursesUI::menu_show(const memoryview<String>& choices,
CharCount longest = 0;
for (auto& choice : choices)
{
- m_choices.push_back(choice.substr(0_char, std::min((int)maxsize.column-1, 200)));
+ m_choices.push_back(choice.substr(0_char, std::min((int)maxsize.column-2, 200)));
longest = std::max(longest, m_choices.back().char_length());
}
longest += 1;
- m_menu_columns = (style == MenuStyle::Prompt) ? (int)(maxsize.column / longest) : 1;
+ m_menu_columns = (style == MenuStyle::Prompt) ? (int)((maxsize.column -1) / longest) : 1;
int lines = std::min(10, (int)ceilf((float)m_choices.size()/m_menu_columns));
DisplayCoord pos = { anchor.line+1, anchor.column };