Module Name: src Committed By: nia Date: Fri May 7 17:47:30 UTC 2021
Modified Files: src/usr.bin/aiomixer: draw.c Log Message: aiomixer: use standout for headings, avoid banding in header fixed a minor rendering problem when compiled against ncurses. based mostly on feedback from uwe. To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/usr.bin/aiomixer/draw.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/aiomixer/draw.c diff -u src/usr.bin/aiomixer/draw.c:1.1 src/usr.bin/aiomixer/draw.c:1.2 --- src/usr.bin/aiomixer/draw.c:1.1 Fri May 7 16:29:24 2021 +++ src/usr.bin/aiomixer/draw.c Fri May 7 17:47:30 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: draw.c,v 1.1 2021/05/07 16:29:24 nia Exp $ */ +/* $NetBSD: draw.c,v 1.2 2021/05/07 17:47:30 nia Exp $ */ /*- * Copyright (c) 2021 The NetBSD Foundation, Inc. * All rights reserved. @@ -36,38 +36,12 @@ #include <stdlib.h> #include "draw.h" -static void bold_on(WINDOW *); -static void bold_off(WINDOW *); static int get_enum_color(const char *); static void draw_enum(struct aiomixer_control *, int, bool); static void draw_set(struct aiomixer_control *, int); static void draw_levels(struct aiomixer_control *, const struct mixer_level *, bool, bool); -static void -bold_on(WINDOW *w) -{ - /* - * Some (XXX: which?) legacy terminals do not support a Bold - * attribute. In this case, we fall back to standout. - */ - if (termattrs() & A_BOLD) - wattron(w, A_BOLD); - else - wattron(w, A_STANDOUT); -} - -static void -bold_off(WINDOW *w) -{ - chtype attrs = getattrs(w); - - if (attrs & A_BOLD) - wattroff(w, A_BOLD); - if (attrs & A_STANDOUT) - wattroff(w, A_STANDOUT); -} - void draw_mixer_select(unsigned int num_mixers, unsigned int selected_mixer) { @@ -90,7 +64,7 @@ draw_mixer_select(unsigned int num_mixer } close(fd); if (selected_mixer == i) { - bold_on(stdscr); + attron(A_STANDOUT); addstr("[*] "); } else { addstr("[ ] "); @@ -98,7 +72,7 @@ draw_mixer_select(unsigned int num_mixer printw("%s: %s %s %s\n", mixer_path, dev.name, dev.version, dev.config); if (selected_mixer == i) - bold_off(stdscr); + attroff(A_STANDOUT); } } @@ -117,21 +91,11 @@ draw_control(struct aiomixer *aio, err(EXIT_FAILURE, "failed to read from mixer device"); wclear(control->widgetpad); - if (selected) { - bold_on(control->widgetpad); - if (has_colors()) { - wattron(control->widgetpad, - COLOR_PAIR(COLOR_CONTROL_SELECTED)); - } - waddch(control->widgetpad, '*'); - if (has_colors()) { - wattroff(control->widgetpad, - COLOR_PAIR(COLOR_CONTROL_SELECTED)); - } - } + if (selected) + wattron(control->widgetpad, A_STANDOUT); wprintw(control->widgetpad, "%s\n", control->info.label.name); if (selected) - bold_off(control->widgetpad); + wattroff(control->widgetpad, A_STANDOUT); switch (value.type) { case AUDIO_MIXER_ENUM: @@ -193,8 +157,12 @@ draw_enum(struct aiomixer_control *contr for (i = 0; i < control->info.un.e.num_mem; ++i) { e = &control->info.un.e; - if (ord == e->member[i].ord && selected) - bold_on(control->widgetpad); + if (ord == e->member[i].ord && selected) { + if (termattrs() & A_BOLD) + wattron(control->widgetpad, A_BOLD); + else + wattron(control->widgetpad, A_STANDOUT); + } waddch(control->widgetpad, '['); if (ord == e->member[i].ord) { if (has_colors()) { @@ -213,8 +181,12 @@ draw_enum(struct aiomixer_control *contr } } waddch(control->widgetpad, ']'); - if (ord == e->member[i].ord && selected) - bold_off(control->widgetpad); + if (ord == e->member[i].ord && selected) { + if (termattrs() & A_BOLD) + wattroff(control->widgetpad, A_BOLD); + else + wattroff(control->widgetpad, A_STANDOUT); + } if (i != (e->num_mem - 1)) waddstr(control->widgetpad, ", "); } @@ -243,13 +215,19 @@ draw_set(struct aiomixer_control *contro } waddstr(control->widgetpad, "] "); if (control->setindex == i) { - bold_on(control->widgetpad); - waddch(control->widgetpad, '*'); + if (termattrs() & A_BOLD) + wattron(control->widgetpad, A_BOLD); + else + wattron(control->widgetpad, A_STANDOUT); } wprintw(control->widgetpad, "%s", control->info.un.s.member[i].label.name); - if (control->setindex == i) - bold_off(control->widgetpad); + if (control->setindex == i) { + if (termattrs() & A_BOLD) + wattroff(control->widgetpad, A_BOLD); + else + wattroff(control->widgetpad, A_STANDOUT); + } if (i != (control->info.un.s.num_mem - 1)) waddstr(control->widgetpad, ", "); } @@ -265,7 +243,10 @@ draw_levels(struct aiomixer_control *con for (i = 0; i < control->info.un.v.num_channels; ++i) { if ((selected && !channels_unlocked) || (control->setindex == i && channels_unlocked)) { - bold_on(control->widgetpad); + if (termattrs() & A_BOLD) + wattron(control->widgetpad, A_BOLD); + else + wattron(control->widgetpad, A_STANDOUT); } wprintw(control->widgetpad, "[%3u/%3u ", levels->level[i], AUDIO_MAX_GAIN); @@ -287,7 +268,10 @@ draw_levels(struct aiomixer_control *con wprintw(control->widgetpad, "]\n"); if ((selected && !channels_unlocked) || (control->setindex == i && channels_unlocked)) { - bold_off(control->widgetpad); + if (termattrs() & A_BOLD) + wattroff(control->widgetpad, A_BOLD); + else + wattroff(control->widgetpad, A_STANDOUT); } } } @@ -301,23 +285,12 @@ draw_classbar(struct aiomixer *aio) for (i = 0; i < aio->numclasses; ++i) { if (aio->curclass == i) - bold_on(aio->classbar); - wprintw(aio->classbar, "[%u:", i + 1); - if (aio->curclass == i) { - if (has_colors()) { - wattron(aio->classbar, - COLOR_PAIR(COLOR_CONTROL_SELECTED)); - } - waddch(aio->classbar, '*'); - if (has_colors()) { - wattroff(aio->classbar, - COLOR_PAIR(COLOR_CONTROL_SELECTED)); - } - } - waddstr(aio->classbar, aio->classes[i].name); + wattron(aio->classbar, A_STANDOUT); + wprintw(aio->classbar, "[%u:%s]", + i + 1, aio->classes[i].name); if (aio->curclass == i) - bold_off(aio->classbar); - waddstr(aio->classbar, "] "); + wattroff(aio->classbar, A_STANDOUT); + waddch(aio->classbar, ' '); } wprintw(aio->classbar, "\n\n"); @@ -326,15 +299,16 @@ draw_classbar(struct aiomixer *aio) void draw_header(struct aiomixer *aio) { + wprintw(aio->header, "\n"); mvwaddstr(aio->header, 0, getmaxx(aio->header) - (int)sizeof("NetBSD audio mixer") + 1, "NetBSD audio mixer"); if (aio->mixerdev.version[0] != '\0') { - wprintw(aio->header, "%s %s", + mvwprintw(aio->header, 0, 0, "%s %s", aio->mixerdev.name, aio->mixerdev.version); } else { - wprintw(aio->header, "%s", aio->mixerdev.name); + mvwprintw(aio->header, 0, 0, "%s", aio->mixerdev.name); } }