Czcionki w AGE

1 06 2008

Dodanie obsługi czcionek TTF do AGE tak aby utrzymać wieloplatformowość małym kosztem wydawało się początkowo trudne. Jednak dzięki bibliotece FreeType2 i Google okazało się to znacznie prostsze niż myślałem.

W tej chwili AGE posiada możliwość wyświetlania tekstu z automatycznym dzieleniem na linie przy pomocy znaku ‘\n’ oraz potrafi obliczyć prostokąt, w którym podany tekst zostałby wyświetlony. Możliwe, że w przyszłości dodam funkcje wyświetlające tekst w danym obszarze z wyrównaniem lub podobne. Przy obecnej implementacji tego wszystkiego dodanie takich funkcji jest dość prostą rzeczą.

Całą zabawę z czcionkami TTF postanowiłem podjąć dlatego, że planuję dodać konsolę, a ciężko byłoby to uczynić bez wyświetlania tekstu, prawda? :)

Niestety po tym jak nauczyłem AGE wyświetlać tekst zdałem sobie sprawę, że trzeba mieć jakąś czcionkę aby wyświetlać tekst konsoli i musi to być czcionka, która bedzie dostępna niezależnie od systemu operacyjnego. Rozważałem instalowanie jakiejś czcionki wraz z biblioteką jednak ten pomysł niezbyt mi się podobał. Postanowiłem więc zrobić najbardziej bezczelną rzecz jaka przyszła mi do głowy – wrzuciłem czcionkę wprost do kodu jako tablicę bajtów. Będzie to niestety kilkadziesiąt kilobajtów więcej dla biblioteki, ale z drugiej strony będę miał pewność, że czcionka będzie zawsze dostępna.

Dzięki tym kilku prostym i czasem spartańskim zabiegom mogę wreszcie rozpocząć kodowanie obsługi konsoli dla AGE :)


Działania

Informacja

6 odpowiedzi

1 06 2008
kaszuba

Jeśli zależało ci na przenośności mogłeś użyć SDL_ttf. Jest wieloplatwormowe, a juz kiedyś pisałeś, że używasz SDLa.

1 06 2008
moriturius

SDLa używam tylko do stworzenia okna, obsługi myszy i klawiatury oraz odtwarzania dźwięku. Całą grafiką zajmuje się tylko i wyłącznie OpenGL ze względu na wydajność więc nie używam SDL_Surface a co za tym idzie nie mogę też użyć SDL_ttf.

2 06 2008
Zene

A nie można założyć, że na platformie windows zawsze jest dostępny font arial a na linuxie inny standardowy(nie znam się na linuxach)..

2 06 2008
moriturius

@Zene: jeśli chodzi o Windowsa to sprawa jest prosta. Linux jednak sprawia trochę więcej problemów ponieważ na różnych dystrybucjach potencjalnie mogą być zupełnie inne czcionki i nie wiem czy jest jakaś czcionka która występuje zawsze.
Z drugiej strony jeśli znalazłbym jakiś serwer fontów to w Linuxie możnaby ściągać czcionki z tego serwera.

Ostatecznie zastosowane przeze mnie rozwiązania ma wiele zalet i tylko jedną – mało znaczącą – wadę. Pozostałe sprawiają więcej problemu niż jest z nich pożytku :)

7 06 2008
Queight

Zamiast wrzucać czcionkę do kodu mogłeś chyba wrzucić po prostu ją jak każde inne dane? Obrazki, pliki konfiguracyjne i mapki też wrzucisz do kodu?

7 06 2008
moriturius

@Queight: AGE to nie gra – to biblioteka. Jedną standardową czcionkę po prostu potrzebuję, a takie rozwiązanie jest najlepsze z najprostszych.

Dodaj komentarz