Package | flashx.textLayout.compose |
Interface | public interface ISWFContext |
Implémenteurs | TextContainerManager |
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 10, AIR 1.5 |
Une application utilise cette interface pour contrôler la création de lignes de texte pour deux raisons :
- Réutiliser une police incorporée : si une application souhaite utiliser une police incorporée dans un fichier SWF chargé, elle peut accéder à la police si un objet TextLine est créé dans le contexte du fichier SWF chargé.
-
Réutiliser les occurrences de TextLine existantes : la réutilisation des occurrences de TextLine peut accélérer la recomposition. TLF réutilise les occurrences de TextLine en interne. TLF réutilise un objet TextLine en appelant
TextBlock.recreateTextLine()
au lieu deTextBlock.createTextLine()
lorsque TLF reconnaît que l’objet TextLine existe encore.
Votre application peut disposer d’autres occurrences de TextLine pouvant être réutilisées. Pour réutiliser manuellement les occurrences de TextLine existantes :
- Interrompez les appels de
TextBlock.createTextLine()
. - Appelez ensuite
TextBlock.recreateTextLine()
avec l’occurrence de TextLine existante plutôt qu’avecTextBlock.createTextLine()
.
Notez cependant que TextBlock.recreateTextLine()
est uniquement disponible dans Flash Player 10.1 et les versions ultérieures.
Eléments de l’API associés
Méthode | Défini par | ||
---|---|---|---|
Un moyen d’appeler une méthode dans un contexte contrôlé par le client. | ISWFContext |
callInContext | () | méthode |
public function callInContext(fn:Function, thisArg:Object, argArray:Array, returns:Boolean = true):*
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 10, AIR 1.5 |
Un moyen d’appeler une méthode dans un contexte contrôlé par le client.
Paramètres
fn:Function — Fonction ou méthode à appeler
| |
thisArg:Object — Le pointeur this de la fonction.
| |
argArray:Array — Les arguments de la fonction.
| |
returns:Boolean (default = true ) — Si la valeur est true, la fonction renvoie une valeur.
|
* — Quel que soit le renvoi de la fonction.
|
Eléments de l’API associés
La classe EmbeddedFontLineCreator implémente ISWFContext et intègre une police. D’autres classes peuvent charger un fichier SWF en fonction de EmbeddedFontLineCreator et accéder à la police incorporée.
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 charge tout d’abord le fichier EmbeddedFontLineCreator.swf et attend que la fonction de chargement aboutisse. Une fois le chargement réussit, la fonction d’écouteur d’événement createFlow()
crée un conteneur de texte et un enchaînement de texte. L’écouteur d’événement crée ensuite un compositeur d’enchaînements et associe le fichier SWF chargé à la propriété swfContext
du compositeur d’enchaînements. Cette association permet à une occurrence FontConsumer d’appeler des méthodes dans le contexte du fichier SWF chargé. Ayant accès au contexte de EmbeddedFontLineCreator, l’occurrence FontConsumer peut utiliser la police incorporée dans 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, 09:30 AM Z