Mise en forme du texte

Flash Player 10 et les versions ultérieures, Adobe AIR 1.5 et les versions ultérieures

Un objet TextBlock est un objet usine pour la création de lignes de texte. Le contenu d’un objet TextBlock est affecté via l’objet TextElement . Un objet ElementFormat gère la mise en forme du texte. La classe ElementFormat définit certaines propriétés, telles que l’alignement sur la ligne de base, le crénage, l’interlettrage, la rotation du texte, la taille et la couleur des polices, ainsi que la casse. Elle comprend également la méthode FontDescription , décrite en détail à la section Utilisation des polices .

Utilisation de l’objet ElementFormat

Le constructeur de l’objet ElementFormat prend des nombreux paramètres facultatifs, dont FontDescription . Vous pouvez également définir ces propriétés en dehors du constructeur. L’exemple suivant illustre la relation des différents objets lors de la définition et de l’affichage d’une ligne de texte simple :

package 
{ 
    import flash.display.Sprite; 
    import flash.text.*; 
 
    public class ElementFormatExample extends Sprite 
    { 
        private var tb:TextBlock = new TextBlock(); 
        private var te:TextElement; 
        private var ef:ElementFormat; 
         private var fd:FontDescription = new FontDescription(); 
        private var str:String; 
        private var tl:TextLine; 
 
        public function ElementFormatExample() 
        { 
            fd.fontName = "Garamond"; 
            ef = new ElementFormat(fd); 
            ef.fontSize = 30; 
            ef.color = 0xFF0000; 
            str = "This is flash text"; 
            te = new TextElement(str, ef); 
            tb.content = te; 
            tl = tb.createTextLine(null,600); 
            addChild(tl); 
        } 
    } 
}

Couleur de police et transparence (alpha)

La propriété color de l’objet ElementFormat définit la couleur de police. La valeur est un entier représentant les composants RVB de la couleur, par exemple : 0xFF0000 pour le rouge et 0x00FF00 pour le vert. La valeur par défaut est noir (0x000000).

La propriété alpha définit la valeur de transparence alpha d’un élément ( TextElement et GraphicElement ). La plage des valeurs est comprise entre 0 (complètement transparent) et 1 (complètement opaque), qui est la valeur par défaut. Les éléments dont la propriété alpha est de 0 sont invisibles, mais restent actifs. Cette valeur est multipliée par l’une des valeurs alpha héritées, ce qui rend l’élément plus transparent.

var ef:ElementFormat = new ElementFormat(); 
ef.alpha = 0.8; 
ef.color = 0x999999; 

Alignement et décalage de la ligne de base

La police et la taille du plus grand texte dans une ligne déterminent sa ligne de base dominante. Vous pouvez écraser ces valeurs en définissant TextBlock.baselineFontDescription et TextBlock.baselineFontSize . Vous pouvez aligner la ligne de base dominante sur l’une des lignes de bases du texte, à savoir la ligne ascendante, la ligne descendante, ou la ligne de base idéographique supérieure, centrale ou inférieure.

Texte illustrant la ligne ascendante, la ligne de base, la ligne descendante et la hauteur-x
A.
Ascendante

B.
Ligne de base

C.
Descendante

D.
Hauteur-x

Dans l’objet ElementFormat , trois propriétés déterminent la ligne de base et les caractéristiques d’alignement. La propriété alignmentBaseline définit la ligne de base principale d’un objet TextElement ou GraphicElement . Cette ligne de base est la ligne « d’accrochage ».de l’élément, et c’est à cette position que la ligne de base dominante du texte s’aligne.

La propriété dominantBaseline indique la ligne de base de l’élément à utiliser, qui détermine la position verticale de l’élément sur la ligne. La valeur par défaut est TextBaseline.ROMAN , mais vous pouvez également stipuler que la ligne de base IDEOGRAPHIC_TOP ou IDEOGRAPHIC_BOTTOM doit être dominante.

La propriété baselineShift déplace la ligne de base selon un nombre de pixels défini sur l’axe y. Dans un texte normal (aucune rotation), une valeur positive déplace la ligne de base vers le bas et une valeur négative la déplace vers le haut.

Casse typographique

La propriété TypographicCase de l’objet ElementFormat spécifie la casse du texte : majuscule, minuscule ou petites capitales.

 
var ef_Upper:ElementFormat = new ElementFormat(); 
ef_Upper.typographicCase = TypographicCase.UPPERCASE; 
 
var ef_SmallCaps:ElementFormat = new ElementFormat(); 
ef_SmallCaps.typographicCase = TypographicCase.SMALL_CAPS; 

Rotation du texte

Vous pouvez appliquer une rotation au bloc de texte ou aux glyphes d’un segment de texte par incréments de 90°. La classe TextRotation définit les constantes suivantes pour définir la rotation du bloc de texte et des glyphes :

Constante

Valeur

Description

AUTO

“auto”

Spécifie une rotation vers la gauche de 90 degrés. Généralement utilisée avec un texte asiatique vertical pour faire pivoter uniquement les glyphes auxquelles il est nécessaire d’appliquer une rotation.

ROTATE_0

“rotate_0”

Spécifie aucune rotation.

ROTATE_180

“rotate_180”

Spécifie une rotation de 180 degrés.

ROTATE_270

“rotate_270”

Spécifie une rotation de 270 degrés.

ROTATE_90

“rotate_90”

Spécifie une rotation vers la droite de 90 degrés.

Pour appliquer une rotation aux lignes d’un texte, définissez tout d’abord la propriété TextBlock.lineRotation avant d’appeler la méthode TextBlock.createTextLine() pour créer la ligne de texte.

Pour appliquer une rotation aux glyphes dans un bloc de texte ou un segment, définissez la propriété ElementFormat.textRotation sur le nombre de degrés de rotation des glyphes souhaité. Une glyphe est la forme qui constitue un caractère, ou une partie d’un caractère qui consiste en plusieurs glyphes. La lettre « a » et le point sur un « i », par exemple, sont des glyphes.

La rotation des glyphes est importante dans certaines langues asiatiques, notamment si vous souhaitez appliquer une rotation verticale aux lignes, mais ne pas appliquer de rotation aux caractères dans les lignes. Pour plus d’informations sur la rotation du texte asiatique, voir Justification du texte asiatique .

Voici un exemple de rotation du texte et des glyphes qu’il contient dans un texte asiatique : Cet exemple utilise également une police japonaise :

package 
{ 
    import flash.display.Sprite; 
    import flash.text.*; 
 
    public class RotationExample extends Sprite 
    { 
        private var tb:TextBlock = new TextBlock(); 
        private var te:TextElement; 
        private var ef:ElementFormat; 
         private var fd:FontDescription = new FontDescription(); 
        private var str:String; 
        private var tl:TextLine; 
 
        public function RotationExample() 
        { 
            fd.fontName = "MS Mincho"; 
            ef = new ElementFormat(fd); 
            ef.textRotation = TextRotation.AUTO; 
            str = "This is rotated Japanese text"; 
            te = new TextElement(str, ef); 
            tb.lineRotation = TextRotation.ROTATE_90; 
            tb.content = te; 
            tl = tb.createTextLine(null,600); 
            addChild(tl); 
        } 
    } 
}

Verrouillage et clonage d’un objet ElementFormat

Lorsqu’un objet ElementFormat est affecté à un type de ContentElement , sa propriété locked est automatiquement définie sur true . Toute tentative de modification d’un objet ElementFormat verrouillé renvoie une erreur IllegalOperationError . La meilleure pratique consiste à définir complètement ce type d’objet avant de l’affecter à l’occurrence de TextElement .

Si vous souhaitez modifier une occurrence de ElementFormat existante, vous devez tout d’abord vérifier sa propriété locked . Si elle est définie sur true , utilisez la méthode clone() pour créer une copie déverrouillée de l’objet. Vous pouvez modifier les propriétés de cet objet déverrouillé, puis l’affecter à l’occurrence de TextElement . Toute nouvelle ligne créée à partir de cet objet adopte la nouvelle mise en forme. Les lignes précédentes créées à partir de cet objet et utilisant l’ancienne mise en forme ne sont pas modifiées.

package 
{ 
    import flash.display.Sprite; 
    import flash.text.*; 
 
    public class ElementFormatCloneExample extends Sprite 
    { 
        private var tb:TextBlock = new TextBlock(); 
        private var te:TextElement; 
        private var ef1:ElementFormat; 
        private var ef2:ElementFormat; 
         private var fd:FontDescription = new FontDescription(); 
 
        public function ElementFormatCloneExample() 
        { 
            fd.fontName = "Garamond"; 
            ef1 = new ElementFormat(fd); 
            ef1.fontSize = 24; 
            var str:String = "This is flash text"; 
            te = new TextElement(str, ef); 
            tb.content = te; 
            var tx1:TextLine = tb.createTextLine(null,600); 
            addChild(tx1); 
             
            ef2 = (ef1.locked) ? ef1.clone() : ef1; 
            ef2.fontSize = 32; 
            tb.content.elementFormat = ef2; 
            var tx2:TextLine = tb.createTextLine(null,600); 
            addChild(tx2); 
        } 
    } 
}