Working with fonts
The FontDescription
object is used in conjunction with ElementFormat
to
identify a font face and define some of its characteristics. These
characteristics include the font name, weight, posture, rendering, and how to
find the font (device versus embedded).
Note: FTE does not support Type 1 fonts or bitmap fonts such as Type 3, ATC, sfnt-wrapped CID, or Naked CID.
Defining font characteristics (FontDescription object)
The fontName
property of the FontDescription
object can be a single name or
a comma-separated list of names. For example, in a list such as "Arial,
Helvetica, _sans", the text engine looks for "Arial" first, then "Helvetica",
and finally "_sans", if it can't find either of the first two fonts. The set of
font names include three generic device font names: "_sans", "_serif", and
"_typewriter". They map to specific device fonts, depending on the playback
system. It is good practice to specify default names such as these in all font
descriptions that use device fonts. If no fontName
is specified, "_serif" is
used as the default.
The fontPosture
property can either be set to the default (
FontPosture.NORMAL
) or to italics ( FontPosture.ITALIC
). The fontWeight
property can be set to the default ( FontWeight.NORMAL
) or to bold (
FontWeight.BOLD
).
var fd1:FontDescription = new FontDescription();
fd1.fontName = "Arial, Helvetica, _sans";
fd1.fontPosture = FontPosture.NORMAL;
fd1.fontWeight = FontWeight.BOLD;
Embedded versus device fonts
The fontLookup
property of the FontDescription
object specifies whether the
text engine looks for a device font or embedded font to render text. If a device
font ( FontLookup.DEVICE
) is specified, the runtime looks for the font on the
playback system. Specifying an embedded font ( FontLookup.EMBEDDED_CFF
) causes
the runtime to look for an embedded font with the specified name in the SWF
file. Only embedded CFF (Compact Font Format) fonts work with this setting. If
the specified font is not found, a fallback device font is used.
Device fonts result in a smaller SWF file size. Embedded fonts give you greater fidelity across platforms.
var fd1:FontDescription = new FontDescription();
fd1.fontLookup = FontLookup.EMBEDDED_CFF;
fd1.fontName = "Garamond, _serif";
Rendering mode and hinting
CFF (Compact Font Format) rendering is available starting with Flash Player 10
and Adobe AIR 1.5. This type of font rendering makes text more legible, and
permits higher-quality display of fonts at small sizes. This setting only
applies to embedded fonts. FontDescription
defaults to this setting (
RenderingMode.CFF
) for the renderingMode
property. You can set this property
to RenderingMode.NORMAL
to match the type of rendering used by Flash Player 7
or earlier versions.
When CFF rendering is selected, a second property, cffHinting
, controls how a
font's horizontal stems are fit to the subpixel grid. The default value,
CFFHinting.HORIZONTAL_STEM
, uses CFF hinting. Setting this property to
CFFHinting.NONE
removes hinting, which is appropriate for animation or for
large font sizes.
var fd1:FontDescription = new FontDescription();
fd1.renderingMode = RenderingMode.CFF;
fd1.cffHinting = CFFHinting.HORIZONTAL_STEM;
Locking and cloning FontDescription
When a FontDescription
object is assigned to an ElementFormat
, its locked
property is automatically set to true
. Attempting to modify a locked
FontDescription
object throws an IllegalOperationError
. The best practice is
to fully define such an object before assigning it to a ElementFormat
.
If you want to modify an existing FontDescription
, 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 ElementFormat
. Any new lines created from this
TextElement
have the new formatting. Previous lines created from this same
object are unchanged.
package
{
import flash.display.Sprite;
import flash.text.*;
public class FontDescriptionCloneExample extends Sprite
{
private var tb:TextBlock = new TextBlock();
private var te:TextElement;
private var ef1:ElementFormat;
private var ef2:ElementFormat;
private var fd1:FontDescription = new FontDescription();
private var fd2:FontDescription;
public function FontDescriptionCloneExample()
{
fd1.fontName = "Garamond";
ef1 = new ElementFormat(fd);
var str:String = "This is flash text";
te = new TextElement(str, ef);
tb.content = te;
var tx1:TextLine = tb.createTextLine(null,600);
addChild(tx1);
fd2 = (fd1.locked) ? fd1.clone() : fd1;
fd2.fontName = "Arial";
ef2 = (ef1.locked) ? ef1.clone() : ef1;
ef2.fontDescription = fd2;
tb.content.elementFormat = ef2;
var tx2:TextLine = tb.createTextLine(null,600);
addChild(tx2);
}
}
}