| Pacote | flashx.textLayout.compose |
| Interface | public interface ISWFContext |
| Implementadores | TextContainerManager |
| Versão da linguagem: | ActionScript 3.0 |
| Versões de runtime: | Flash Player 10, AIR 1.5 |
Há duas razões para um aplicativo usar esta interface para controlar a criação TextLine:
- Reutilizar uma fonte incorporada: se um aplicativo quiser usar uma fonte incorporada em um arquivo SWF carregado, o aplicativo pode acessar a fonte se um TextLine for criado no contexto do arquivo SWF carregado.
-
Reutilizar instâncias TextLine existentes: a reutilização de instâncias TextLine existentes pode resultar em tempos de recomposição mais rápidos. O TLF reutiliza instâncias TextLine existentes internamente. TLF reutiliza um TextLine chamando
TextBlock.recreateTextLine()em vez deTextBlock.createTextLine()quando TLF reconhece que um TextLine é existente.
O seu aplicativo pode ter instâncias TextLine adicionais que podem ser reutilizadas. Para reutilizar manualmente instâncias TextLine existentes:
- faça chamadas
TextBlock.createTextLine(), depois - chame
TextBlock.recreateTextLine()com a instância TextLine existente em vez deTextBlock.createTextLine().
Observe, contudo, que o TextBlock.recreateTextLine() está disponível somente no Flash Player 10.1 e posterior.
Elementos da API relacionados
| Método | Definido por | ||
|---|---|---|---|
Um modo de chamar um método em um contexto controlado pelo cliente. | ISWFContext | ||
callInContext | () | método |
public function callInContext(fn:Function, thisArg:Object, argArray:Array, returns:Boolean = true):*| Versão da linguagem: | ActionScript 3.0 |
| Versões de runtime: | Flash Player 10, AIR 1.5 |
Um modo de chamar um método em um contexto controlado pelo cliente.
Parâmetros
fn:Function — A função ou método para chamar
| |
thisArg:Object — O ponteiro da função
| |
argArray:Array — Os argumentos para a função
| |
returns:Boolean (default = true) — Se verdadeiro, a função retorna um valor
|
* — Tudo o que a função regressar, se houver.
|
Elementos da API relacionados
A classe EmbeddedFontLineCreator implementa ISWFContext e incorpora uma fonte. Outras classes podem carregar um arquivo SWF baseado em EmbeddedFontLineCreator e acessar a fonte 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);
}
}
}
A classe FontConsumer primeiro carrega o arquivo EmbeddedFontLineCreator.swf e espera a função de carga ter sucesso. Uma vez que a carga tem sucesso, a função de ouvinte de evento createFlow() cria um contêiner de texto e um fluxo de texto. O ouvinte de evento então cria uma compositora de fluxo e associa-se o arquivo SWF carregado com a compositora de fluxo swfContext propriedade. Esta associação permite um exemplo FontConsumer a métodos de chamada dentro do contexto do arquivo SWF carregado. Com o acesso ao contexto de EmbeddedFontLineCreator, o exemplo FontConsumer pode usar a fonte incorporada no 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();
}
}
}
Wed Jun 13 2018, 11:10 AM Z