Fonctions avancées d’affichage de texte

Flash Player 9 et les versions ultérieures, Adobe AIR 1.0 et les versions ultérieures

Le package flash.text d’ActionScript 3.0 offre plusieurs classes qui permettent de contrôler les propriétés du texte affiché, notamment les polices intégrées, les paramètres d’anticrènelage, le canal alpha et autres paramètres spécifiques. Le Guide de référence ActionScript 3.0 pour Flash Professional fournit des descriptions détaillées de ces classes et de leurs propriétés, notamment des classes CSMSettings, Font et TextRenderer.

Utilisation de polices incorporées

Si vous spécifiez une police précise pour un objet TextField de votre application, Flash Player ou AIR recherche une police résidente du même nom sur l’ordinateur de l’utilisateur. Si cette police n’est pas chargée sur cet ordinateur, ou s’il existe une police de ce nom mais dans une version légèrement différente, le texte peut apparaître très différent de ce que vous aviez prévu. Par défaut, le texte s’affiche dans la police Times Roman.

Pour que l’utilisateur voie exactement la police voulue, vous pouvez incorporer cette police dans le fichier SWF de votre application. Les polices intégrées présentent de nombreux avantages :

  • Les caractères des polices incorporées sont anticrènelés, ce qui les rend plus agréables à lire, en particulier pour les grandes tailles de texte.

  • Il est possible de faire pivoter les polices incorporées.

  • Il est possible de rendre transparent ou semi-transparent le texte des polices incorporées.

  • Il est possible d’utiliser le style CSS kerning (crénage) avec les polices incorporées.

Le principal inconvénient des polices incorporées est l’augmentation de la taille du fichier de l’application.

La méthode exacte à utiliser pour intégrer un fichier de police dans le fichier SWF de l’application varie selon l’environnement de développement.

Une fois la police intégrée, il est possible de faire en sorte que l’objet TextField utilise la police correcte :

  • Mettez la propriété embedFonts de l’objet TextField sur true.

  • Créez un objet TextFormat, donnez à sa propriété fontFamily le nom de la police incorporée, et appliquez l’objet TextFormat au TextField. Dans le cas d’une police incorporée, la propriété fontFamily ne doit contenir qu’un seul nom. Elle ne peut pas utiliser une liste de polices séparées par des virgules.

  • Si vous utilisez des styles CSS pour les polices d’objets TextFields, donnez à la propriété CSS font-family le nom de la police incorporée. Si vous voulez utiliser une police incorporée, la propriété font-family ne doit contenir qu’un seul nom, et non pas une liste de noms.

Intégration d’une police dans Flash

Flash Professional vous permet d’intégrer pratiquement toutes les polices installées sur votre système, notamment les polices TrueType et les polices Postscript Type 1.

Il existe plusieurs façons d’intégrer des polices dans une application. Vous pouvez par exemple :

  • définir la police et les propriétés de style d’un objet TextField sur la Scène, puis en cocher la case Incorporer les polices ;

  • créer et référencer un symbole de police ;

  • créer et utiliser une bibliothèque d’exécution partagée contenant les symboles de la police intégrée.

Pour plus d’informations sur l’intégration de polices dans les applications, voir « Polices intégrées pour champs de texte dynamique ou de saisie » dans Utilisation de Flash.

Intégration d’une police dans Flex

Il existe plusieurs façons d’intégrer des polices dans une application Flex. Vous pouvez par exemple :

  • utiliser la balise de métadonnées [Embed] dans un script ;

  • utiliser la déclaration de style @font-face ;

  • définir la classe de la police et l’intégrer par le biais de la balise [Embed].

Seules les polices TrueType peuvent directement être intégrées dans une application Flex. Les polices dans un autre format, telles que les polices Postscript Type 1, doivent tout d’abord être intégrées dans un fichier SWF à l’aide de Flash Professional ; vous pouvez ensuite utiliser ce fichier SWF dans votre application Flex. Pour plus d’informations sur l’utilisation de polices intégrées dans Flex à partir de fichiers SWF, voir « Intégration de polices à partir de fichiers SWF » dans le manuel Utilisation de Flex 4.

Contrôle de la netteté, de l’épaisseur et de l’anticrènelage

Par défaut, Flash Player ou AIR détermine les paramètres de contrôle d’affichage du texte (netteté, épaisseur et anticrènelage) qui s’appliquent lorsque le texte change de taille et de couleur ou s’affiche sur différents arrière-plans. Dans certains cas, vous pouvez définir ces paramètres, par exemple si le texte est très petit ou très gros, ou s’il s’affiche sur plusieurs arrière-plans. La classe flash.text.TextRenderer et les classes associées, telles que CSMSettings, permettent de remplacer les paramètres de Flash Player ou d’AIR. Elles offrent un contrôle précis de la qualité d’affichage du texte incorporé. Pour plus d’informations sur les polices intégrées, voir Utilisation de polices incorporées.

Remarque : la propriété .antiAliasType de la classe flash.text.TextField doit avoir la valeur AntiAliasType.ADVANCED pour que vous puissiez définir la netteté, l’épaisseur ou la propriété gridFitType, ou pour que vous puissiez utiliser la méthode TextRenderer.setAdvancedAntiAliasingTable().

L’exemple suivant applique des propriétés personnalisées de modulation continue du trait (CSM) et de mise en forme au texte affiché, en utilisant la police incorporée myFont. Lorsque l’utilisateur clique sur le texte affiché, Flash Player ou Adobe AIR applique ces paramètres personnalisés :

var format:TextFormat = new TextFormat(); 
format.color = 0x336699; 
format.size = 48; 
format.font = "myFont"; 
 
var myText:TextField = new TextField(); 
myText.embedFonts = true; 
myText.autoSize = TextFieldAutoSize.LEFT; 
myText.antiAliasType = AntiAliasType.ADVANCED; 
myText.defaultTextFormat = format; 
myText.selectable = false; 
myText.mouseEnabled = true; 
myText.text = "Hello World"; 
addChild(myText); 
myText.addEventListener(MouseEvent.CLICK, clickHandler); 
 
function clickHandler(event:Event):void 
{ 
    var myAntiAliasSettings = new CSMSettings(48, 0.8, -0.8); 
    var myAliasTable:Array = new Array(myAntiAliasSettings); 
    TextRenderer.setAdvancedAntiAliasingTable("myFont", FontStyle.ITALIC, TextColorType.DARK_COLOR, myAliasTable); 
}