Pakket | flashx.textLayout.compose |
Interface | public interface ISWFContext |
Geïmplementeerd door | TextContainerManager |
Taalversie: | ActionScript 3.0 |
Runtimeversies: | Flash Player 10, AIR 1.5 |
Er zijn twee redenen voor een toepassing om deze interface te gebruiken om het maken van TextLine te besturen:
- Een ingesloten lettertype opnieuw gebruiken: als een toepassing een lettertype wilt gebruiken dat is ingesloten in een geladen SWF-bestand, heeft de toepassing toegang tot het lettertype als een TextLine is gemaakt in de context van het geladen SWF-bestand.
-
Bestaande TextLine-instanties opnieuw gebruiken: bestaande TextLine-instanties opnieuw gebruiken kan resulteren in snellere tijden voor opnieuw samenstellen. TLF gebruikt intern bestaande TextLine-instanties opnieuw. TLF gebruik een TextLine opnieuw door
TextBlock.recreateTextLine()
op te roepen in plaats vanTextBlock.createTextLine()
wanneer TLF herkent dat een TextLine bestaat.
Uw toepassing kan aanvullende TextLine-instanties bevatten die opnieuw kunnen worden gebruikt. Zo gebruikt u bestaande TextLine-instanties handmatig opnieuw:
- onderschep oproepen aan
TextBlock.createTextLine()
, vervolgens - roep
TextBlock.recreateTextLine()
met de bestaande TextLine-instantie in plaats vanTextBlock.createTextLine()
.
Opgelet: houd ermee rekening dat de TextBlock.recreateTextLine()
alleen beschikbaar is vanaf Flash Player 10.1.
Verwante API-elementen
Methode | Gedefinieerd door | ||
---|---|---|---|
Een manier om in een door de client beheerde context een methode op te roepen. | ISWFContext |
callInContext | () | methode |
public function callInContext(fn:Function, thisArg:Object, argArray:Array, returns:Boolean = true):*
Taalversie: | ActionScript 3.0 |
Runtimeversies: | Flash Player 10, AIR 1.5 |
Een manier om in een door de client beheerde context een methode op te roepen.
Parameters
fn:Function — De functie of methode die wordt opgeroepen
| |
thisArg:Object — De aanwijzer voor de functie
| |
argArray:Array — Het argument voor de functie
| |
returns:Boolean (default = true ) — Indien true, wordt door de functie een waarde geretourneerd
|
* — Wat de functie retourneert, indien van toepassing.
|
Verwante API-elementen
De EmbeddedFontLineCreator-klasse implementeert ISWFContext en sluit een lettertype in. Andere klassen kunnen een SWF-bestand laden op basis van EmbeddedFontLineCreator en het ingesloten lettertype openen.
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); } } }
De FontConsumer-klasse laadt eerst het EmbeddedFontLineCreator.swf-bestand en wacht tot de laadfunctie is voltooid. Wanneer het laden is voltooid, maakt de gebeurtenislistenerfunctie createFlow()
een tekstcontainer en een tekstflow. De gebeurtenislistener maakt vervolgens een flowcomposer en koppelt het geladen SWF-bestand aan de swfContext
-eigenschap van de flowcomposer. Met deze koppeling kan een FontConsumer-instantie methoden oproepen binnen de context van het geladen SWF-bestand. Met toegang tot de context van EmbeddedFontLineCreator, kan de FontConsumer-instantie het lettertype gebruiken dat is ingesloten 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(); } } }
Wed Jun 13 2018, 11:42 AM Z