Pacchetto | flashx.textLayout.compose |
Interfaccia | public interface ISWFContext |
Implementatori | TextContainerManager |
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10, AIR 1.5 |
I motivi per cui un'applicazione utilizza questa interfaccia per controllare la creazione di TextLine sono due:
- Riutilizzo di un carattere incorporato: per utilizzare un carattere incorporato in un file SWF caricato, l'applicazione può accedere al carattere se nel contesto del file SWF caricato è stato creato TextLine.
-
Riutilizzo di istanze TextLine esistenti: il riutilizzo di istanze TextLine esistenti può velocizzare i tempi di ricomposizione. TLF riutilizza le istanze TextLine internamente. TLF riutilizza un'istanza TextLine chiamando
TextBlock.recreateTextLine()
anzichéTextBlock.createTextLine()
quando TLF riconosce che è presente un'istanza TextLine.
L'applicazione può contenere istanze TextLine aggiuntive che possono essere riutilizzate. Per riutilizzare manualmente le istanze TextLine esistenti:
- intercettate le chiamate a
TextBlock.createTextLine()
, quindi - chiamate
TextBlock.recreateTextLine()
con l'istanza TextLine esistente anzichéTextBlock.createTextLine()
.
Tenete tuttavia presente che TextBlock.recreateTextLine()
è disponibile solo in Flash Player 10.1 e versioni successive.
Elementi API correlati
Metodo | Definito da | ||
---|---|---|---|
Un modo per chiamare un metodo in un contesto controllato da un client. | ISWFContext |
callInContext | () | metodo |
public function callInContext(fn:Function, thisArg:Object, argArray:Array, returns:Boolean = true):*
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10, AIR 1.5 |
Un modo per chiamare un metodo in un contesto controllato da un client.
Parametri
fn:Function — La funzione o il metodo da chiamare.
| |
thisArg:Object — Il puntatore per la funzione.
| |
argArray:Array — Gli argomenti per la funzione.
| |
returns:Boolean (default = true ) — Se true, la funzione restituisce un valore.
|
* — Qualsiasi valore eventualmente restituito dalla funzione.
|
Elementi API correlati
La classe EmbeddedFontLineCreator implementa ISWFContext e incorpora un carattere. Altre classi possono caricare un file SWF in base a EmbeddedFontLineCreator e accedere al carattere incorporato.
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 classe FontConsumer inizialmente carica il file EmbeddedFontLineCreator.swf e attende il corretto completamento della funzione di caricamento. Quindi, la funzione listener di eventi createFlow()
crea un contenitore di testo e un flusso di testo. Il listener di eventi crea quindi un compositore di flusso e associa il file SWF caricato alla proprietà swfContext
del compositore. Questa associazione consente a un'istanza FontConsumer di chiamare metodi nel contesto del file SWF caricato. Con la possibilità di accedere al contesto di EmbeddedFontLineCreator, l'istanza FontConsumer può utilizzare il carattere incorporato in 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:44 PM Z