| Paket | flashx.textLayout.compose |
| Schnittstelle | public interface ISWFContext |
| Umsetzer | TextContainerManager |
| Sprachversion: | ActionScript 3.0 |
| Laufzeitversionen: | Flash Player 10, AIR 1.5 |
Eine Anwendung verwendet diese Schnittstelle aus zwei Gründen zur Steuerung der TextLine-Erstellung:
- Wiederverwendung einer eingebetteten Schriftart: wenn eine Anwendung eine Schriftart verwenden möchte, die in eine geladene SWF-Datei eingebettet ist, kann die Anwendung auf die Schriftart zugreifen, wenn im Kontext der geladenen SWF-Datei eine TextLine erstellt wird.
-
Wiederverwendung vorhandener TextLine-Instanzen: die Wiederverwendung von vorhandenen TextLine-Instanzen kann zur schnelleren Wiederzusammensetzung führen. TLF nutzt die interne Wiederverwendung vorhandener TextLine-Instanzen. TLF kann eine TextLine wiederverwenden, indem
TextBlock.recreateTextLine()stattTextBlock.createTextLine()aufgerufen wird, wenn TLF erkennt, dass eine TextLine vorhanden ist.
Ihre Anwendung hat möglicherweise weitere TextLine-Instanzen, die wiederverwendet werden können. So können Sie vorhandene TextLine-Instanzen wiederverwenden:
- Fangen Sie Aufrufe von
TextBlock.createTextLine()ab und - rufen Sie
TextBlock.recreateTextLine()mit der vorhandenen TextLine-Instanz auf anstattTextBlock.createTextLine().
Beachten Sie jedoch, dass TextBlock.recreateTextLine() nur in Flash Player 10.1 und höher verfügbar ist.
Verwandte API-Elemente
| Methode | Definiert von | ||
|---|---|---|---|
Eine Möglichkeit zum Aufrufen einer Methode in einem vom Client gesteuerten Kontext. | ISWFContext | ||
callInContext | () | Methode |
public function callInContext(fn:Function, thisArg:Object, argArray:Array, returns:Boolean = true):*| Sprachversion: | ActionScript 3.0 |
| Laufzeitversionen: | Flash Player 10, AIR 1.5 |
Eine Möglichkeit zum Aufrufen einer Methode in einem vom Client gesteuerten Kontext.
Parameter
fn:Function — Die aufzurufende Funktion oder Methode.
| |
thisArg:Object — Dies ist der Zeiger für die Funktion.
| |
argArray:Array — Die Argumente für die Funktion.
| |
returns:Boolean (default = true) — Falls „true“, gibt die Funktion einen Wert zurück.
|
* — Von der Funktion zurückgegebenes Ergebnis, falls vorhanden.
|
Verwandte API-Elemente
Die EmbeddedFontLineCreator-Klasse implementiert ISWFContext und bettet eine Schriftart ein. Andere Klassen können SWF-Dateien auf Basis des EmbeddedFontLineCreator laden und auf die eingebettete Schriftart zugreifen.
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);
}
}
}
Die FontConsumer-Klasse lädt zuerst die Datei „EmbeddedFontLineCreator.swf“ und wartet auf die erfolgreiche Ausführung der Ladefunktion. War das Laden erfolgreich, erstellt die Ereignis-Listener-Funktion createFlow() einen Textcontainer sowie einen Textfluss. Der Ereignis-Listener erstellt dann einen Flow-Composer und verknüpft die geladene SWF-Datei mit der swfContext-Eigenschaft des Flow-Composers. Durch diese Verknüpfung kann eine FontConsumer-Instanz Methoden innerhalb des Kontexts der geladenen SWF-Datei aufrufen. Dank des Zugriffs auf den Kontext von EmbeddedFontLineCreator kann die FontConsumer-Instanz die im EmbeddedFontLineCreator eingebettete Schriftart verwenden.
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, 10:04 AM Z