Font de-antialiasing

Danas je jako tesko naci distribuciju (cak i nemoguce) koja ne isporucuje pakete kompajlirane sa xft
podrskom. Svi su culi za Xft. Interesntno je da je skoro nemoguce naci na netu konkretan odgovor na
pitanje “Sta je Xft ?”. Oni pretezno variraju od “… nesto sto omogucava anti-aliasing fontova…”,
zatim “… nesto sto koristi freetype …” itd. Definitivno u oci upada “nesto” rijec. I red bi je bio
konkretizovati, jer “nesto” se moze odnositi na kasiku, tanjir, cekic i bilo sta sto oci u ovom trenutku
mogu da registruju :). U stvari Xft je jedna veza u obliku biblioteke izmedju freetype i Xrender
ekstenzije. Freetype se potrudi da kvalitetno procita fontove, a Xrender da ih slatko “nalijepi” na svaku
aplikaciju. Ne treba zaboraviti i cuveni anti-aliasing (net je rjesenje za istrazivanje ovog pojma),
kojeg sam freetype kreira.

Eh taj isti anti-aliasing na prvi pogled izgleda lijepo, sve je mekano (kao pamuk :)), divno, krasno,
slatko, lijepo… ali ako provodite duze od 6 sati dnevno za racunarom i zelite da budete kandidat za
ocnog ljekara, nastavicete ga koristiti. Problem lezi u tome da su fontovi zamuceni, sto zahtijeva
dodatno naprezanje ociju da rasclane karaktere u smislene cjeline. Narocito je problem sa "oblijim"
fontovima, kao npr. Bitstream serija. Sami fontovi, bez anti-aliasinga su uzasni, dok ih sa spomenutom
tehnikom, ne cini nista boljim. Nije ni cudo sto su ih “poklonili” (uslovno receno, jer je to jedna
velika reklama za njih, gdje god da se krene, vidi se ovo ime). A neki se kunu u njih (hajirlije koje
nikada u zivotu nisu culi za Verdana, MS-Serif, Arial, Tahoma). Zalosno je sto znamo ko je njihov
kreator, ali im to nikako ne umanjuje kvalitetu. Ovi fontovi sa aliasingom su fantasticni, ali opet se
javlja problem zamucenosti (ovaj put nesto manje).

S druge strane, isti fontovi bez aliasinga su ne manje kvalitetni. I jos ostri, cime se gubi potreba za
naprezanjem ociju i mozga.

Ipak, sigurno ste culi o patent problemima u freetype-u. Sam patent drzi Apple. Freetype je pokusao naci
neko zaobilazno rjesenje (koje ne radi kako treba, barem u ovom trenutku), tako da za obicne smrtnike
preostaju dvije solucije: koristiti postojeci freetype, kojeg isporucuju distribucije (sa komentiranim
patent dijelom) ili uzeti stvari u svoje ruke i prilagodit si.

Evo kako ukljuciti tu opciju:

  • trebace vam source freetype-a; mozete ga skinuti sa http://www.freetype.org ili koristiti source kojeg
    isporuci distribucija;

  • neka verzija odgovara vec instaliranoj verziji (ovo je za slucaj ako koristite source sa freetype.org)

    • ovo mozete provjeriti u freetype.h fajlu (koji je negdje u /usr/include/freetype direktoriju)
      gledajuci FREETYPE_MAJOR FREETYPE_MINOR i FREETYPE_PATCH makroe;
  • nakon sto ekstraktujete arhivu sa source fajlovima, potrazite ftoption.h (smjesten je u
    [dir]/include/freetype/ftoption.h, gdje je [dir] mjesto ekstrakcije)

  • potrazite liniju:

/* #define  TT_CONFIG_OPTION_BYTECODE_INTERPRETER */

i uklonite komentare;

  • nakon toga ./configure --prefix=/usr, make i make install

Neka prefix bude /usr direktorije, inace ce po defaultu instalirati u /usr/local.

Zatim, primjeticete u /etc/fonts direktoriju dva (ili tri fajla, zavisno od distribucije), i to fonts.dtd i
fonts.conf. Ono sto spominjem zavisno od distribucije je da se zna naci i local.conf, kojeg korisnici
mogu modifikovati. U slucaju njegovog nedostajanja, kreirat ga je lako. Ne bi preporucio mijenjanje
fonts.conf (komentar u vrhu fajla najbolje govori). Naravno, moguce je kreirati i fonts.conf u lokalnom
home direktoriju, ali nece ga svi programi citati (recimo mozilla).

Ostaje jos utipkati ovo:

<fontconfig>
	<match target="font">
        	<edit name="antialias" mode="assign">
                	<bool>false</bool>
        	</edit>
	</match>
</fontconfig>

Ako nod vec postoji, nema potrebe ga pisati ponovo, a ako ne, dovoljno je prekopirati gore
dati primjer.

Korisnici ne bi bili korisnici kada ne bi zahtijevali nesto tipa “fontovi velicine x neka budu sa
anti-aliasingom, dok ostali bez njega”.

Evo kako i to:

<fontconfig>
<match target="font">
        <test qual="any" name="size" compare="more">
                <int>7</int>
        </test>
        <test qual="any" name="size" compare="less">
                <int>12</int>
        </test>
        <edit name="antialias" mode="assign">
                <bool>false</bool>
        </edit>
</match>
</fontconfig>

Vazno je napomenuti da je anti-aliasing iskljucen za rang 7-12 (sto ne ukljucuje velicine 7 i 12), dok za
ostale velicine je obratno. Naravno, moze se prilagoditi i za specificne fontove, grupu fontova i slicno.
Man fonts-conf ce dati detalje.

I jos sto ostaje je negdje “maznuti” gore navedene M$ fontove, opcionalno kreirati za njih direktorij i
kopirati ih i pokrenuti u njemu ttmkftdir. Neke distribucije ne isporucuju ovaj program (Slack), ali moze
se komotno “posuditi” sa nekog suse cd-a koji skuplja prasinu. Ttmkftdir je potreban kako bi se kreirali
puni nazivi fontova (ovdje mkfontdir ne pomaze, jer moze procitati samo X11 bitmap fontove), sto na kraju
ispljune fajl naziva fonts.dir.

Neka X-i i local.conf znaju za kreirani direktorij. Ostaje jos da malo “prilagodimo” mozillu. Kde ce sa kcontrol lijepo
procitati, tako da za to nema problema; ovo se odnosi na one koji imaju mozillu, a nemaju kompletan
gnome. U home direktorij, u .gtkrc-2.0 (ako ga nema, kreiranje je preporuka) dodati :

gtk-font-name="Verdana 8"

Umjesto Verdana moze ici nesto po zelji, a isto se odnosi i na velicinu fonta. Nakon toga, mozilla ce
veselo ostriti fontove.

Ah, da, jos nesto. Cesto aplikacije po defaultu koriste Serif ili Sans Serif fontove. Sami fontovi pod
ovim imenom ne postoje (osim ako se ne koriste M$), vec su aliasi za druge postojece. To se lako da
prilagoditi oblikom :

<alias>
	<family>sans-serif</family>
	<prefer>
		<family>Helvetica</family>
	</prefer>
</alias>

Da se stvari ukomplikuju, umjesto Helvetica moze ici i Verdana; Helvetica je samo alias za Verdana familiju.

Ih ovo se oduzi…

Za kraj evo kako izgleda razlika:
http://code.linux.org.ba/pics/img1.jpg (bez AA)
i
http://code.linux.org.ba/pics/img2.jpg (sa AA)

Evo šta dođe uz Slack 10.0

mkfontdesc
mkfontdir
mkfontscale

Tako da ti ne treba taj ttmkftdir.

Što se tiče antialiasinga fontova, to je poprilično subjektivna stvar. Ja recimo ne mgu podnijeti ako nije uključen.

Btw, nema više potrebe uključivati “BYTECODE_INTERPRETER”, trenutno stanje, sa opensource izvedbom algoritma, sasvim je zadovoljavajuće. (a IMHO, sa uključenim “bytecode interpreterom” Bitstream fontovi izgledaju očajno, previše zamagljeno; a vjerovatno su optimizirani za neoptimiziranu varijantu :wink:

O da treba ttmkftdir. Kao sto sam spomenuo, mkfontdir cita -samo- X11 bitmap fontove, a ne TTF. Freetype, kao sto znas, koristi TTF.

Samo opensource rjesenje je i dalje ocajno. Ocajnost se ne vidi sa ukljucenim anti-aliasingom, vec samo kada je iskljucen.

Zamagljenost Bitstreama je zahvaljujuci uzasnim prelazima krive sa jedne tacke na drugu (u nekom karakteru). Naime, koristi se konstantan broj piksela za fontove male i velike velicine. Ovim nacinom pikseli nisu dobro rasporedjeni u malim velicinama, sto ih cini nekako… hrapavim :). Sam efekat anti-aliasinga te fontove moze uciniti “mekanijim” ako ih zamagli do odjedjenog nivoa.

Naravno da je subjektivnost u pitanju. Ali i iskoristenost procesora. Postoji odredjen broj korisnika koji ne zeli da 90% cpu vremena bude posveceno iscrtavanju fontova. Isto tako, ovim nacinom ce se moci novije aplikacije (recimo firefox 1.0) vrtiti istom brzinom kao i u verzijama prije xft
podrske ( 0.8 ). Narocito se to osjeti na starijim procesorima.

Sanele,
fin howto :slight_smile:

[quote]

  • potrazite liniju:
    i uklonite komentare;[/quote]
    Mislim da je postojala configure opcija za to ali nisam siguran…

[quote]
Btw, nema više potrebe uključivati “BYTECODE_INTERPRETER”, trenutno stanje, sa opensource izvedbom algoritma, sasvim je zadovoljavajuće.[/quote]
Idealna kombinacija br. 1:

  • Microsoft “Monotype” fontovi sa i bez AA + patentirani bytecode interpreter
    Idealna kombinacija br. 2:
  • AA: Bitstream Vera; bez AA: Helvetica

Inače da naglasim da BYTECODE_INTERPRETER nije closed source, on je samo patentiran, a kako naša zemlja ne priznaje softverske patente :smiley: slobodno je njegovo korištenje.

Što se tiče AA vs. non-AA to je stvar navike, mada na LCD ekranima stvari puno ružnije izgledaju bez AA dok na CRT ekranima meni lično recimo odgovara da nema AA na nekim sistemskim prozorima, menijima, u konzoli i slično, dok u word procesoru ili na web stranicama više volim imati AA…