Autor: Danny,
obiwan@mailmij.org,
oryginał:
http://dot.kde.org/989808269
Wersja polska:
Łukasz Bromirski v2, 16 maj
2001, 18:25:40 GMT+1, oryginał tłumaczenia:
http://www.prosys.com.pl/~szopen/tlumaczenia/antyaliasing_xf403.html
Wielu różnych ludzi pytało jak skonfigurować czcionki z nowym
rozszerzeniem Xft, które między innymi włącza wygładzanie (anty-aliasing). Poniżej
prezentuję krótkie wprowadzenie do tego tematu.
Konfiguracja rozszerzenia Xft razem z wygładzaniem
Xft to interfejs do rasteryzera freetype napisany przez Keitha
Packarda, członka Projektu XFree86 Inc. Umożliwia on używanie nowego rozszerzenia
renderującego w X'ach dla czcionek, przy użyciu ujednoliconego schematu nazewnictwa. W
pliku /etc/X11/XftConfig (lub /usr/X11R6/lib/X11/XftConfig) znajdziesz konfigurację
którą następnie musisz dostosować do swojego osobistego gustu. W tym dokumencie
wyjaśnię składnię i zademonstruję niektóre rzeczy które możesz z nim zrobić.
Struktura
Zasadnicza struktura opiera się na 'wzorcu'. Wzorzec to zestaw par:
nazwa/lista wartości, w których każda lista wartości zawiera jedną lub większą
ilość wartości. Aplikacja żąda jakąś czcionki, na przykład:
family:
"Arial" size: 12 encoding: "iso8859-1". Czyli czcionka o
rozmiarze 12 arial, z kodowaniem latin-1. Rozszerzenie Xft spróbuje teraz zastosować to
wywołanie do wszystkich czcionek dostępnych w systemie i wybierze tą, która najlepiej
pasuje. Zanim wykonane zostanie takie porównanie, Xft sprawdza plik XftConfig. Żadane
wywołanie może być tutaj rozszerzone wprost, na przykład:
match any family == "Arial" edit antialias = true;
Co włączy wygładzanie dla wszystkich czcionek z rodziny Arial. O
dostępne czcionki odpytywany jest również serwer X'ów; XLFD zawiera tylko tyle
informacji by dopasować czcionki mniej-więcej. Poniżej lista argumentów używanych w
listach używanych do dopasowywania czcionek (w kolejności priorytetu, może już nie
być aktualna!):
foundry - rodzaj czcionki (string, np. "monotype")
encoding - kodowanie czcionki (string, np. "iso8859-1")
spacing - odstępy w czcionce (integer, lub: proporcjonalnie (0),
mono(100), wielkości znaku (110))
bold - czy czcionka ma styl bold (boolean)
italic - czy czcionka ma styl italic (boolean)
antialias - czy czcionkę należy wygładzić (boolean)
family - rodzina czcionki (string)
size - wielkość czcionki (double)
style - styl czcionki (string, np. "Bold Italic")
slant - rodzaj czcionki (roman, italic, oblique)
weight - waga czcionki (integer lub: light, medium(100),
demibold, bold, black)
rasterizer- jeszcze nie do użytku (prawdopodobnie "TrueType",
"Type1"..)
outline - czy czcionka ma obrys (boolean)
Składnia
dir
Dodaje katalog do listy przeszukiwań Xft w przypadku szukania
czcionek. Kolejność wpisów nie jest istotna, Xft traktuje wszystkie czcionki tak samo.
include i includeif
Sprawia że Xft ładuje dodatkowe parametry konfiguracyjne ze
wskazanego pliku. "includeif" nie spowoduje problemów jeśli wskazany plik nie
istnieje. Jeśli nazwa pliku zaczyna się od "~", oznacza to że położenie
pliku jest relatywne do katalogu domowego użytkownika - jest to przydatne we wszystkich
sytuacjach z różnymi konfiguracjami dla różnych użytkowników.
match edit ;
Jeśli wzorzec z aplikacji pasuje do ciągu znaków po słowie
"match", jest edytowany odpowiednio do instrukcji podanych po słowie
"edit". Sprawdzanie zgodności wzorca odbywa się w ten sposób:
match qual FIELD-NAME COMPARE CONSTANT
gdzie qual to "any" (pasuje do jednej podanej czcionki) lub
"all" (który pasuje do wszystkich czcionek). Na przykład:
match all foundry=="monotype"
Sprawi że pasować będą wszystkie czcionki z rodzaju monotype (i
tylko one zostaną wyedytowane).
match any family=="arial"
Sprawi że pasować będą wszystkie czcionki z rodziny arial (i tylko
one zostaną wyedytowane).
FIELD-NAME to jedna z właściwości wymienionych wyżej w sekcji
"Struktura".
COMPARE to znaki <,>
lub ==.
CONSTANT to wartość pola do porównania, również wymienionych dla
poszczególnych pól powyżej w sekcji "Struktura"
Możesz podać wiele porównań zanim podasz słowo "edit".
edit FIELD-NAME ASSIGN EXPR SEMI
FIELD-NAME to jedna z powyższych (sprawdź sekcję
"Struktura") plus dodatkowe:
weight - waga czcionki (integer lub: light, medium(100),
demibold, bold, black)
pixelsize - wielkość czcionki w pikselach (integer)
charspace - odstępy między znakami (integer)
minspace - minimalny odstęp między znakami (integer)
rgba - podpowiedzi koloru (string "rgb" lub "bgr", dla wartości
pionowych "vrgb" i "vbgr")
xlfd - X serwer czcionek (string, wpisz xlsfonts by zobaczyć listę stringów xlfd)
file - zbiór z czcionką (string)
core - czy używać podstawowych czcionek X'ów (boolean)
render - czy używać renderowania czcionek?
index - nie mam zielonego pojęcia co to robi :)
scalable - czy czcionka jest skalowalna (boolean)
scale - skala czcionki (integer)
charwidth - szerokość czcionki (integer)
charheight- wysokość czcionki (integer)
matrix - nie mam pomysłu (przynajmniej żadnego konkretnego)
ASSIGN może być znakiem: =, += lub =+. Znak =, pasująca wartość we
wzorcu zostanie zastąpiona przez podane wyrażenie. Znaki += i =+ dodadzą odpowiednio na
początku i na końcu listy wartości nową, do wskazanego pola.
EXPR ustawia FIELD-NAME na wskazaną wartość
SEMI to średnik. Możesz podać kilka instrukcji oddzielanych
średnikiem.
Przykłady
A teraz postaram się podać parę użytecznych konfiguracji i je
wyjaśnić. Weź pod uwagę że są to konfiguracje mojego systemu i mogę używać innych
czcionek niż ty, w związku z tym być może będziesz musiał adoptować przykłady do
swoich potrzeb.
1) Jak sprawić by czcionki były dostępne dla Xft?
Wylistuj swoje katalogi zawierające czcionki Type1 i TrueType przy
użyciu polecenia dir. Na moim systemie (Mandrake 7.2) wygląda to tak:
dir "/usr/X11R6/lib/X11/fonts/Type1"
dir "/usr/X11R6/lib/X11/fonts/drakfont"
2) Jak zastosować różne pliki konfiguracyjne XftConfig dla
każdego użytkownika?
Dodaj plik .xftconfig do katalogu domowego użytkownika, a do
głównego pliku konfiguracyjnego (XftConfig) dopisz
includeif "~/.xftconfig"
Teraz każdy użytkownik może mieć swoje specyficzne ustawienia, ale
jednocześnie jeśli nie zostaną one zdefiniowane i pliku nie będzie - system nie
będzie narzekał.
3) Jak zrobić aliasy dla czcionek?
Zauważyłem że moja konsola z KDE szuka czcionek 'mono' kiedy chodzi
jej o czcionki o stałej wielkości (fixed font). Z kolei 'console' używa gdy wybiorę z
menu czcionek opcję 'linux'. W związku z tym, dodałem dwa aliasy dla czcionek, które
nazwałem 'fixed':
match any family == "fixed" edit family =+
"mono";
match any family == "console" edit family =+ "mono";
4) Wygładzanie powoduje że moje czcionki się rozmywają!
Mimo że jest dużo szumu wokół wygładzania w X'ach, dobre czcionki
wyglądają lepiej gdy nie są wygładzane. Proces ten powoduje dodanie szarych pikseli na
obrzeżach, co może męczyć twoje oczy jeśli pracujesz z nimi odpowiednio długo.
(Twoje oczy będą starały się wyostrzyć obraz, co oczywiście nie będzie
działało bo będzie on nieostry). Z drugiej strony, dla bardzo małych czcionek
wygładzanie może zwiększyć ich czytelność, ponieważ jeśli są one ostre, twój
mózg musi się więcej namęczyć próbując dopasować obraz z paru pikseli do znanych
znaków. Również dla bardzo dużych czcionek wygładzanie spowoduje że
"porwane" czcionki będą wyglądały ładniej. Można oczywiście wyłaczyć
wygładzanie dla wskazanych czcionek. W innych systemach operacyjnych, większość
czcionek truetype nie jest wygładzana przy rozmiarach od 8 do 12, natomiast Type1 tak.
Użyj poniższej sekwencji w swoim XftConfig by zastosować
wygładzanie tylko dla czcionek o określonych rozmiarach:
match
any size>
8
any size < 15
edit
antialias = false;
5) Moje czcionki o stałych rozmiarach (fixed fonts) w ogóle się nie pojawiają lub
wyglądają _bardzo_ źle w konsoli KDE i podobnych programach!
Zauważyłem że większość czcionek fixed wcale nie informuje Xft
że są fixed i w związku z tym traktuje on je jako czcionki mono spaced. Właśnie
dlatego wyświetlane są tylko fragmenty znaków. Można ustawić dla tych czcionek
ręcznie odstępy (zakładam że zastosowałeś już aliasy dla typu mono tak jak w
pytaniu 3):
match
any family == "mono"
edit
spacing = mono;
6) Nie pojawiają się moje czcionki Symbol, Webdings itd.!
Z jakiś powodów niektóre czcionki (symbole) nie są poprawnie
rozpoznawane, i Xft pokaże w ich miejsce czcionkę domyślną, lub taką dla której
znajdzie największe podobieństwo (co zwykle absolutnie nie jest tym o czym myślałeś).
Dla czcionek Adobe Symbol i MS-webdings dopisałem następujące linijki by zaczęły
działać:
match
any family == "webdings"
edit
antialias = false;
encoding += "glyphs-fontspecific";
match
any family == "symbol"
edit
antialias = false;
encoding += "glyphs-fontspecific";
Wygodnym sposobem by sprawdzić te ustawienia, jest włączenie
debugingu poleceniem:
export XFT_DEBUG=1024
Wygeneruje to dużo danych wyjściowych, szczególnie jeśli masz wiele
czcionek, ponieważ debug generuje listę wszystkich właściwości danej czcionki.
Możesz również użyć innych wartości. By uzyskać ładne podsumowanie tego co się
dzieje (czcionki która została zażądana, przypisania wykonanego przez XftConfig,
dodatków serwera X i w końcu tego co zostało wybrane), możesz użyć XFT_DEBUG=2.
7) Dlaczego moje programy pod KDE startują tak wolno?
Aktualnie, mechanizm Xft z XFree 4.0.3 musi przejrzeć plik XftConfig
dla każdego startu programu. W dodatku, musi również odczytać informacje dla
wszystkich czcionek. Nowsze wersje (z CVS) używają cache i są dużo szybsze. Problem
ten może być szczególnie dotkliwy jeśli masz dużo czcionek, a jedynym sensownym
rozwiązaniem wydaje się upgrade z CVS projektu XFree.
8) Mam wyświetlacz LCD, mogę używać techniki subpixel
hinting zamiast zwykłego wygładzania?
Możesz. Technika subpixel hinting używa kolorów zamiast szarych
pikseli by wykonać wygładzanie. Nie posiadam takiego ekranu, więc nie mam pojęcia jak
to wygląda, ale możesz pobawić się ustawieniami rgba. Spróbuj dodać
match edit rgba=bgr;
lub "rgba=rgb" jeśli masz inny typ monitora. Dla pionowego
wygładzania możesz próbować "rgba=vbgr" lub "rgba=vbgr".
9) Moje czcionki nadal wyglądają źle!
Jeśli nie masz żadnych dobrych czcionek truetype, warto poszukać ich
w internecie. Innym powodem dla którego twoje czcionki mogą nadal wyglądać źle, jest
nieodpowiednia wersja programu freetype2. Wersja snapshot przed 2.0.2 została
skompilowana z opcją która miała jakieś problemy z patentami. W związku z tym,
standardowa wersja 2.0.2 kompilowana jest bez tej opcji. By to poprawić, ściągnij
źródła do freetype2 i zmien plik include/freetype/config/ftoption.h w lini 314:
#undef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
na:
#define TT_CONFIG_OPTION_BYTECODE_INTERPRETER
i przebuduj program ze źródeł. Sprawdź jeszcze plik README
dołączony do paczki jeśli chciałbyś szczególy. Czcionka Adobe Courier wygląda
koszmarnie na moim komputerze, więc wykonałem dla niej alis na czcionkę Lucida. Jeśli
komukolwiek udałoby się uzyskać ładniejszy wygląd, byłbym wdzięczny za informacje.
10) Inne źródła w sieci...
Pod poniższymi linkami możesz znaleźć więcej inforamcji o renderowaniu i rozszerzeniu
Xft:
SuSE HowTo:
http://www.nadmm.com/show.php?story=articles/aafonts-HOWTO.inc
Lars Knoll HowTo
http://trolls.troll.no/~lars/fonts/qt-fonts-HOWTO.html
Oczywiście, wszystkie uwagi będą mile widziane.