Date: Sat, 13 Oct 2001 13:00:01 +0200 (CEST) From: Tomasz Potega To: aumix@linuxatlax.org Subject: [aumix] narrow screen patch (ncurses, aumix 2.7) hi, this is a patch making aumix quite useful on terminals with only 10 characters on a line. as i do not a have a mouse, i have not changed the mouse event handling code. PlaceCursor() routine is slightly changed, as are some timeout()'s. shadow --- aumix-2.7/src/curses.c Tue Jun 27 07:51:42 2000 +++ aumix-2.7-narrow/src/curses.c Sat Oct 13 12:11:21 2001 @@ -55,6 +55,7 @@ balance_increment = 1; level_width = 1; balance_width = 1; + if (COLS < NARROW_SCREEN) { menu_width = 0; label_width = 1; }; trackwidth = COLS - XOFFSET - menu_width - R_P_WIDTH - ARROW_WIDTH * 2 - label_width; trackwidth = trackwidth - 2; /* Don't count zero positions in calculations. */ if (trackwidth > 1) { @@ -74,35 +75,41 @@ } bkgdset(COLOR_PAIR(TRACK_COLOR)); clear(); - for (i = 0; i < sizeof(menuitems) / sizeof(*menuitems); i++) { - attrset(COLOR_PAIR(MENU_COLOR)); - /* - * Leave two lines above menu, one for "aumix" and one for "muted" or "only". - */ - mvaddstr(i + 2, 0, (char *) LOCAL_TEXT(menuitems[i])); - attrset(COLOR_PAIR(HOTKEY_COLOR) | A_BOLD); - hotkey[1] = '\0'; /* Add the null since strncpy won't. */ - strncpy(hotkey, (char *) LOCAL_TEXT(menuitems[i]), 1); - mvaddstr(i + 2, 0, hotkey); - } - attrset(COLOR_PAIR(MENU_COLOR) | A_UNDERLINE); - mvaddstr(0, 0, "aumix"); - attrset(COLOR_PAIR(AXIS_COLOR)); - y = CountChannels(SOUND_MIXER_NRDEVICES); - if (YOFFSET + y <= LINES) { - mvaddstr(YOFFSET + y, XOFFSET + menu_width + R_P_WIDTH, (char *) LOCAL_TEXT("0")); - mvaddstr(YOFFSET + y, XOFFSET + menu_width + R_P_WIDTH + (level_width - strlen(LOCAL_TEXT("Level"))) / 2, (char *) LOCAL_TEXT("Level")); - mvaddstr(YOFFSET + y, XOFFSET + menu_width + R_P_WIDTH + level_width - 3, (char *) LOCAL_TEXT("100")); - mvaddstr(YOFFSET + y, XOFFSET + menu_width + R_P_WIDTH + level_width + label_width + ARROW_WIDTH * 2, (char *) LOCAL_TEXT("L")); - mvaddstr(YOFFSET + y, XOFFSET + menu_width + R_P_WIDTH + level_width + label_width + ARROW_WIDTH * 2 + (balance_width - strlen(LOCAL_TEXT("Balance"))) / 2, (char *) LOCAL_TEXT("Balance")); - mvaddstr(YOFFSET + y, XOFFSET + menu_width + R_P_WIDTH + level_width + label_width + ARROW_WIDTH * 2 + balance_width - 1, (char *) LOCAL_TEXT("R")); + if (COLS >= NARROW_SCREEN) { + for (i = 0; i < sizeof(menuitems) / sizeof(*menuitems); i++) { + attrset(COLOR_PAIR(MENU_COLOR)); + /* + * Leave two lines above menu, one for "aumix" and one for "muted" or "only". + */ + mvaddstr(i + 2, 0, (char *) LOCAL_TEXT(menuitems[i])); + attrset(COLOR_PAIR(HOTKEY_COLOR) | A_BOLD); + hotkey[1] = '\0'; /* Add the null since strncpy won't. */ + strncpy(hotkey, (char *) LOCAL_TEXT(menuitems[i]), 1); + mvaddstr(i + 2, 0, hotkey); + } + attrset(COLOR_PAIR(MENU_COLOR) | A_UNDERLINE); + mvaddstr(0, 0, "aumix"); + attrset(COLOR_PAIR(AXIS_COLOR)); + y = CountChannels(SOUND_MIXER_NRDEVICES); + if (YOFFSET + y <= LINES) { + mvaddstr(YOFFSET + y, XOFFSET + menu_width + R_P_WIDTH, (char *) LOCAL_TEXT("0")); + mvaddstr(YOFFSET + y, XOFFSET + menu_width + R_P_WIDTH + (level_width - strlen(LOCAL_TEXT("Level"))) / 2, (char *) LOCAL_TEXT("Level")); + mvaddstr(YOFFSET + y, XOFFSET + menu_width + R_P_WIDTH + level_width - 3, (char *) LOCAL_TEXT("100")); + mvaddstr(YOFFSET + y, XOFFSET + menu_width + R_P_WIDTH + level_width + label_width + ARROW_WIDTH * 2, (char *) LOCAL_TEXT("L")); + mvaddstr(YOFFSET + y, XOFFSET + menu_width + R_P_WIDTH + level_width + label_width + ARROW_WIDTH * 2 + (balance_width - strlen(LOCAL_TEXT("Balance"))) / 2, (char *) LOCAL_TEXT("Balance")); + mvaddstr(YOFFSET + y, XOFFSET + menu_width + R_P_WIDTH + level_width + label_width + ARROW_WIDTH * 2 + balance_width - 1, (char *) LOCAL_TEXT("R")); + } } y = 0; /* Now recycle it for a different use. */ for (i = 0; i < SOUND_MIXER_NRDEVICES; i++) { if ((1 << i) & devmask) { attrset(COLOR_PAIR(AXIS_COLOR)); /* draw control labels */ - mvaddstr(YOFFSET + y++, XOFFSET + menu_width + R_P_WIDTH + level_width + ARROW_WIDTH, LOCAL_TEXT(dev_label[i])); + if (COLS >= NARROW_SCREEN) + mvaddstr(YOFFSET + y++, XOFFSET + menu_width + R_P_WIDTH + level_width + ARROW_WIDTH, LOCAL_TEXT(dev_label[i])); + else + mvaddch(YOFFSET + y++, XOFFSET + menu_width + R_P_WIDTH + level_width + ARROW_WIDTH, *(char*)LOCAL_TEXT(dev_label[i])); + } } PlaceCursor(); @@ -112,21 +119,18 @@ void PlaceCursor(void) { - /* - * The different attributes are to avoid ncurses optimizations. Let's hope ncurses doesn't optimize this away on terminals that can't underline. - */ - attrset(COLOR_PAIR(MENU_COLOR) | A_NORMAL); - mvaddch(0, 4, 'x'); - refresh(); attrset(COLOR_PAIR(MENU_COLOR) | A_UNDERLINE); - mvaddch(0, 4, 'x'); + move(0, 0); refresh(); } void HighlightLabelCurses(void) { attrset(COLOR_PAIR(ACTIVE_COLOR) | ((has_colors()) ? A_BOLD : A_REVERSE)); - mvaddstr(YOFFSET + CountChannels(current_dev), XOFFSET + menu_width + R_P_WIDTH + level_width + ARROW_WIDTH, LOCAL_TEXT(dev_label[current_dev])); + if (COLS >= NARROW_SCREEN) + mvaddstr(YOFFSET + CountChannels(current_dev), XOFFSET + menu_width + R_P_WIDTH + level_width + ARROW_WIDTH, LOCAL_TEXT(dev_label[current_dev])); + else + mvaddch(YOFFSET + CountChannels(current_dev), XOFFSET + menu_width + R_P_WIDTH + level_width + ARROW_WIDTH, *(char*)LOCAL_TEXT(dev_label[current_dev])); PlaceCursor(); } @@ -333,7 +337,7 @@ case '\n': levelbalmode = !levelbalmode; attrset(COLOR_PAIR(AXIS_COLOR)); - mvaddstr(YOFFSET + CountChannels(current_dev), XOFFSET + menu_width + R_P_WIDTH + level_width, " "); + mvaddstr(YOFFSET + CountChannels(current_dev), XOFFSET + menu_width + R_P_WIDTH + level_width, (COLS >= NARROW_SCREEN) ? " " : " "); HighlightLabelCurses(); DrawLevelBalMode(current_dev, levelbalmode); break; @@ -364,9 +368,12 @@ DrawLevel(current_dev); attrset(COLOR_PAIR(AXIS_COLOR)); y = CountChannels(current_dev); - mvaddstr(YOFFSET + y, XOFFSET + menu_width + R_P_WIDTH + level_width, " "); + mvaddstr(YOFFSET + y, XOFFSET + menu_width + R_P_WIDTH + level_width, (COLS >= NARROW_SCREEN) ? " " : " "); attrset(COLOR_PAIR(AXIS_COLOR)); - mvaddstr(YOFFSET + y, XOFFSET + menu_width + R_P_WIDTH + level_width + ARROW_WIDTH, LOCAL_TEXT(dev_label[current_dev])); + if (COLS >= NARROW_SCREEN) + mvaddstr(YOFFSET + y, XOFFSET + menu_width + R_P_WIDTH + level_width + ARROW_WIDTH, LOCAL_TEXT(dev_label[current_dev])); + else + mvaddch(YOFFSET + y, XOFFSET + menu_width + R_P_WIDTH + level_width + ARROW_WIDTH, *(char*)LOCAL_TEXT(dev_label[current_dev])); /* switch to next existing device */ do { if (dir == 1) { --- aumix-2.7/src/curses.h Tue Jun 27 07:51:42 2000 +++ aumix-2.7-narrow/src/curses.h Sat Oct 13 12:23:49 2001 @@ -4,6 +4,7 @@ #include /* updates only needed in interactive modes */ #define XOFFSET 0 /* blank columns to leave at the left */ #define YOFFSET 0 /* blank lines to leave at the top */ +#define NARROW_SCREEN 22 /* screen width for narrow mode */ #if HAVE_NCURSES_H #include #else