Justification, crénage et espacement

À compter de Windows 8, DirectWrite fournit un certain nombre de fonctionnalités qui vous permettent de contrôler les fonctionnalités typographiques, de disposition et d’espacement de base, telles que l’espacement des caractères, le crénage des paires et la justification.

Espacement des caractères

L’espacement des caractères, également appelé « suivi », est l’espacement entre les caractères d’une série de texte.

Voici un exemple de suivi. La première ligne n’applique aucun suivi au texte. La deuxième ligne augmente l’espacement des caractères, et la troisième ligne diminue l’espacement des caractères.

trois exemples du même texte sans suivi, plus d’espacement et moins d’espacement.

À compter de Windows 8, DirectWrite ajoute ces méthodes ici pour contrôler l’espacement des caractères dans votre texte.

Si vous utilisez la disposition DirectWrite, vous pouvez utiliser les méthodes IDWriteTextLayout1::GetCharacterSpacing et IDWriteTextLayout1::SetCharacterSpacing à cet effet.

Utilisez la méthode GetCharacterSpacing pour déterminer l’espacement des caractères actuel et retourne le caractère actuel, l’espacement avant et après le caractère, la largeur minimale avancée et une structure DWRITE_TEXT_RANGE qui contient des informations sur la position de départ et la longueur du texte restant.

Utilisez setCharacterSpacing sur une interface DWriteTextLayout1 pour appliquer votre propre espacement de caractères au texte de la disposition. La méthode SetCharacterSpacing prend la quantité d’espace souhaitée avant et après le caractère, l’avance minimale autorisée et un DWRITE_TEXT_RANGE qui définit la plage pour appliquer l’espacement.

Si vous utilisez une disposition personnalisée, DirectWrite prend en charge la définition de l’espacement des caractères avec IDWriteTextAnalyzer1::ApplyCharacterSpacing. Utilisez cette méthode si vous avez besoin d’une disposition de texte personnalisée pour avoir un contrôle avancé sur votre disposition. Cette méthode vous permet de fournir ApplyCharacterSpacing avec l’espacement de début et de fin, la largeur avancée minimale, la longueur de la carte du cluster, le nombre de glyphes, le mappage des plages de caractères aux glyphes et la largeur avancée de chaque glyphe si vous utilisez une disposition personnalisée. La méthode retourne les avances de glyphes modifiées et une énumération DWRITE_GLYPH_OFFSET avec les nouveaux décalages sur l’origine de chaque glyphe.

Crénage

Le crénage est l’ajustement contextuel de l’espacement entre des paires ou des triplets de lettres. Un espacement spécifique entre les jeux de caractères peut améliorer la lisibilité et améliorer l’apparence du texte. La différence importante entre le crénage et l’espacement des caractères est le fait que l’espacement des lettres est indépendant du texte qu’il espace, tandis que le crénage est utilisé dans certaines situations entre certaines paires de caractères comme défini dans la police.

L’image qu’elle est un exemple de crénage. Le mot AVATAR sur la ligne supérieure est kerned afin de rendre le mot plus naturel. Comme vous pouvez le voir dans les zones rouges autour des caractères, il y a plus d’espacement appliqué entre les quatre premières lettres, tandis que le R à la fin a plus d’espace devant lui. Le texte d’origine sans crénage est sur la deuxième ligne. Le crénage dans cet exemple rend le mot plus lisible et plus naturel.

exemple du même mot avec et sans crénage appliqué.

Le caractère avance entre les paires de caractères que les kerns de police sont stockés dans la table de kern et DirectWrite analyse cette table et vous retourne les informations via les API de crénage.

Si vous souhaitez savoir si une police prend en charge le crénage des paires, vous pouvez utiliser la méthode IDWriteFontFace1::HasKerningPairs . Cette méthode retourne une valeur bool de 1 si la police prend en charge les paires de crénage.

IdWriteFontFace1 a également une méthode qui vous permet d’accéder aux ajustements de paire de crénage pour les index de glyphe. GetKerningPairAdjustments vous permet d’entrer un tableau d’index de glyphes et DirectWrite retourne un tableau de réglages avancés des glyphes. Si une police ne prend pas en charge la table de kern, la méthode retourne des zéros pour les ajustements avancés du glyphe.

Si vous utilisez la disposition DirectWrite, il existe deux méthodes sur l’interface IDWriteTextLayout1 qui vous permettent de définir le crénage des paires et d’en savoir plus sur le crénage des paires dans la disposition. La méthode SetPairKerning accepte une représentation booléenne indiquant si vous souhaitez activer ou non le crénage des paires et une DWRITE_TEXT_RANGE qui définit la plage de texte à appliquer. Si vous souhaitez savoir si le crénage des paires est activé ou non sur une plage de texte, vous pouvez utiliser la méthode GetPairKerning , qui prend la position actuelle et retourne un bool correspondant à l’activation ou non du crénage de paires et à la plage de texte à laquelle le paramètre de crénage s’applique.

Justification

La justification est le processus d’alignement du texte afin qu’il remplisse tout l’espace d’une colonne en augmentant les avances entre les caractères ou les clusters de glyphes ou en ajoutant des caractères de justification pour obtenir le même effet. En général, cela s’effectue en déterminant où l’espace doit être ajouté à une ligne de texte et en insérant des caractères d’espacement dans ces occasions de rupture. Ces éléments d’espacement peuvent également différer, dans les écritures latines, le texte est justifié en augmentant les largeurs avancées entre les éléments, tandis qu’en arabe, le texte est justifié avec une kashida. Voici un exemple d’écriture arabe et latine à la fois justifiée et non justifiée.

un exemple d’écriture arabe et latine à la fois justifiée et non justifiée.

À compter de Windows 8, DirectWrite dispose d’un certain nombre de méthodes qui vous permettent de justifier du texte dans vos applications.

Il existe une valeur supplémentaire dans l’énumération DWRITE_TEXT_ALIGNMENT . Vous pouvez utiliser la méthode SetTextAlignment et passer la constante DWRITE_TEXT_ALIGNMENT_JUSTIFIED et DirectWrite justifie le texte et insère le caractère de justification approprié pour le script.

Si vous utilisez une disposition personnalisée, plusieurs méthodes sont disponibles pour vous permettre de tirer parti de la justification. DirectWrite a trois méthodes sur l’interface IDWriteTextAnalyzer1 que vous pouvez utiliser pour ajouter une justification à une disposition personnalisée.

La première méthode est GetJustificationOpportunities, qui prend le texte que vous souhaitez justifier et retourne une structure DWRITE_JUSTIFICATION_OPPORTUNITY qui indique où les caractères de justification peuvent être ajoutés pour justifier le texte.

La deuxième fonction est JustifyGlyphAdvances, qui justifie un tableau d’avances de glyphes afin qu’ils s’adaptent à la largeur de ligne. Cette méthode prend la structure DWRITE_JUSTIFICATION_OPPORTUNITY générée par GetJustificationOpportunities , le glyphe avance et les décalages de glyphe. Il génère ensuite les avancées de glyphes justifiées et une énumération DWRITE_GLYPH_OFFSET qui contient les décalages de glyphes justifiés.

La troisième fonction est GetJustifiedGlyphes, qui remplit les nouveaux glyphes pour les scripts complexes où la justification a augmenté les avancées pour les glyphes. GetJustifiedGlyphes doit être appelé uniquement si le script a un caractère de justification spécifique tel que retourné par GetScriptProperties. Cette méthode prend des informations sur la police, la longueur du texte, la taille des glyphes, le script du texte, le nombre de glyphes, la carte de cluster, les avances/décalages de glyphes d’origine, les avances/décalages de glyphes justifiés et les propriétés de glyphe. La méthode retourne le nombre réel de glyphes, la carte de cluster mise à jour, les index de glyphes mis à jour avec des glyphes de justification insérés, des décalages de glyphes mis à jour et des avances de glyphes mises à jour.