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