Trabajo con fuentes

Flash Player 10 y posterior, Adobe AIR 1.5 y posterior

El objeto FontDescription se utiliza junto con ElementFormat para identificar una fuente y definir algunas de sus características. Entre estas características se encuentran el nombre de la fuente, grosor, postura, representación y el modo de localizar la fuente (en el dispositivo en lugar de incorporada).

Nota: FTE no admite fuentes de Tipo 1 o fuentes de mapa de bits, como las de Tipo 3, ATC, sfnt-wrapped CID o Naked CID.

Definición de características de fuentes (objeto FontDescription)

La propiedad fontName del objeto FontDescription puede ser un único nombre o una lista de nombres separadas por comas. Por ejemplo, en una lista como "Arial, Helvetica, _sans", el motor de texto busca primero "Arial", después "Helvetica" y, por último, "_sans", si no encuentran alguna de las dos primeras fuentes. El conjunto de nombres de fuente incluye tres nombres genéricos de fuentes de dispositivo: “_sans”, “_serif” y “_typewriter”. Dependiendo del sistema de reproducción, se corresponden con fuentes de dispositivo específicas. Se recomienda especificar nombres predeterminados como estos en todas las descripciones de fuentes que utilizan fuentes de dispositivo. Si no se especifica fontName , se utiliza “_serif” de forma predeterminada.

La propiedad fontPosture se puede establecer en su valor predeterminado ( FontPosture.NORMAL ) o en cursiva ( FontPosture.ITALIC ). La propiedad fontWeight se puede establecer en su valor predeterminado ( FontWeight.NORMAL ) o en negrita ( FontWeight.BOLD ).

var fd1:FontDescription = new FontDescription(); 
fd1.fontName = "Arial, Helvetica, _sans"; 
fd1.fontPosture = FontPosture.NORMAL; 
fd1.fontWeight = FontWeight.BOLD;

Fuentes incorporadas frente a fuentes de dispositivo

La propiedad fontLookup del objeto FontDescription especifica si el motor de texto debe buscar una fuente de dispositivo o una fuente incorporada para procesar el texto. Si se especifica una fuente de dispositivo ( FontLookup.DEVICE ), el tiempo de ejecución buscará la fuente en el sistema de reproducción. La especificación de una fuente incorporada ( FontLookup.EMBEDDED_CFF ) hace que el tiempo de ejecución busque una fuente incorporada con el nombre especificado en el archivo SWF. Con esta configuración solo funcionan las fuentes CFF (de formato de fuente compacto) incorporadas. Si no se encuentra la fuente especificada, se utiliza una fuente de dispositivo alternativa.

Las fuentes de dispositivo suponen un tamaño de archivo SW menor. Las fuentes incorporadas ofrecen una mayor fidelidad entre plataformas.

var fd1:FontDescription = new FontDescription(); 
fd1.fontLookup = FontLookup.EMBEDDED_CFF; 
fd1.fontName = "Garamond, _serif";

Modo de representación e interpolación

La representación de CFF (Formato de fuente compacto) se encuentra disponible a partir de Flash Player 10 y Adobe AIR 1.5. Este tipo de representación de fuentes hace que el texto sea más legible y permite obtener una visualización de mayor calidad de las fuentes a tamaños reducidos. Esta configuración solo se aplica a las fuentes incorporadas. FontDescription toma como predeterminada esta configuración ( RenderingMode.CFF ) para la propiedad renderingMode . Esta propiedad se puede establecer en RenderingMode.NORMAL para que coincida con el tipo de representación utilizado por Flash Player 7 o versiones anteriores.

Cuando está seleccionada la representación CFF, una segunda propiedad, cffHinting , controla cómo se ajustan los trazos horizontales de una fuente a la cuadrícula de subpí­xeles. El valor predeterminado, CFFHinting.HORIZONTAL_STEM , utiliza la interpolación CFF. Al establecer esta propiedad en CFFHinting.NONE se elimina la interpolación, lo que resulta adecuado para animaciones o para tamaños de fuente grandes.

var fd1:FontDescription = new FontDescription(); 
fd1.renderingMode = RenderingMode.CFF; 
fd1.cffHinting = CFFHinting.HORIZONTAL_STEM;

Bloqueo y clonación de FontDescription

Si un objeto FontDescription se asigna a ElementFormat , su propiedad locked se establece automáticamente en true . Si se intenta modificar un objeto FontDescription bloqueado, se generar un error de tipo IllegalOperationError . Se recomienda definir completamente un objeto así antes de asignarlo a una instancia de ElementFormat .

Si desea modificar un elemento FontDescription existente, compruebe antes su propiedad locked . Si es true , utilice el método clone() para crear una copia no bloqueada del objeto. Las propiedades de este objeto desbloqueado se pueden cambiar y, posteriormente, asignarlo a ElementFormat . Las nuevas líneas que se creen a partir de este TextElement tendrán el nuevo formato. Las líneas anteriores creadas a partir de este mismo objeto no cambian.

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