From 721e9b2311e75fcdff329b6e1b026509ce7c0986 Mon Sep 17 00:00:00 2001 From: cancel Date: Thu, 2 Jan 2020 02:28:04 +0900 Subject: [PATCH] Add dimming of inactive/non-foreground menu contents --- term_util.c | 6 ++++++ term_util.h | 1 + tui_main.c | 13 ++++++++++++- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/term_util.c b/term_util.c index 35851ce..c39d610 100644 --- a/term_util.c +++ b/term_util.c @@ -255,6 +255,12 @@ void qmenu_add_spacer(Qmenu* qm) { ++qm->items_count; qm->ncurses_items[qm->items_count] = NULL; } +void qmenu_set_displayed_active(Qmenu* qm, bool active) { + // Could add a flag in the Qmenu to avoid redundantly changing this stuff. + set_menu_fore(qm->ncurses_menu, active ? A_BOLD : A_DIM); + set_menu_back(qm->ncurses_menu, active ? A_NORMAL : A_DIM); + set_menu_grey(qm->ncurses_menu, active ? A_DIM : A_DIM); +} void qmenu_push_to_nav(Qmenu* qm) { qm->ncurses_menu = new_menu(qm->ncurses_items); set_menu_mark(qm->ncurses_menu, " > "); diff --git a/term_util.h b/term_util.h index 17c917b..3eefbb9 100644 --- a/term_util.h +++ b/term_util.h @@ -127,6 +127,7 @@ int qmenu_id(Qmenu const* qm); void qmenu_set_title(Qmenu* qm, char const* title); void qmenu_add_choice(Qmenu* qm, char const* text, int id); void qmenu_add_spacer(Qmenu* qm); +void qmenu_set_displayed_active(Qmenu* qm, bool active); void qmenu_push_to_nav(Qmenu* qm); bool qmenu_drive(Qmenu* qm, int key, Qmenu_action* out_action); Qmenu* qmenu_of(Qblock* qb); diff --git a/tui_main.c b/tui_main.c index 22d99e7..22b02ad 100644 --- a/tui_main.c +++ b/tui_main.c @@ -2287,7 +2287,18 @@ int main(int argc, char** argv) { for (Usz i = 0; i < qnav_stack.count; ++i) { Qblock* qb = qnav_stack.blocks[i]; if (qnav_stack.stack_changed) { - qblock_print_frame(qb, i == qnav_stack.count - 1); + bool is_frontmost = i == qnav_stack.count - 1; + qblock_print_frame(qb, is_frontmost); + switch (qb->tag) { + case Qblock_type_qmsg: + break; + case Qblock_type_qmenu: { + Qmenu* qm = qmenu_of(qb); + qmenu_set_displayed_active(qm, is_frontmost); + } break; + case Qblock_type_qform: + break; + } } touchwin(qb->outer_window); wnoutrefresh(qb->outer_window);