@@ -48,6 +48,8 @@ pub struct Menu<T: Item> {
50impl<T: Item> Menu<T> {
50impl<T: Item> Menu<T> {
51+ const LEFT_PADDING: usize = 1;
51 // TODO: it's like a slimmed down picker, share code? (picker = menu + prompt with different
53 // TODO: it's like a slimmed down picker, share code? (picker = menu + prompt with different
52 // rendering)
54 // rendering)
53 pub fn new(
55 pub fn new(
@@ -150,6 +152,7 @@ impl<T: Item> Menu<T> {
150 len += 1; // +1: reserve some space for scrollbar
152 len += 1; // +1: reserve some space for scrollbar
155+ len += Self::LEFT_PADDING;
153 let width = len.min(viewport.0 as usize);
156 let width = len.min(viewport.0 as usize);
155 self.widths = max_lens
158 self.widths = max_lens
@@ -271,6 +274,7 @@ impl<T: Item + 'static> Component for Menu<T> {
271 .try_get("ui.menu")
274 .try_get("ui.menu")
272 .unwrap_or_else(|| theme.get("ui.text"));
275 .unwrap_or_else(|| theme.get("ui.text"));
273 let selected = theme.get("ui.menu.selected");
276 let selected = theme.get("ui.menu.selected");
277+ surface.clear_with(area, style);
275 let scroll = self.scroll;
279 let scroll = self.scroll;
@@ -306,7 +310,7 @@ impl<T: Item + 'static> Component for Menu<T> {
306 use tui::widgets::TableState;
310 use tui::widgets::TableState;
308 table.render_table(
312 table.render_table(
309− area,
313+ area.clip_left(Self::LEFT_PADDING as u16),
311 &mut TableState {
315 &mut TableState {
312 offset: scroll,
316 offset: scroll,
@@ -314,6 +318,12 @@ impl<T: Item + 'static> Component for Menu<T> {
321+ if let Some(cursor) = self.cursor {
322+ let offset_from_top = cursor - scroll;
323+ let cell = &mut surface[(area.x, area.y + offset_from_top as u16)];
324+ cell.set_style(selected);
317 let fits = len <= win_height;
327 let fits = len <= win_height;
319 for (i, _) in (scroll..(scroll + win_height).min(len)).enumerate() {
329 for (i, _) in (scroll..(scroll + win_height).min(len)).enumerate() {