From 4f02e70d6d04ee949ceee6c1aaec1a2d804fe8a1 Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Sun, 24 Jun 2012 14:53:10 +0200 Subject: menu: store repaint state in variable Instead of calling print_menu_entry multiple times in each case, store the repaint state in a variable and call it once at the end to save a few bytes of binary space. Signed-off-by: Sascha Hauer --- common/menu.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/common/menu.c b/common/menu.c index cb2a6fe163..0f5df2cb00 100644 --- a/common/menu.c +++ b/common/menu.c @@ -343,6 +343,9 @@ int menu_show(struct menu *m) gotoXY(m->selected->num + 1, 3); do { + struct menu_entry *old_selected = m->selected; + int repaint = 0; + if (m->auto_select >= 0) ch = KEY_RETURN; else @@ -352,24 +355,22 @@ int menu_show(struct menu *m) switch (ch) { case KEY_UP: - print_menu_entry(m, m->selected, 0); m->selected = list_entry(m->selected->list.prev, struct menu_entry, list); if (&(m->selected->list) == &(m->entries)) { m->selected = list_entry(m->selected->list.prev, struct menu_entry, list); } - print_menu_entry(m, m->selected, 1); + repaint = 1; break; case KEY_DOWN: - print_menu_entry(m, m->selected, 0); m->selected = list_entry(m->selected->list.next, struct menu_entry, list); if (&(m->selected->list) == &(m->entries)) { m->selected = list_entry(m->selected->list.next, struct menu_entry, list); } - print_menu_entry(m, m->selected, 1); + repaint = 1; break; case ' ': if (m->selected->type != MENU_ENTRY_BOX) @@ -377,7 +378,7 @@ int menu_show(struct menu *m) m->selected->box_state = !m->selected->box_state; if (m->selected->action) m->selected->action(m, m->selected); - print_menu_entry(m, m->selected, 1); + repaint = 1; break; case KEY_ENTER: if (ch_previous == KEY_RETURN) @@ -395,6 +396,12 @@ int menu_show(struct menu *m) default: break; } + + if (repaint) { + print_menu_entry(m, old_selected, 0); + print_menu_entry(m, m->selected, 1); + } + ch_previous = ch; } while(1); -- cgit v1.2.3