Függőleges szöveg
A Windows 8-tól kezdve DirectWrite számos új API-val rendelkezik, amelyek lehetővé teszik a függőleges szöveg használatát az alkalmazásokban.
Függőleges szöveg rajzolás
A Direct2D-vel függőleges szöveget rajzolhat a DrawTextLayout metódusokkal. Ha függőlegesen szeretné rajzolni a szöveget, adja át DWRITE_READING_DIRECTION_TOP_TO_BOTTOM az IDWriteTextFormat::SetReadingDirection metódusnak, és DWRITE_FLOW_DIRECTION_RIGHT_TO_LEFT az IDWriteTextFormatSetFlowDirection metódusnak. Ezután létrehozhat és rajzolhat egy függőleges IDWriteTextLayout objektumot.
Karakter tájolásának elemzése
Minden karakternek van egy előnyben részesített karakter-tájolása, vagy az irány, amelyet a karakternek bármilyen irányban el kell helyeznie. A hagyományos vízszintes elrendezésben például a latin és a kínai szöveg is függőlegesen orientált. Másrészt függőleges elrendezésben a kínai szöveg függőlegesen marad, a latin szöveg pedig 90 fokban forog. Ez a tájolásbeli különbség az alábbi példában látható.
A szöveg tájolásának meghatározásához implementálnia kell az IDWriteTextAnalysisSink1 és IDWriteTextAnalysisSource1 interfészeket. A forrás és a fogadó veszi a glyph fut, és lehetővé teszi, hogy ellenőrizze, hogy azok függőlegesen vagy nem.
A forrás és a fogadó implementálása után meghívja az AnalyzeVerticalGlyphOrientation metódust. A példaképben ez a függvény 3 futtatásból áll: "Angol", "中国" és "Angol".
Ugrás karakterekről karakterjelekre
Most, hogy tudja, hogy a futtatás függőleges karakterjeleket tartalmaz, hozzá kell férnie ezekhez a karakterjelekhez. Az eddigi példában 3 futtatás van: egy függőleges karakterjelekkel és kettő anélkül. A karakterekről a karakterjelekre való áttéréshez GetGlyphIndiceshívhatja meg. Ez a metódus a példában szereplő karakterek megfelelő karakterindexeit adja vissza. Mivel az AnalyzeVerticalGlyphOrientation metódus függőleges karakterjelekkel rendelkező futtatást ad vissza, GetVerticalGlyphVariantskell meghívnia, amely az aktuális karakterazonosítók helyett a függőlegesen orientált karakterjel-azonosítókat adja vissza.
Függőlegesen rajzolt szöveg
Végül el kell helyeznie és meg kell rajzolnia a szöveget. Mivel függőlegesen rajzolja a szöveget, további információkat kell beszereznie, hogy a latin szöveg helyesen legyen rajzolva. Ha az összes szöveget a központi alapkonfiguráció mentén rajzolja meg, úgy tűnik, hogy a latin szöveg a sor közepén lebeg. A szöveg helyes igazításához a központi és a római alapkonfigurációhoz is hozzá kell férnie. Használja az IDWriteTextAnalyzer1::GetBaseline metódust a megadott alaptervek numerikus értékeinek lekéréséhez. A római alapkonfigurációt kivonhatja a központi alapkonfigurációból a kettő közötti eltolás lekéréséhez.
Ezzel az információval megrajzolhatja a szöveget a képernyőn. Először hívja meg a GetGlyphOrientationTransform metódust az IDWriteTextAnalysisSink1 és IDWriteTextAnalysisSource1 objektumok eredményeivel.
Ha Direct2D- használ, a világátalakítást is be kell állítania a Direct2D renderelési célon a függőleges rendereléshez.
Végül hívja meg DrawGlyphRun háromszor, egyszer az egyes szövegblokkokon. A két angol nyelvű szövegblokkon a római és a központi alapkonfiguráció között kiszámított eltolást kell alkalmaznia.
Most az alkalmazásban lévő szöveg függőlegesen lesz rajzolva, a megfelelő tájolással.