Formatação de texto

Flash Player 10 e posterior, Adobe AIR 1.5 e posterior

Um objeto TextBlock é uma fábrica para criação de linhas de texto. O conteúdo de um TextBlock é designado pelo objeto TextElement . Um objeto ElementFormat manipula a formatação do texto. A classe ElementFormat define propriedades como alinhamento da linha de base, ajuste de espaço, tracking, rotação de texto, além de tamanho, cor e caixa de fonte. Também inclui uma FontDescription , abordada em detalhes em Trabalho com fontes .

Uso do objeto ElementFormat

O construtor do objeto ElementFormat adota qualquer item de uma lista longa de parâmetros opcionais, incluindo uma FontDescription . Também é possível definir essas propriedades fora do construtor. O exemplo a seguir mostra o relacionamento de vários objetos na definição e exibição de uma linha de texto simples.

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); 
        } 
    } 
}

Cor e transparência (alfa) da fonte

A propriedade color do objeto ElementFormat define a cor da fonte. O valor é um inteiro que representa os componentes RGB da cor, por exemplo, 0xFF0000 para vermelho e 0x00FF00 para verde. O padrão é preto (0x000000).

A propriedade alpha define o valor da transferência alfa para um elemento ( TextElement e GraphicElement ). Os valores podem variar de 0 (totalmente transparente) a 1 (totalmente opaco, que é a definição padrão). Elementos com alpha igual a 0 são invisíveis, porém ativos. Esse valor é multiplicado por quaisquer valores alfa herdados, tornando o elemento mais transparente.

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

Alinhamento e deslocamento de linha de base

A fonte e o tamanho do texto maior em uma linha determina sua linha de base dominante. É possível substituir esses valores definindo TextBlock.baselineFontDescription e TextBlock.baselineFontSize . É possível alinhar a linha de base dominante com uma das diversas linhas de base dentro do texto. Essas linhas de base incluem as linhas ascendente e descendente ou as partes superior, inferior e central do ideograma.

Texto mostrando a linha ascendente, a linha de base, a linha descendente e a altura do x
A.
Ascendente

B.
Linha de base

C.
Descendente

D.
Altura do x

No objeto ElementFormat , três propriedades determinam as características da linha de base e do alinhamento. A propriedade alignmentBaseline define a linha de base principal de um TextElement ou GraphicElement . Essa linha de base é a linha "de encaixe" do elemento, e a base de linha dominante de todo o texto se alinha em relação à sua posição.

A propriedade dominantBaseline especifica quais linhas de base do elemento usar, o que determina a posição vertical do elemento na linha. O valor padrão é TextBaseline.ROMAN , mas também pode ser definido de modo que IDEOGRAPHIC_TOP ou IDEOGRAPHIC_BOTTOM seja a linha de base dominante.

A propriedade baselineShift move a linha de base por um número de pixels definidos no eixo y. No texto normal (não girado), um valor positivo move a linha de base para baixo e um valor negativo, para cima.

Caixa tipográfica

A propriedade TypographicCase de ElementFormat especifica a caixa de texto como maiúscula, minúscula ou versalete.

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

Giro de texto

É possível girar um bloco de texto ou os glifos dentro de um segmento de texto em incrementos de 90°. A classe TextRotation define as seguintes constantes para definir o giro de bloco de texto e glifo:

Constante

Valor

Descrição

AUTO

“auto”

Especifica um giro de 90° no sentido anti-horário. Usada, normalmente, com a fonte asiática vertical para girar apenas glifos que exigem rotação.

ROTATE_0

“rotate_0”

Não especifica nenhuma rotação.

ROTATE_180

“rotate_180”

Especifica um giro de 180°.

ROTATE_270

“rotate_270”

Especifica um giro de 270°.

ROTATE_90

“rotate_90”

Especifica um giro de 90° no sentido horário.

Para girar as linhas de texto em um bloco de texto, defina a propriedade TextBlock.lineRotation antes de chamar o método TextBlock.createTextLine() para criar a linha de texto.

Para girar os glifos em um bloco de texto ou segmento, defina a propriedade ElementFormat.textRotation como o número de graus que o glifo deve ser girado. Um glifo é a forma que compõe um caractere ou uma parte de um caractere composto de vários glifos. A letra "a" e o ponto em um "i", por exemplo, são glifos.

O giro dos glifos é importante em alguns idiomas asiáticos em qual se quer girar as linhas para vertical, sem girar os caracteres dentro das linhas. Para obter mais informações sobre o giro de texto asiático, consulte Justificação de texto do leste asiático .

Este é um exemplo de giro de um bloco de texto e dos glifos internos, que pode ser aplicativo a um texto asiático. O exemplo também usa uma fonte japonesa:

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); 
        } 
    } 
}

Bloqueio e clonagem de ElementFormat

Quando um objeto ElementFormat for atribuído a qualquer tipo de ContentElement , sua propriedade locked será automaticamente definida como true . A tentativa para modificar um objeto ElementFormat bloqueado emite um IllegalOperationError . A prática recomendada é definir completamente tal objeto antes de atribuí-lo a uma instância do TextElement .

Para modificar uma instância do ElementFormat existente, primeiro verifique sua propriedade locked . Se estiver definida como true , use o método clone() para criar uma cópia desbloqueada do objeto. As propriedades desse objeto desbloqueado podem ser alteradas e é possível atribuí-lo à instância do TextElement . Quaisquer linhas criadas a partir de então terão a nova formatação. As linhas desse mesmo objeto criadas anteriormente, e usando o formato antigo, permanecerão inalteradas.

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); 
        } 
    } 
}