Texte vertical
à partir de la Windows 8, DirectWrite a un certain nombre de nouvelles api qui vous permettent d’utiliser du texte vertical dans vos applications.
Dessiner du texte vertical
Vous pouvez dessiner du texte vertical avec Direct2D à l’aide des méthodes DrawTextLayout . Pour dessiner le texte verticalement, transmettez le sens de lecture DWRITE de _ _ _ haut _ en _ bas à la méthode IDWriteTextFormat :: SetReadingDirection et le sens du déroulement de l' DWRITE de droite à _ _ _ _ _ gauche à la méthode IDWriteTextFormatSetFlowDirection . Vous pouvez ensuite créer et dessiner un objet IDWriteTextLayout vertical.
Analyser l’orientation des caractères
Chaque caractère a une orientation de caractère par défaut, ou la direction dans laquelle le caractère doit être orienté dans n’importe quelle disposition directionnelle. Par exemple, dans une disposition horizontale traditionnelle, le texte latin et le texte chinois sont orientés verticalement. D’un autre côté, dans une disposition verticale, le texte chinois reste debout et le texte latin est pivoté de 90 degrés. Cette différence d’orientation est visible dans l’exemple ici.

Pour déterminer l’orientation du texte dont vous disposez, vous devez implémenter les interfaces IDWriteTextAnalysisSink1 et IDWriteTextAnalysisSource1 . La source et le récepteur prennent le glyphe s’exécute et vous permettent de vérifier s’ils sont orientés verticalement ou non.
Après avoir implémenté votre source et votre récepteur, vous appelez la méthode AnalyzeVerticalGlyphOrientation . Dans l’exemple d’image, cette fonction retourne 3 exécutions : « English », « 中国 » et « English ».
Passage de caractères aux glyphes
Maintenant que vous savez que l’exécution contient des glyphes verticaux, vous devez avoir accès à ces glyphes. Dans l’exemple jusqu’à présent, il y a 3 exécutions : une avec des glyphes verticaux et deux sans. Pour passer des caractères aux glyphes, vous devez appeler GetGlyphIndices. Cette méthode retourne les index de glyphe correspondants pour les caractères de l’exemple. Étant donné que la méthode AnalyzeVerticalGlyphOrientation retourne une exécution avec des glyphes verticaux, vous devez appeler GetVerticalGlyphVariants, qui retourne les ID de glyphes orientés verticalement à la place des ID de glyphes actuels.
Dessiner du texte verticalement
Enfin, vous devez disposer et dessiner le texte. Étant donné que vous dessinez le texte verticalement, vous devez obtenir davantage d’informations pour que le texte latin soit dessiné correctement. Si vous dessinez tout le texte le long de la ligne de base centrale, le texte latin apparaît comme flottant au milieu de la ligne. Vous devez avoir accès à la ligne de base centrale et romaine pour aligner correctement le texte. Utilisez la méthode IDWriteTextAnalyzer1 :: GetBaseline pour récupérer les valeurs numériques des lignes de base que vous spécifiez. Vous pouvez soustraire la ligne de base romaine de la ligne de base centrale pour récupérer le décalage entre les deux.
Avec toutes ces informations, vous pouvez dessiner le texte à l’écran. Tout d’abord, appelez la méthode GetGlyphOrientationTransform avec les résultats des objets IDWriteTextAnalysisSink1 et IDWriteTextAnalysisSource1 .
Si vous utilisez Direct2D , vous devez également définir la transformation universelle sur la cible de rendu Direct2D pour le rendu vertical.
Enfin, appelez DrawGlyphRun trois fois, une fois sur chaque bloc de texte. Dans les deux blocs de texte en anglais, vous devez appliquer le décalage que nous avons calculé entre les lignes de base romanes et centrales.
À présent, le texte de votre application est dessiné verticalement, avec l’orientation de glyphe correcte.