Exécutions de glyphes et de glyphes

Les exécutions de glyphes et de glyphes sont disponibles au niveau de la couche de fonctionnalités la plus faible de l’API DirectWrite, la couche de rendu des glyphes.

Glyphes

Un glyphe est une représentation physique d’un caractère dans une police donnée. Les caractères peuvent avoir de nombreux glyphes, chaque police d’un système définissant potentiellement un glyphe différent pour ce caractère.

Deux glyphes ou plus peuvent également être combinés en un seul glyphe, ce processus est appelé composition de glyphes. Cela peut également être effectué dans la direction opposée, un glyphe unique étant divisé en plusieurs glyphes, appelés décomposition de glyphes.

Glyphes alternatifs

Les polices peuvent fournir d’autres glyphes pour les caractères, tels que les glyphes de remplacement stylistiques pour la police Pericles OpenType, comme illustré dans la capture d’écran suivante. Les caractères « A », « E » et « O » sont rendus avec des glyphes alternatifs stylistiques.

capture d’écran de la « mythologie verte ancienne », avec les « a », « e » et « o » utilisant des glyphes alternatifs

Un autre exemple de glyphes alternatifs est les glyphes swash. La capture d’écran suivante montre des glyphes standard et swash pour la police Pescadero.

capture d’écran des lettres « a » à « n » dans les glyphes standard et swash

Les swashes et d’autres fonctionnalités typographiques, y compris des glyphes alternatifs plus élaborés, sont disponibles via OpenType. Les fonctionnalités typographiques OpenType peuvent être appliquées à une plage de texte en utilisant IDWriteTextLayout::SetTypography et en transmettant la constante d’énumération DWRITE_FONT_FEATURE_TAG associée à la fonctionnalité souhaitée.

Exécutions de glyphes

Une exécution de glyphes représente un ensemble contigu de glyphes qui ont tous la même face et la même taille de police, ainsi que le même effet de dessin client, le cas échéant. Le soulignement et le barré ne font pas partie de l’exécution de glyphes pour la plage de texte à laquelle ils sont appliqués et sont dessinés ultérieurement. Les objets inline, tels que les images, sont également dessinés séparément, car ils ne font pas partie d’une police.

The IDWriteFontFace Interface

DirectWrite utilise le même système pour la classification des polices que Windows Pesentation Foundation (WPF), de sorte qu’il peut y avoir plusieurs polices physiques pour chaque famille de polices. Une police, telle que l’interface IDWriteFontFace dans DirectWrite, représente une police physique, avec un poids, une inclinaison et une étirement spécifiques. Il contient le type de visage de police, les références de fichier appropriées, les données d’identification des visages et diverses données de police telles que les métriques, les noms et les contours de glyphes.

L’IDWriteFontFace peut être créé directement à partir d’un nom de police ou obtenu à partir d’une collection de polices.

Métriques de glyphe

Des métriques sont associées à des glyphes individuels. Vous pouvez obtenir les métriques de tous les glyphes d’un glyphe exécuté à l’aide de la méthode IDWriteFontFace::GetDesignGlyphMetrics . Cela retourne une structure DWRITE_GLYPH_METRICS qui a la largeur avancée, les roulements des côtés gauche et droit, les roulements supérieurs et inférieurs, la hauteur et l’origine verticale de la ligne de base.

Le diagramme suivant montre différentes métriques de deux glyphes différents.

diagramme des métriques de deux glyphes différents

Dessin d’une exécution de glyphe

Lors de l’implémentation d’un convertisseur de texte personnalisé, le rendu des glyphes est géré par IDWriteTextRenderer::D rawGlyphRun, méthode de rappel que vous implémentez dans le cadre d’une classe dérivée de IDWriteTextRenderer. La structure DWRITE_GLYPH_RUN passée à DrawGlyphRun contient un objet IDWriteFontFace , nommé fontFace, qui représente la face de police pour l’exécution complète du glyphe.

L’objet IDWriteFontFace fournit également la méthode GetGlyphRunOutline , qui calcule les contours de glyphe à l’aide d’un rappel de récepteur géométrique spécifié, tel que ID2D1SimplifiedGeometrySink lors du rendu avec Direct2D.

Pour plus d’informations, consultez la rubrique Comment implémenter un renderer de texte personnalisé .