| Paquete | flashx.textLayout.compose |
| Interfaz | public interface ISWFContext |
| Implementadores | TextContainerManager |
| Versión del lenguaje: | ActionScript 3.0 |
| Versiones de motor de ejecución: | Flash Player 10, AIR 1.5 |
Hay dos razones para que una aplicación utilice esta interfaz para controlar la creación de TextLine:
- Volver a utilizar una fuente incorporada: si una aplicación quiere utilizar una fuente incorporada en un archivo SWF cargado, la aplicación puede acceder a la fuente si se crea un objeto TextLine en el contexto del archivo SWF cargado.
-
Volver a utilizar instancias de TextLine: reutilizar las instancias de TextLine puede dar lugar a tiempos más rápidos de recomposición. TLF reutiliza internamente las instancias de TextLine existentes. TLF reutiliza un objeto TextLine llamando a
TextBlock.recreateTextLine()en lugar de aTextBlock.createTextLine()cuando TLF reconoce que existe un objeto TextLine.
La aplicación puede tener instancias de TextLine adicionales que se pueden reutilizar. Para reutilizar manualmente instancias de TextLine existentes:
- atrape llamadas a
TextBlock.createTextLine()y - llame a
TextBlock.recreateTextLine()con la instancia de TextLine en lugar deTextBlock.createTextLine().
Tenga en cuenta, no obstante, que TextBlock.recreateTextLine() sólo está disponible en Flash Player 10,1 y versiones posteriores.
Elementos de API relacionados
| Método | Definido por | ||
|---|---|---|---|
Una forma de llamar a un método en un contexto controlado por el cliente. | ISWFContext | ||
callInContext | () | método |
public function callInContext(fn:Function, thisArg:Object, argArray:Array, returns:Boolean = true):*| Versión del lenguaje: | ActionScript 3.0 |
| Versiones de motor de ejecución: | Flash Player 10, AIR 1.5 |
Una forma de llamar a un método en un contexto controlado por el cliente.
Parámetros
fn:Function — La función o método para llamar
| |
thisArg:Object — El puntero para esta función
| |
argArray:Array — Los argumentos de la función
| |
returns:Boolean (default = true) — Si es true, la función devuelve un valor
|
* — Cualquier valor devuelto por la función, si lo hay.
|
Elementos de API relacionados
La clase EmbeddedFontLineCreator implementa ISWFContext e incorpora una fuente. Otras clases pueden cargar un archivo SWF basado en EmbeddedFontLineCreator y acceder a la fuente incorporada.
package flashx.textLayout.compose.examples {
import flash.display.Sprite;
import flashx.textLayout.compose.ISWFContext;
public class EmbeddedFontLineCreator extends Sprite implements ISWFContext
{
[Embed( source="C:\\Windows\\Fonts\\BirchStd.otf", fontFamily="embeddedBirchStd", cff="embedAsCFF",
unicodeRange="U+0041-U+005A, U+0061-U+007A, U+003F")]
public var embeddedBirchStdFont:Class;
public function callInContext(fn:Function, thisArg:Object, argsArray:Array, returns:Boolean=true):*
{
if (returns)
return fn.apply(thisArg, argsArray);
fn.apply(thisArg, argsArray);
}
}
}
La clase FontConsumer primero carga el archivo EmbeddedFontLineCreator.swf y espera a que termine correctamente la función de carga. Una vez finalizada la carga, la función del detector de eventos createFlow() crea un contenedor de texto y un flujo de texto. Seguidamente, el detector crea un compositor de flujos y asocia el archivo SWF cargado con la propiedad swfContext del compositor de flujos. Esta asociación permite que una instancia de FontConsumer llame a métodos en el contexto del archivo SWF cargado. Con acceso al contexto de EmbeddedFontLineCreator, la instancia de FontConsumer puede utilizar la fuente incorporada en EmbeddedFontLineCreator.
package flashx.textLayout.compose.examples {
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLRequest;
import flash.text.engine.FontLookup;
import flashx.textLayout.compose.StandardFlowComposer;
import flashx.textLayout.container.ContainerController;
import flashx.textLayout.conversion.TextConverter;
import flashx.textLayout.elements.Configuration;
import flashx.textLayout.elements.TextFlow;
import flashx.textLayout.formats.TextLayoutFormat;
public class FontConsumer extends Sprite
{
private var fontSWF:Loader = new Loader();
public function FontConsumer()
{
var fontSWFURL:URLRequest = new URLRequest("EmbeddedFontLineCreator.swf");
fontSWF.contentLoaderInfo.addEventListener( Event.COMPLETE, createFlow );
fontSWF.load( fontSWFURL );
}
private function createFlow( event:Event ):void
{
var container:Sprite = new Sprite();
this.addChild( container );
var controller:ContainerController = new ContainerController( container, 600, 700 );
var format:TextLayoutFormat = new TextLayoutFormat();
format.fontFamily = "embeddedBirchStd";
format.fontLookup = FontLookup.EMBEDDED_CFF;
var config:Configuration = new Configuration();
config.textFlowInitialFormat = format;
var flow:TextFlow = TextConverter.importToFlow( "Shall I compare thee to a summer's day?", TextConverter.PLAIN_TEXT_FORMAT, config );
flow.flowComposer = new StandardFlowComposer();
var embeddedFontLineCreator:Class = fontSWF.contentLoaderInfo.applicationDomain.getDefinition( "flashx.textLayout.compose.examples.EmbeddedFontLineCreator" ) as Class;
flow.flowComposer.swfContext = new embeddedFontLineCreator();
flow.flowComposer.addController( controller );
flow.flowComposer.updateAllControllers();
}
}
}
Tue Jun 12 2018, 02:12 PM Z