A
TextBlock
object
is a factory for creating lines of text. The content of a
TextBlock
is
assigned via the
TextElement
object. An
ElementFormat
object
handles the formatting for the text. The ElementFormat class defines
such properties as baseline alignment, kerning, tracking, text rotation,
and font size, color, and case. It also includes a
FontDescription
,
which is covered in detail in
Working with fonts
.
Using the ElementFormat object
The
constructor for the
ElementFormat
object takes
any of a long list of optional parameters, including a
FontDescription
.
You can also set these properties outside the constructor. The following
example shows the relationship of the various objects in defining
and displaying a simple text line:
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);
}
}
}
Font color and transparency (alpha)
The
color
property
of the
ElementFormat
object sets the font color.
The value is an integer representing the RGB components of the color;
for example, 0xFF0000 for red and 0x00FF00 for green. The default
is black (0x000000).
The
alpha
property
sets the alpha transparency value for an element (both
TextElement
and
GraphicElement
).
Values can range from 0 (fully transparent) to 1 (fully opaque,
which is the default). Elements with an
alpha
of
0 are invisible, but still active. This value is multiplied by any
inherited alpha values, thus making the element more transparent.
var ef:ElementFormat = new ElementFormat();
ef.alpha = 0.8;
ef.color = 0x999999;
Baseline alignment and shift
The
font and size of the largest text in a line determine its dominant
baseline. You can override these values by setting
TextBlock.baselineFontDescription
and
TextBlock.baselineFontSize
.
You can align the dominant baseline with one of several baselines
within the text. These baselines include the ascent line and the
descent line or the ideographic top, center, or bottom.
-
A.
-
Ascent
-
B.
-
Baseline
-
C.
-
Descent
-
D.
-
x-height
In the
ElementFormat
object, three properties
determine baseline and alignment characteristics. The
alignmentBaseline
property
sets the main baseline of a
TextElement
or
GraphicElement
.
This baseline is the “snap-to” line for the element, and it’s to
this position that the dominant baseline of all text aligns.
The
dominantBaseline
property specifies which
of the various baselines of the element to use, which determines
the vertical position of the element on the line. The default value
is
TextBaseline.ROMAN
, but it can also be set to
have the
IDEOGRAPHIC_TOP
or
IDEOGRAPHIC_BOTTOM
baselines
be dominant.
The
baselineShift
property
moves the baseline by a set number of pixels on the y-axis. In normal
(non-rotated) text, a positive value moves the baseline down and
a negative value moves it up.
Typographic Case
The
TypographicCase
property
of
ElementFormat
specifies text case, such as uppercase,
lowercase, or small caps.
var ef_Upper:ElementFormat = new ElementFormat();
ef_Upper.typographicCase = TypographicCase.UPPERCASE;
var ef_SmallCaps:ElementFormat = new ElementFormat();
ef_SmallCaps.typographicCase = TypographicCase.SMALL_CAPS;
Rotating text
You
can rotate a block of text or the glyphs within a segment of text
in increments of 90°. The TextRotation class defines the following
constants for setting both text block and glyph rotation:
Constant
|
Value
|
Description
|
AUTO
|
“auto”
|
Specifies 90 degree counter-clockwise rotation.
Typically used with vertical Asian text to rotate only glyphs that
require rotation.
|
ROTATE_0
|
“rotate_0”
|
Specifies no rotation.
|
ROTATE_180
|
“rotate_180”
|
Specifies 180 degree rotation.
|
ROTATE_270
|
“rotate_270”
|
Specifies 270 degree rotation.
|
ROTATE_90
|
“rotate_90”
|
Specifies 90 degree clockwise rotation.
|
To rotate the lines of text in a text block, set the
TextBlock.lineRotation
property
before calling the
TextBlock.createTextLine()
method
to create the text line.
To rotate the glyphs within a block of text or a segment, set
the
ElementFormat.textRotation
property to the
number of degrees that you want the glyphs to rotate. A glyph is
the shape that makes up a character, or a part of a character that
consists of multiple glyphs. The letter “a” and the dot on an “i”,
for example, are glyphs.
Rotating
glyphs is relevant in some Asian languages in which you want to
rotate the lines to vertical but not rotate the characters within
the lines. For more information on rotating Asian text, see
Justifying East Asian text
.
Here is an example of rotating both a block of text and the glyphs
within, as you would with Asian text. The example also uses a Japanese
font:
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);
}
}
}
Locking and cloning ElementFormat
When
an
ElementFormat
object is assigned to any type
of
ContentElement
, its
locked
property
is automatically set to
true
. Attempting to modify
a locked
ElementFormat
object throws an
IllegalOperationError
.
The best practice is to fully define such an object before assigning
it to a
TextElement
instance.
If you want to modify an existing
ElementFormat
instance,
first check its
locked
property. If it’s
true
,
use the
clone()
method to create an unlocked copy
of the object. The properties of this unlocked object can be changed,
and it can then be assigned to the
TextElement
instance.
Any new lines created from it have the new formatting. Previous
lines created from this same object and using the old format are
unchanged.
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);
}
}
}
|
|
|