LINUX.ORG.RU

Работа с цветами

 , ,


0

1

Понадобилось написать небольшую биосоподобную обертку для curses. Биосоподобную в том смысле, что основная операция подобна работе соответствующего BIOS-прерывания — вывести символ с заданным атрибутом. При выводе символа каждый раз заново вызывается функция init_pair для инициализации цветовой пары. Как эта функция обычно реализуется в curses? Стоит ли дополнительно проверять, не была ли эта пара уже инициализирована, или библиотека все сделает за меня? Не будет ли при ее постоянном вызове проблем не только с производительностью, но и с работоспособностью вообще?

★★★★★

Намудрил сильно

При выводе символа каждый раз заново вызывается функция init_pair для инициализации цветовой пары.

Нет. Пример применения.

schizoid ★★★ ()
Ответ на: Намудрил сильно от schizoid

Если уж хочется выпендриться, то бери за основу terminfo, а не curses. Ближе к тому, что ты хочешь.

schizoid ★★★ ()
Ответ на: Намудрил сильно от schizoid

Пример применения

Я знаю, как это делается с использованием исключительно curses. Но у меня задача такова — именно выводить каждый конкретный символ с каждым конкретным атрибутом. Можно, конечно, писать их на виртуальный экран, который потом отображать средствами curses, чтобы не было лишних обращений к init_pair, но мне интересно, стоит ли оно того.

buddhist ★★★★★ ()
Ответ на: комментарий от buddhist

Можно, конечно, писать их на виртуальный экран, который потом отображать средствами curses

curses уже использует свою буферизацию, для этого init_pair и придуман.

Есть ещё вариант наплодить все 64 пары :)

Поскольку то, что ты делаешь, более низкоуровнево, чем сама curses, проще воспользоваться этим низким уровнем. Иначе получается эмулятор терминфо, написанный на курсес, написанной на терминфо.

Под *nix - escape-коды, под винды - conio.h. Для цветов одних вполне компромиссное решение. В общем, KISS.

А так, AFAIR, init_pair пишет в массив (предопределённый размеров COLOR_PAIRS или как-то так), каждое значение - обыкновенный int. Так что, оверхед вполне скроется за тормознутостью терминалов.

schizoid ★★★ ()
Ответ на: комментарий от buddhist

Кстати, все известные мне реализации curses под винду обладают большими количествами багов и недоделок, потому что надстройки над conio. Под ней последовательные init_pair могут-таки убить производительность.

schizoid ★★★ ()
Ответ на: комментарий от schizoid

Надо будет протестировать. В принципе, это не столь критично, важно чтобы не было очень серьезных провалов в производительности. Потом может быть и разнесу на низкоуровневые реализации для разных ОС.

buddhist ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.