Vertikaler Text
Ab Windows 8 verfügt DirectWrite- über eine Reihe neuer APIs, mit denen Sie vertikalen Text in Ihren Apps verwenden können.
Zeichnen von vertikalem Text
Sie können vertikalen Text mit Direct2D zeichnen, indem Sie die DrawTextLayout- Methoden verwenden. Um den Text vertikal zu zeichnen, übergeben Sie DWRITE_READING_DIRECTION_TOP_TO_BOTTOM an die IDWriteTextFormat::SetReadingDirection--Methode und DWRITE_FLOW_DIRECTION_RIGHT_TO_LEFT an die IDWriteTextFormatSetFlowDirection--Methode. Anschließend können Sie ein vertikales IDWriteTextLayout-Objekt erstellen und zeichnen.
Analysieren der Zeichenausrichtung
Jedes Zeichen hat eine bevorzugte Zeichenausrichtung oder die Richtung, in der das Zeichen in einem beliebigen direktionalen Layout ausgerichtet werden soll. In herkömmlichem horizontalen Layout werden z. B. sowohl der lateinische Text als auch der chinesische Text vertikal ausgerichtet. Auf der anderen Seite bleibt der chinesische Text in einem vertikalen Layout aufrecht, und der lateinische Text wird um 90 Grad gedreht. Dieser Unterschied bei der Ausrichtung wird hier im Beispiel gesehen.
Um die Ausrichtung des Texts zu bestimmen, müssen Sie die IDWriteTextAnalysisSink1 und IDWriteTextAnalysisSource1 Schnittstellen implementieren. Die Quelle und das Sinken nehmen die Glyphe läuft und lassen Sie überprüfen, ob sie vertikal ausgerichtet sind oder nicht.
Nachdem Sie die Quelle implementiert und sinken, rufen Sie die AnalyzeVerticalGlyphOrientation-Methode auf. In der Beispielgrafik gibt diese Funktion 3 Ausführung zurück: "Englisch", "中中" und "Englisch".
Wechseln von Zeichen zu Glyphen
Nachdem Sie nun wissen, dass die Ausführung vertikale Glyphen enthält, müssen Sie Zugriff auf diese Glyphen erhalten. Im Beispiel gibt es bisher 3 Läufe: eine mit vertikalen Glyphen und zwei ohne. Um von Zeichen zu Glyphen zu wechseln, rufen Sie GetGlyphIndicesauf. Diese Methode gibt die entsprechenden Glyphenindizes für die Zeichen im Beispiel zurück. Da die AnalyzeVerticalGlyphOrientation Methode eine Ausführung mit vertikalen Glyphen zurückgibt, müssen Sie GetVerticalGlyphVariantsaufrufen, wodurch die vertikal ausgerichteten Glyphen-IDs anstelle der aktuellen Glyphen-IDs zurückgegeben werden.
Vertikales Zeichnen von Text
Schließlich müssen Sie den Text anordnen und zeichnen. Da Sie den Text vertikal zeichnen, müssen Sie weitere Informationen abrufen, damit der lateinische Text richtig gezeichnet wird. Wenn Sie den gesamten Text entlang der zentralen Grundlinie zeichnen, wird der lateinische Text in der Mitte der Zeile angezeigt. Sie benötigen Zugriff auf die zentrale und die römische Basislinie, um den Text richtig auszurichten. Verwenden Sie die IDWriteTextAnalyzer1::GetBaseline Methode, um die numerischen Werte der angegebenen Basispläne abzurufen. Sie können den römischen Basisplan von der zentralen Basislinie subtrahieren, um den Offset zwischen den beiden zu erhalten.
Mit all diesen Informationen können Sie den Text auf dem Bildschirm zeichnen. Rufen Sie zunächst die GetGlyphOrientationTransform--Methode mit den Ergebnissen der IDWriteTextAnalysisSink1 und IDWriteTextAnalysisSource1-Objekte auf.
Wenn Sie Direct2D- verwenden, müssen Sie auch die Welttransformation für das Direct2D-Renderziel für vertikales Rendering festlegen.
Rufen Sie schließlich DrawGlyphRun dreimal auf, einmal auf jedem Textblock. Auf den beiden Textblöcken, die sich in Englisch befinden, müssen Sie den Offset anwenden, den wir zwischen den römischen und zentralen Grundlinien berechnet haben.
Nun wird der Text in Ihrer App vertikal mit der richtigen Glyphenausrichtung gezeichnet.