next up previous contents
Next: Współrzędne kursora i okna Up: Semigrafika Previous: Aktualizacja terminala   Contents

Atrybuty video i kolory

Atrybuty są specjalnymi zdolnościami terminala używanymi podczas wypisywania znaków na ekran. Znaki mogą być wypisywane jako: pogrubione, podkreślone, migające, itp. W ncurses masz możliwość włączania/wyłączania atrybutów aby twój program wyglądał ładniej. Atrybuty które możesz wykorzystać:


Table 8.4: Ncurses - atrybuty
Definicja Atrybut
A_ATTRIBUTES maska dla atrybutów (chtype)
A_NORMAL normalny, resetuje wszystkie inne
A_STANDOUT najlepsze podświetlenie
A_UNDERLINE podkreślenie
A_REVERSE odwrócenie video
A_BLINK miganie
A_DIM dim lub połowa jasności
A_BOLD pogrubienie lub extra jasno
A_ALTCHARSET użyj alternatywnego zestawu znaków
A_INVIS niewidzialny
A_PROTECT ???
A_CHARTEXT maska dla aktualnych znaków (chtype)
A_COLOR maska dla koloru
COLOR_PAIR(n) ustaw parę kolorów na tą przechowywaną w n
PAIR_NUMBER(a) pobierz parę kolorów przechowywaną w atrybucie a

Ncurses definiują osiem kolorów, które możesz użyć na terminalu obsługującym kolory. Najpierw musisz zainicjować struktury danych kolorów za pomocą start_color(), póżniej sprawdziać zdolność terminala has_colors(). start_color() zainicjuje COLORS maxymalną liczbą wspieraną przez terminal, oraz COLOR_PAIR - maxymalna ilość par, które możesz zdefiniować.


Table 8.5: Ncurses - kolory
Definition Color
COLOR_BLACK czarny
COLOR_RED czerwony
COLOR_GREEN zielony
COLOR_YELLOW żółty
COLOR_BLUE niebieski
COLOR_MAGENTA karmazynowy
COLOR_CYAN cyan
COLOR_WHITE biały

Atrybuty mogą być łączony za pomocą operatora OR '${\verbar}$', tak więc możesz stworzyć pogrubione, migające wyjście:


\begin{tscreen}
   \begin{verbatim}A_BOLD\vert A_BLINK\end{verbatim}\end{tscreen}

Kiedy ustawisz oknu atrybut attr wszystkie znaki zawarte w nim zostaną wypisane z tym atrybutem. Atrybut nie zniknie podczas przewijania, przesuwania, itp.

Pisząc programy dla ncurses i BSD curses musisz pamiętać, że te drugie nie obsługują kolorów ( także starsze wersje curses z SYSV nie mają obsługi kolorów ). Jeżeli chcesz aby twój program pracował pod obiema bibliotekami musisz posłużyć się #ifdef.

Jak mieszać atrybuty i kolory? Niektóre terminale, tak jak Linuksowa konsola, posiadają kolory, a niektóre ich nie mają ( xterm, vs100, itp. ). Następujący kod powinien rozwiązać problem:


\begin{tscreen}
   \begin{verbatim}void CheckColor(WINDOW *win1, WINDOW *win2)
   {
   s...
   ...in1,A_REVERSE);
   wattrset(win2,A_BOLD);
   }
   return;
   }\end{verbatim}\end{tscreen}

Najpierw CheckColor inicjalizuje kolory za pomocą start_color(), póżniej sprawdza ( has_colors() ) czy terminal ma kolory. Jeżeli TRUE to inicjalizujemy parę kolorów, oraz ustawiamy ją dla okien ( wattrset(...) ). Jeżeli nie mamy kolorów ustawiamy jakieś zastępcze atrybuty ( odwróceni, pogrubienie ).

Aby uzyskać kolory w xtermie najlepszym sposobem jaki znalazłem jest skorzystanie z ansi_xterm wraz z połatanym wpisem w terminfo, zawartym w pakiecie Midnight Commander. Znajdź źródła ansi_xterm i Midnight Commandera ( mc-x.x.tar.gz ). Skompiluj ansi_xterm, użyj tic z xterm.ti i vt100.ti z archiwum MC. Włącz ansi_xterm i przetestuj go.


next up previous contents
Next: Współrzędne kursora i okna Up: Semigrafika Previous: Aktualizacja terminala   Contents

2000-03-01


Poltronic