Paket | flashx.textLayout.compose |
Gränssnitt | public interface ISWFContext |
Implementorer | TextContainerManager |
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 10, AIR 1.5 |
Det finns två orsaker till att ett program använder det här gränssnittet för att styra skapandet av textrader:
- Återanvända ett inbäddat teckensnitt: Om ett program vill använda ett teckensnitt som bäddats in i en inläst SWF-fil kan programmet komma åt teckensnittet om en TextLine skapas i den inlästa SWF-filens sammanhang.
-
Återanvända befintliga TextLine-instanser: Återanvändning av befintliga TextLine-instanser kan medföra snabbare omdisponering. TLF återanvänder befintliga TextLine-instanser internt. TLF återanvänder en TextLine genom att anropa
TextBlock.recreateTextLine()
i stället förTextBlock.createTextLine()
när TLF identifierar att en TextLine finns kvar.
Programmet kan ha ytterligare TextLine-instanser som kan återanvändas. Så här återanvänder du befintliga TextLine-instanser manuellt:
- fånga anrop till
TextBlock.createTextLine()
och - anropa sedan
TextBlock.recreateTextLine()
med den kvarvarande TextLine-instansen i stället förTextBlock.createTextLine()
.
Tänk på att TextBlock.recreateTextLine()
bara är tillgängligt i Flash Player 10.1 och senare versioner.
Relaterade API-element
Metod | Definieras med | ||
---|---|---|---|
Ett sätt att anropa en metod i ett klientstyrt sammanhang. | ISWFContext |
callInContext | () | metod |
public function callInContext(fn:Function, thisArg:Object, argArray:Array, returns:Boolean = true):*
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 10, AIR 1.5 |
Ett sätt att anropa en metod i ett klientstyrt sammanhang.
Parametrar
fn:Function — Den funktion eller metod som ska anropas.
| |
thisArg:Object — Funktionens this-pekare.
| |
argArray:Array — Funktionens argument.
| |
returns:Boolean (default = true ) — Om värdet är true returnerar funktionen ett värde.
|
* — Det funktionen returnerar, om den returnerar något.
|
Relaterade API-element
Klassen EmbeddedFontLineCreator implementerar ISWFContext och bäddar in ett teckensnitt. Andra klasser kan läsa in en SWF-fil baserat på EmbeddedFontLineCreator och komma åt det inbäddade teckensnittet.
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); } } }
Klassen FontConsumer läser först in filen EmbeddedFontLineCreator.swf och väntar på att inläsningsfunktionen ska slutföras. När inläsningen är klar skapar händelseavlyssnarfunktionen createFlow()
en textbehållare och ett textflöde. Händelseavlyssnaren skapar sedan en flödesdisposition och associerar den inlästa SWF-filen med egenskapen swfContext
för flödesdispositionen. Tack vare den här associationen kan en FontConsumer-instans anropa metoder i den inlästa SWF-filens sammanhang. Med tillgång till sammanhanget för EmbeddedFontLineCreator kan FontConsumer-instansen använda det teckensnitt som bäddats in i 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, 01:40 PM Z