circular navigation

pull/6/head
dvkt 5 years ago
parent c815c01df4
commit 8d88eb9088

@ -212,7 +212,7 @@ impl Menu {
} }
let padding = self.padding_bottom(); let padding = self.padding_bottom();
if self.scroll <= padding { if self.scroll < padding {
self.scroll += SCROLL_LINES; self.scroll += SCROLL_LINES;
if self.scroll > padding { if self.scroll > padding {
self.scroll = padding; self.scroll = padding;
@ -221,25 +221,27 @@ impl Menu {
return Action::Redraw; return Action::Redraw;
} }
} }
} else {
if !self.links.is_empty() {
self.link = self.links.len() - 1;
return Action::Redraw;
}
}
if let Some(dir) = self.link_visibility(self.link) { if let Some(dir) = self.link_visibility(self.link) {
match dir { match dir {
LinkPos::Above => { LinkPos::Above => {
let scroll = self.scroll; let scroll = self.scroll;
if let Some(&pos) = if let Some(&pos) = self.links.iter().skip(self.link).find(|&&i| i >= scroll) {
self.links.iter().skip(self.link).find(|&&i| i >= scroll)
{
self.link = self.lines.get(pos).unwrap().link; self.link = self.lines.get(pos).unwrap().link;
return Action::Redraw;
} }
} }
LinkPos::Below => {} LinkPos::Below => {}
LinkPos::Visible => {} LinkPos::Visible => {}
} }
} }
Action::Redraw
} else {
Action::None Action::None
} }
}
fn action_page_up(&mut self) -> Action { fn action_page_up(&mut self) -> Action {
if self.scroll > 0 { if self.scroll > 0 {
@ -283,6 +285,10 @@ impl Menu {
return if self.scroll > 0 { return if self.scroll > 0 {
self.scroll -= 1; self.scroll -= 1;
Action::Redraw Action::Redraw
} else if !self.links.is_empty() {
self.link = self.links.len() - 1;
self.scroll_to(self.link);
Action::Redraw
} else { } else {
Action::None Action::None
}; };
@ -379,7 +385,10 @@ impl Menu {
self.scroll += 1; self.scroll += 1;
return Action::Redraw; return Action::Redraw;
} else { } else {
return Action::None; // wrap around
self.link = 0;
self.scroll_to(self.link);
return Action::Redraw;
} }
} }

Loading…
Cancel
Save