@MDW,
post #35
Można powiedzieć, że TTE2 to udoskonalona wersja TTEngine. API nie jest kompatybilne, dlatego nowy projekt, a nie TTEngine v8.0. TTE2 nie została napisana specjalnie dla KHTML, ale ma dodane rzeczy, które są przez KHTML wymagane. A jakie są różnice. Po pierwsze API TTE2 nie trzyma się już tak kurczowo RastPortu (to zaszłość w TTE z czasu, gdy miała być patchem na funkcje tekstowe z Graphics). Teraz nie trzeba mieć RastPortu żeby np. poznać rozmiary tekstu, jest on używany tylko przez TT2_Text() a więc funkcję renderującą. Kolejna sprawa to modułowość. TTE2 jest napisana w C++ i wykorzystuje znaną z Reggae koncepcję przetwarzania potokowego. Wygląda to mniej więcej tak, że rasteryzator produkuje bitmapę tekstu, nad którą mogą kolejno pracować różne moduły, na koniec obrobiona bitmapa kierowana jest do wybranego renderera (albo zwracana aplikacji w przypadku wywołania TT2_GetPixmap()). Oprócz renderera mono i znanego z TTE renderera AA z korekcją gamma będzie też regulowany przez użytkownika subpixel. Będą też backendy bezpośrednio renderujące na ekranie BGRA32 poprzez DoHookClipRects() (to już eksperymentalnie było w TTE 7.2). Będzie też dwupoziomowy cache - wektorki i bitmapy. Już jest poddawanie tekstu transformacjom afinicznym (pochylanie, obroty, skalowanie, lustro itp.). Z ciekawostek - na potrzeby KHTML (ale z publicznym API) jest callback hook pozwalający ingerować w rozmieszczenie liter przed renderingiem, np. robić druk rozstrzelony, albo zmieniać kerning. Hook jest tak wstawiony, że uwzględniają go również funkcje do określania rozmiarów tekstu. Z cache outilne'ów będzie zintegrowana funkcja glyph fallback - jeżeli znak o danym unikodzie nie istnieje w czcionce X, użytkownik będzie mógł w ustawieniach zdefiniować czcionkę Y, zawierającą ten znak i zostanie on automatycznie użyty. No i może jeszcze developerzy mi podsuną jakieś ciekawe pomysły... Próbki tego, co TTE2 potrafi już teraz są
tu i
tu, oprócz tego oczywiście TTE2 demonstruje większość nowych shotów KHTML. Do TTE2 napisałem też publiczną klasę MUI - TTE2FontSelect.mcc, czyli w pełni funkcjonalny font requester, klasa zwraca obiekt MUIC_Group, więc można go sobie wsadzić np. w popupa. Shocik requestera jest
tu.