Partager via


Utilisation de la police de secours

Notes

Dans cette rubrique, toutes les remarques sur ScriptShape s’appliquent également à ScriptShapeOpenType.

 

Votre application doit utiliser la police de secours pendant l’affichage du texte si certains caractères d’une chaîne ne sont pas pris en charge dans la police ou si l’application utilise un script complexe non pris en charge par la police. L’exigence de secours de police est détectée pendant le processus de disposition du texte, lorsque l’application appelle la fonction ScriptShape . Pour plus d’informations sur l’affichage du texte, consultez Affichage de texte avec uniscribe.

Déterminer la nécessité d’une police de secours pour les caractères non pris en charge

Si certains caractères d’une chaîne ne sont pas pris en charge dans une police demandée, un appel d’application à ScriptShape réussit. Toutefois, l’application doit analyser la mémoire tampon de sortie du glyphe pour détecter la présence de glyphes manquants. L’index de glyphe du glyphe manquant peut être déterminé pour une police spécifique en appelant ScriptGetFontProperties. Si un glyphe particulier n’est pas disponible, l’application doit revenir à une autre police pour un glyphe ou afficher un symbole graphique indiquant qu’aucun glyphe n’est disponible.

Déterminer la nécessité d’une police de secours pour les scripts complexes non pris en charge

La police qu’une application préfère pour l’affichage peut ne pas prendre en charge un script complexe requis par le texte. Dans ce cas, l’appel de l’application à ScriptShape échoue avec le code d’erreur E_SCRIPT_NOT_IN_FONT.

Affecter une police de secours

Une fois qu’elle a déterminé que la police de secours est requise, l’application doit affecter une police de secours. L’application peut essayer les techniques suivantes :

  • Appelez ScriptShape pour chaque police d’une liste de polices jusqu’à ce qu’un appel ait un retour acceptable.
  • Appelez ScriptShape avec chaque police d’une liste jusqu’à ce qu’aucune police ne réussisse. Si le code d’erreur est toujours E_SCRIPT_NOT_IN_FONT, un script complexe n’est pas pris en charge par les polices. Affichez un symbole graphique qui indique qu’aucun glyphe n’est disponible, ou spécifiez à nouveau le script comme non défini (aucun traitement de script) et recommencez. Pour définir le script comme non défini, définissez le membre eScript de la structure SCRIPT_ANALYSIS sur SCRIPT_UNDEFINED.
  • Appelez ScriptShape avec chaque police d’une liste jusqu’à ce qu’aucune police ne réussisse. Si le code d’erreur indique que certains caractères sont mappés à des glyphes manquants, divisez la chaîne en plages plus petites. Différentes polices peuvent être attribuées à des sous-ensembles afin que davantage de caractères puissent être rendus.

Générer des informations sur le glyphe

Une fois que l’application a affecté une police qui réussit les appels à ScriptShape, elle peut effectuer des appels à ScriptPlace pour générer des informations sur la largeur avancée du glyphe et le décalage bidimensionnel à partir de la sortie de ScriptShape. La police doit réussir ces appels. Un échec de police dans un appel à ScriptPlace après la réussite d’un appel ScriptShape indique une police rompue.

Utilisation d’Uniscribe