Java, Infinality i inne fonty

Historia usprawniania metod renderowania fontów w Linuksie ma już wieloletnią tradycję i zdążyła obrosnąć w legendy. Wiele osób nie może patrzeć na domyślną jakość fontów w niektórych dystrybucjach, inni uważają je za całkiem ok, a jeszcze inni stawiają ponad to, co można zobaczyć na wiodącym systemie. Ile odbiorców tyle gustów, niemniej jedno można powiedzieć – najładniej i najprzyjemniej prezentują się fonty w Ubuntu. Wiele innych dystrybucji wspomaga stylistykę renderowania fontów projektem Infinality (który jest de facto zestawem łatek), a niektórzy użytkownicy uważają wręcz, że również w Ubuntu Infinality potrafi poprawić co nieco. Jedno jest pewne – Infinality doskonale sprawdzi się również dla programów w Javie, a dokładniej OpenJDK.

Dwukrotne powiększenie okna i domyślny render fontów oraz Infinality (animacja)
Dziwnym zbiegiem okoliczności, OpenJDK korzysta z systemowego renderowania fontów z pominięciem tego, co oferuje rzeczone Infinality. Cała zabawa sprowadza się do odpowiedniego skompilowania Javy, z jednoczesnym uwzględnieniem flagi –enable-infinality. Oczywiście nie będziemy nic kompilowali, bo ktoś to uczynił już za nas, a efekt tej pracy znajdziemy w odpowiednim repozytorium PPA.

Czy gra jest warta świeczki? Poprawiony wygląd fontów w Javie oznacza ni mniej ni więcej jak właśnie poprawiony wygląd fontów, a co za tym idzie wygodniejszą pracę z takimi programami. A już na pewno odczują to wszyscy użytkownicy pracujący we wszelakich edytorach programistycznych.

Co należy zatem zrobić, aby uraczyć się ulepszoną stylistyką? Najpierw należy zainstalować samo Infinality dla systemu, a następnie poprawioną wersję OpenJDK, która będzie potrafiła z rzeczone Infinality skorzystać.

Infinality dla systemu

Użytkownicy Ubuntu 14.04/14.10, Minta 17.1 i pochodnych mogą skorzystać z odpowiedniego repozytorium zawierającego usprawnienia dla renderowania fontów:

sudo add-apt-repository ppa:no1wantdthisname/ppa
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install fontconfig-infinality

Użytkujący Manjaro lub Arch Linuksa wykorzystują paczkę z AUR fontconfig-infinality-ultimate:

yaourt -S fontconfig-infinality-ultimate

Pozostaje uruchomić skrypt konfiguracyjny (choć nie jest to wymagane), by ew. określić styl renderowania którego oczekujemy (Ubuntu, Infinality, WinXP, Win7, OS X i tak dalej):

sudo bash /etc/fonts/infinality/infctl.sh setstyle

I to wszystko co należy zrobić, by Infinality roztoczyło swój urok z ekranów naszych monitorów.

Infinality dla OpenJDK

Ten krok należy pominąć, jeżeli korzystamy z zamkniętej Javy od Oracle (i nie chcemy tego zmieniać). Z powodów o których wspomniałem wcześniej, OpenJDK pozostaje nieczułe na zmiany których dokonaliśmy powyżej. Dlatego musimy skorzystać z odpowiednio spreparowanej kompilacji, a która znajduje się w repozytorium (dla Ubuntu 14.04/14.10, Mint 17.1):

sudo add-apt-repository ppa:no1wantdthisname/openjdk-fontfix
sudo apt-get update
sudo apt-get install openjdk-7-jdk

W Manjaro i Arch Linuksie wykorzystujemy repozytorium AUR i paczkę z pożądanym JRE7 lub JRE8:

yaourt -S jre7-openjdk-headless-infinality
yaourt -S jre7-openjdk-infinality

A jak to wygląda w praktyce? Poniższe zrzuty należy otworzyć w nowych kartach (obraz nie zostanie przeskalowany):

Java: domyślna czcionka w edytorze
Java: czcionki poprawione renderem Infinality

Choć jakość fontów to rzecz gustu, trudno nie odnieść wrażenia, że z Infinality jest czytelniej i bardziej przyjemnie dla oka. Dlaczego dystrybucje nie wykorzystują domyślnie tego rozwiązania? Część łatek trafiła do głównego nurtu freetype2, jednak proces spowalniają niewolne rozwiązania.