Колір
Основи
Життя здається сірим без кольорів. Curses включає хороший механізм для обробки кольорів. Давайте ознайомимось з загальними поняттями про кольори за допомогою невеликої програми.
Приклад 9. Просте використання кольорів
#include <ncurses.h>
void print_in_middle(WINDOW *win, int starty, int startx, int width,
char *string);
int main(int argc, char *argv[])
{
initscr(); /* Start curses mode */
if (has_colors() == FALSE)
{
endwin();
printf("Your terminal does not support color\n");
exit(1);
}
start_color(); /* Start color */
init_pair(1, COLOR_RED, COLOR_BLACK);
attron(COLOR_PAIR(1));
print_in_middle(stdscr, LINES / 2, 0, 0, "Viola! In color...");
attroff(COLOR_PAIR(1));
getch();
endwin();
}
void print_in_middle(WINDOW *win, int starty, int startx,
int width, char *string)
{
int length, x, y;
float temp;
if (win == NULL)
win = stdscr;
getyx(win, y, x);
if (startx != 0)
x = startx;
if (starty != 0)
y = starty;
if (width == 0)
width = 80;
length = strlen(string);
temp = (width - length) / 2;
x = startx + (int)temp;
mvwprintw(win, y, x, "%s", string);
refresh();
}
Як бачите, щоб розпочати використання кольорів, вам необхідно спершу викликати функцію start_color(). Після цього, ви можете користуватися кольоровою здатністю вашого терміналу, використовуючи різні функції. Щоб дізнатися, чи термінал включає кольорову здатність, можете звернутися до has_colors(), яка поверне FALSE, якщо термінал не підтримує кольору.
Curses ініціалізує всі, властиві терміналу, кольори під час виклику start_color(). До них можна звернутися за визначеними константами, такими як COLOR_BLACK, COLOR_GREEN тощо. Тепер, щоб, власне, розпочати використання кольорів, вам необхідно означити кольорові пари. Кольори в curses завжди використовуються як пара. Це означає, що необхідно звернутися до функції init_pair() для визначення кольору переднього плану і кольору тла, позначаючи цю пару певним номером. Після цього, номер кольорової пари можна вживати як звичайний атрибут завдяки функції COLOR_PAIR(). Це може здатися обтяжливим спочатку, але насправді, таке елегантне рішення дозволяє легке керування кольоровими парами. Щоб оцінити його, ви можете заглянути до вихідних текстів програми dialog(1), - знаряддя для виводу вікон зі скриптів оболонки. Розробники цієї програми визначили всі кольори переднього плану і фону, які їм можуть знадобитися, ініціалізуючи їх напочатку. Це значно полегшує встановлення атрибутів, просто шляхом вказування кольорової пари, яку ми означили як стале.
В curses.h визначено наступні кольори. Ви можете використовувати ці назви як параметри різноманітних кольорових функцій.
Назва | Значення |
---|---|
COLOR_BLACK | 0 |
COLOR_RED | 1 |
COLOR_GREEN | 2 |
COLOR_YELLOW | 3 |
COLOR_BLUE | 4 |
COLOR_MAGENTA | 5 |
COLOR_CYAN | 6 |
COLOR_WHITE | 7 |
Зміна визначень кольору
Щоб поміняти RGB-значення кольорів, визначене curses, можна використати ту саму функцію init_color(). Скажімо, ви хотіли би приглушити яскравість червоного кольору. В такому разі можна вказати
init_color(COLOR_RED, 700, 0, 0);
/* параметр 1: назва кольору
* параметри 2, 3, 4: rgb-значення, мінімальне = 0, максимальне = 1000 */
Якщо ваш термінал не спроможний міняти визначення кольорів, ця функція поверне ERR. Можна попередньо використати функцію can_change_color(), щоб дізнатися, чи термінал дозволяє міняти означення кольорів, чи ні. RGB-начення кольору знаходяться в діапазоні між 0 і 1000. Початкове значення COLOR_RED, наприклад є рівним 1000 (червоний), 0 (зелений), 0 (синій).
Вміст кольору
Функції color_content() та pair_content() можна використати для того, щоб з'ясувати вміст кольору та комбінацію кольору переднього плану й фону кольорової пари.