diff --git a/src/menu_impl.h b/src/menu_impl.h index 9f4cba01..5b046993 100644 --- a/src/menu_impl.h +++ b/src/menu_impl.h @@ -181,41 +181,42 @@ void Menu::refresh() } size_t line = 0; + const size_t end = m_beginning+m_height; m_drawn_position = m_beginning; - for (size_t &i = m_drawn_position; i < m_beginning+m_height; ++i, ++line) + for (; m_drawn_position < end; ++m_drawn_position, ++line) { goToXY(0, line); - if (i >= m_items.size()) + if (m_drawn_position >= m_items.size()) { for (; line < m_height; ++line) mvwhline(m_window, line, 0, KEY_SPACE, m_width); break; } - if (m_items[i].isSeparator()) + if (m_items[m_drawn_position].isSeparator()) { mvwhline(m_window, line, 0, 0, m_width); continue; } - if (m_items[i].isBold()) + if (m_items[m_drawn_position].isBold()) *this << Format::Bold; - if (m_highlight_enabled && i == m_highlight) + if (m_highlight_enabled && m_drawn_position == m_highlight) { *this << Format::Reverse; *this << m_highlight_color; } mvwhline(m_window, line, 0, KEY_SPACE, m_width); - if (m_items[i].isSelected()) + if (m_items[m_drawn_position].isSelected()) *this << m_selected_prefix; if (m_item_displayer) m_item_displayer(*this); - if (m_items[i].isSelected()) + if (m_items[m_drawn_position].isSelected()) *this << m_selected_suffix; - if (m_highlight_enabled && i == m_highlight) + if (m_highlight_enabled && m_drawn_position == m_highlight) { *this << Color::End; *this << Format::NoReverse; } - if (m_items[i].isBold()) + if (m_items[m_drawn_position].isBold()) *this << Format::NoBold; } Window::refresh();