Novinky ve WPF 4 – Layout rounding
Pokračování představování novinek ve WPF 4 jsem si nechal na léto, kdy jsem doufal, že tolik novinek nebude a přeci jen bude volněji. A tak se do konce prázdnin podíváme na všechny novinky, které pomalu přestávají být novinkami a dostávají se pod kůži každého WPF vývojáře a designera.
V tomto příspěvku se chci věnovat novince, která by určitě měla zlepšit kladné vnímání WPF i u koncových uživatelů, neboť nabízí přesné vykreslování použitých prvků a tím je Layout rounding.
Layout rounding
Layoutovací engine ve WPF je založen na vykreslování pomocí subpixelů, což znamená, že veškeré vykreslování je – nebo může být – realizováno nikoliv na celé pixely, ale může zasahovat pouze do části pixelu. To však vede k tomu, že dochází k překrytí a zdání, že vše je lehce rozmazané nebo neodpovídá skutečnosti.
Asi markantně je to vidět na příkladu, kdy chceme vykreslit třeba čáru od pozice 4.5 o tloušťce 1. Tím, že se dostáváme na polovinu pixelu, tak vlastně říkáme zobrazovacímu zařízení, aby rozsvítil čtvrtý a pátý bod a to z poloviny. Takže ve výsledku jsou rozsvíceny dva pixely a původně zamýšlená čára má rázem jinou podobu.
Podívejte se na výsledek této části kódu:
<Rectangle Margin="4.5,4.5,4.5,4.5" StrokeThickness="1" Stroke="Black" Height="30" Width="30" />
a výsledek, který jsem zvětšil 6x:
Na obrázku vidíte, že horní a spodní čára je vykreslena správně, kdežto obě boční čáry přesahují přes dva pixely a zároveň jsou vykresleny světleji.
UseLayoutRounding
Vývojáři v Silverlightu se tímto nešvarem již druhou verzi nemusí trápit a vývojáři a designeři WPF již také ne, neboť je k dispozici nově vlastnost UseLayoutRounding, která je sice ve výchozím stavu nastavena na hodnotu false, ale jakmile ji nastavíme hodnotu true, dostaví se kýžený výsledek a dojde k zarovnání na celé pixely. Výsledný obrázek s nastavenou vlastností UseLayoutRouding="True" je pak následující:
Vše je tak zarovnané a ostré.
Ještě je třeba zmínit, že v okamžiku, kdy nastavíme tuto vlastnost na nadřazeném prvku, je toto chování propagováno i na potomky.
Závěrem
Někdo by si v této chvíli mohl říci, proč toto nastavení není implementováno na všechna vykreslování, vždyť by vše bylo ostré. Ale nezapomínejte, že ne vždy je toto účelem a jsou situace, při kterých lépe vypadá vykreslení pomocí anti-aliasingu. Své opodstatnění však toto nastavení má, jak je vidět na přiložených ukázkách.
Komentáře