Novinky ve WPF 4 – TextRenderingMode a ClearType hint
Práce s textem je jednou z novinek ve WPF 4.0 a tak nebude na škodu se mu věnovat maličko více. Vedle volby TextFormattingMode, kterou jsem představil v minulém článku existují ještě další volby, které nám dovolují pohrát si s výstupem textu na zobrazovací zařízení uživatele.
Mezi tyto volby patří attached vlasnost TextOptions.TextRenderingMode, která zprostředkovává nastavení antialising algoritmu použitého ve WPF pro rendering textu. Oproti TextFormattingMode má TextRenderingMode čtyři nastavení a tak se pojďme podívat, co která nastavuje:
- Auto – v případě, že ponecháme nastavenu tuto volbu, tak se použije nastavení ClearType podle nastavení v systému. Což znamená, že většinou se použije ClearType, pokud jej explicitně v počítači nevypneme.
- Aliased – nebude použit žádný antialiasing pro vykreslení textu
- Grayscale – bude použit odstín šedi při antialisingu
- ClearType – v tomto případě bude použit ClearType aliasing pro vykreslení textu
Použití TextRenderingMode
Je doporučené ponechávat toto nastavení v jeho výchozí podobě, kdy v době LCD monitorů vede toto vykreslování k lepším výsledků, samozřejmě hodně záleží na subjektivním vjemu a tak opět doporučím vyzkoušet na konkrétním příkladu. To samé bude platit pro použití s CRT monitory nebo v případě použití schématu s vysokým kontrastem.
Co se pak týká specifických písem, jako jsou třeba asijská písma, u nás spíše nazývaná rozsypaný čaj, tak zde se více osvědčuje použít embedded bitmap než použití ClearType fontů a vykreslování.
ClearType hint
Tím se dostáváme k tomu, kdy a jak je vlastně ClearType použit. Tento algoritmus je postaven na tom, že je znám nejen text samotný, ale také jeho barva a barva pozadí, na kterém se daný text bude vyskytovat. Podle těchto ukazatelů se pak vytváří finální text. Rozhodování a napočítání, jaká je skutečná barva pozadí však nemusí být úplně snadné a celý proces výpočtu tak může být zdlouhavý. Jedná se především o případy, kdy text zobrazujeme v nějakém kontejneru, který má poloprůhlednou barvu/transparentnost a tak se musí zjišťovat i barvy dalších prvků. Toto dopočítávání může být tak složité, že WPF zakáže vykreslování pomocí ClearType na elementu, který by zapříčinil znížení výkonnosti.
Samozřejmě toto zakázání použití ClearType má svá pravidla, která jsou definována a mezi něž můžeme počítat případy, kdy text umístíme na texturu, která může být transparentní. Což může být například při použití Effects, OpacityMask, VisualBrush, DrawingBrush nebo v případěch kdy na sebe vrstvíme jednotlivá okna a při tom používám Opacity.
Ten výčet není malý a tak se může stát, že WPF zakáže použití ClearType i tam, kde bychom očekávali, že nezapříčiní takové problémy. A právě proto můžeme nastavit příznak ClearTypeHint pomocí RenderOptions.ClearTypeHint a povolit použití ClearType algoritmu.
Toto povolení pro použití ClearType však není platné na všechny potomky, ale opět jen do té doby, než se narazí na problémový případ. Je tedy hodně na samotném designeru výsledného vzhledu aby rozhodl, kde je ještě vhodné použít ClearType a kde již bude antialisované písmo příliš slité do svého podkladu a nebude vypadat hezky.
ClearTypeHint tak může nabývat dvou hodnot a to:
- Auto – je výchozí hodnotou a zajišťuje standardní chování, tak jak je nastaveno ve WPF, to tak nedostává žádné instrukce navíc
- Enabled – znovupovolí zakázané použití ClearType na daném elementu, případně na všech jeho potomcích, pokud si to tak říkajíc zaslouží.
Závěrem
Tímto článkem jsem se přiblížil ke konci novinek, které nám přichystal nový text stack použitý ve WPF 4. Já doufám, že vám právě použití těchto novinek ušetří spoustu nepříjemných chvilek, které si vymyslí uživatelé, aby dosáhli lepšího a čitelnějšího písma ve vašich aplikacích.
Komentáře