Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Počínaje Windows 8 má DirectWrite řadu nových rozhraní API, která umožňují používat svislý text v aplikacích.
Kreslení svislého textu
Svislý text s Direct2D můžete nakreslit pomocí metod DrawTextLayout. Pokud chcete text nakreslit svisle, předejte DWRITE_READING_DIRECTION_TOP_TO_BOTTOMIDWriteTextFormat::SetReadingDirection metoda a DWRITE_FLOW_DIRECTION_RIGHT_TO_LEFT do metody IDWriteTextFormatSetFlowDirection. Pak můžete vytvořit a nakreslit svislý IDWriteTextLayout objektu.
Analýza orientace znaků
Každý znak má upřednostňovanou orientaci znaků nebo směr, který by měl být orientovaný v libovolném směrovém rozložení. Například v tradičním vodorovném rozložení jsou text latinky i čínského textu orientovány svisle. Na druhou stranu ve svislém rozložení zůstane čínský text vzpřímený a latinka se otočí o 90 stupňů. Tento rozdíl v orientaci je vidět v tomto příkladu.
Pokud chcete určit orientaci textu, který máte, musíte implementovat rozhraní IDWriteTextAnalysisSink1 a IDWriteTextAnalysisSource1 rozhraní. Zdroj a jímka se spouští v glyfu a umožňuje zkontrolovat, jestli jsou orientované svisle nebo ne.
Po implementaci zdroje a jímky zavoláte metodu AnalyzeVerticalGlyphOrientation. V ukázkovém obrázku vrátí tato funkce 3 spuštění: "English", "中国" a "English" (Angličtina).
Přechod z znaků na glyfy
Teď, když víte, že spuštění obsahuje svislé glyfy, potřebujete získat přístup k těmto glyfům. V tomto příkladu jsou zatím 3 spuštění: jedno se svislými glyfy a dvěma bez. Chcete-li přejít z znaků na glyfy, zavoláte GetGlyphIndices. Tato metoda vrátí odpovídající indexy glyfů pro znaky v příkladu. Vzhledem k tomu, AnalyzeVerticalGlyphOrientation metoda vrací spuštění s vertikálními glyfy, musíte volat GetVerticalGlyphVariants, která vrací svisle orientované ID glyf místo aktuální id glyfů.
Svislé kreslení textu
Nakonec potřebujete rozložit a nakreslit text. Vzhledem k tomu, že text kreslíte svisle, potřebujete získat další informace, aby byl text latinky nakreslený správně. Pokud nakreslíte veškerý text podél centrálního účaří, zobrazí se text latinky plovoucí uprostřed řádku. Abyste správně zarovnáli text, potřebujete přístup k centrálnímu i římskému směrnému plánu. Pomocí metody IDWriteTextAnalyzer1::GetBaseline získejte číselné hodnoty zadaných směrných plánů. Římské směrné plány můžete odečíst od centrálního směrného plánu, abyste získali posun mezi těmito dvěma směrnými plány.
Pomocí všech těchto informací můžete nakreslit text na obrazovce. Nejprve zavolejte metodu GetGlyphOrientationTransform s výsledky z IDWriteTextAnalysisSink1 a IDWriteTextAnalysisSource1 objekty.
Pokud používáte Direct2D musíte také nastavit světovou transformaci cíle vykreslování Direct2D pro vertikální vykreslování.
Nakonec zavolejte DrawGlyphRun třikrát jednou na každém bloku textu. Na dvou blocích textu, které jsou v angličtině, musíte použít posun, který jsme vypočítali mezi římskou a centrální směrnou hodnotou.
Text v aplikaci se teď nakreslí svisle se správnou orientací glyfů.