При создании элемента типа chtype задаю цвет:
chtype a = ' ' | COLOR_PAIR(COLOR);
Но, что делать, если мне нужно поменять цвет? Для этого я использую приведение типов, вроде:
a = static_cast<char>(a) | COLOR_PAIR(NEW_COLOR);
Но выглядит достаточно громоздко. Есть ли способ получше?
Для доступа к отдельным частям chtype у ncurses есть свои битовые маски: A_ATTRIBUTES, A_CHARTEXT, A_COLOR (см. man curs_inch).
Таким образом сброс цвета будет выглядеть следующим образом:
a = (a & ~A_COLOR) | COLOR_PAIR(NEW_COLOR);
Можно тоже самое записать в две строчки:
a &= ~A_COLOR;
a |= COLOR_PAIR(NEW_COLOR);
Исходное выражение сбрасывает одновременно и цвет, и атрибуты (мигание, яркость, подчёркивание итп), если это действительно желаемый результата, то можно пользоваться A_CHARTEXT:
a = (a & A_CHARTEXT) | COLOR_PAIR(NEW_COLOR);
Замечания:
A_ATTRIBUTES также включает в себя цвет.WA_ATTRIBUTES, WA_CHARTEXT и WA_COLOR. В реализации ncurses они тождественны обычным.Сборка персонального компьютера от Artline: умный выбор для современных пользователей