Partager via


Glyphes et exécutions de Glyphe

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

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 sur un système pouvant définir 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 glyphe. Cela peut également être fait dans la direction opposée, un glyphe unique étant divisé en plusieurs glyphes, appelé décomposition de glyphe.

Glyphes alternatifs

Les polices peuvent fournir d’autres glyphes pour les caractères, tels que les glyphes 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 » à l’aide de glyphes alternatifs

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

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

Swashes et d’autres caractéristiques 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 à l’aide de la IDWriteTextLayout ::SetTypography et en passant la constante d’énumération DWRITE_FONT_FEATURE_TAG associée à la fonctionnalité souhaitée.

Exécutions de glyphe

Une exécution de glyphe représente un ensemble contigu de glyphes qui ont tous le même visage et la même taille de police, ainsi que le même effet de dessin client, le cas échéant. Les traits de soulignement et de frappe ne font pas partie de l’exécution du glyphe 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 Presentation Foundation (WPF), afin qu’il puisse y avoir plusieurs polices physiques par famille de polices. Un visage de police, tel que l’interface de 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 glyphe.

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

Métriques de glyphe

Les glyphes individuels ont des métriques associées. Vous pouvez obtenir les métriques pour tous les glyphes d’une exécution de glyphe à l’aide de la méthode IDWriteFontFace ::GetDesignGlyphMetrics. Cela retourne une structure DWRITE_GLYPH_METRICS qui a la largeur avancée, le roulement gauche et droit, le roulement du côté supérieur et inférieur, la hauteur et l’origine de la ligne de base verticale.

Le diagramme suivant montre différentes métriques de deux caractères de glyphe différents.

diagramme des métriques de deux glyphes différents

Dessin d’un Glyphe Run

Lors de l’implémentation d’un renderer de texte personnalisé, le rendu des glyphes est géré par le 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 le visage de police pour l’exécution complète du glyphe.

L’objet IDWriteFontFace fournit également la méthode GetGlyphRunOutline, qui calcule les contours du glyphe à l’aide d’un rappel de récepteur geometry 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é rubrique.