| Pakiet | flashx.textLayout.compose |
| Interfejs | public interface ISWFContext |
| Implementory | TextContainerManager |
| Wersja języka: | ActionScript 3.0 |
| Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5 |
Istnieją dwa powody wykorzystania tego interfejsu w aplikacji do sterowania tworzeniem obiektów TextLine:
- Ponowne wykorzystanie osadzonej czcionki: użycie w aplikacji czcionki osadzonej w załadowanym pliku SWF jest możliwe, jeśli wiersz TextLine został utworzony w kontekście tego pliku.
-
Ponowne wykorzystanie istniejących instancji klasy TextLine: wykorzystanie istniejących instancji klasy TextLine może przyspieszyć ponowne układanie treści. Architektura TLF wewnętrznie wykorzystuje istniejące instancje klasy TextLine. Ponowne wykorzystanie obiektu TextLine w architekturze TLF odbywa się poprzez wywołanie metody
TextBlock.recreateTextLine()zamiastTextBlock.createTextLine()po rozpoznaniu, że obiekt TextLine jeszcze istnieje.
W aplikacji mogą istnieć dodatkowe instancje klasy TextLine, które można ponownie wykorzystać. Aby ręcznie wymuszać ponowne użycie istniejących instancji klasy TextLine, należy:
- Przechwytywać (trap) wywołania metody
TextBlock.createTextLine(), a następnie... - wywołać metodę
TextBlock.recreateTextLine()z jeszcze istniejącą instancją klasy TextLine zamiast wywoływać metodęTextBlock.createTextLine().
Należy jednak pamiętać, że metoda TextBlock.recreateTextLine() jest dostępna tylko w programie Flash Player 10.1 i późniejszych jego wersjach.
Powiązane elementy interfejsu API
| Metoda | Zdefiniowane przez | ||
|---|---|---|---|
Umożliwia wywołanie metody w kontekście kontrolowanym przez klienta. | ISWFContext | ||
callInContext | () | metoda |
public function callInContext(fn:Function, thisArg:Object, argArray:Array, returns:Boolean = true):*| Wersja języka: | ActionScript 3.0 |
| Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5 |
Umożliwia wywołanie metody w kontekście kontrolowanym przez klienta.
Parametry
fn:Function — Funkcja lub metoda do wywołania.
| |
thisArg:Object — Wskaźnik this dla funkcji.
| |
argArray:Array — Argumenty funkcji.
| |
returns:Boolean (default = true) — Wartość true oznacza, że funkcja zwraca wartość.
|
* — Informacje o wartościach zwracanych przez funkcję.
|
Powiązane elementy interfejsu API
Klasa EmbeddedFontLineCreator implementuje obiekt ISWFContext i osadza czcionkę. Pozostałe klasy mogą załadować plik SWF na podstawie klasy EmbeddedFontLineCreator i uzyskać dostęp do osadzonej czcionki.
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);
}
}
}
Klasa FontConsumer najpierw ładuje plik EmbeddedFontLineCreator.swf i czeka na pomyślne wykonanie funkcji load. Po pomyślnym wykonaniu ładowania funkcja detektora zdarzeń createFlow() tworzy kontener tekstu i przepływu tekstu. Następnie detektor zdarzeń tworzy układacz przepływu i wiąże załadowany plik SWF z właściwością swfContext układacza przepływu. To powiązanie umożliwia instancji FontConsumer wywoływanie metod w kontekście załadowanego pliku SWF. Mając dostęp do kontekstu pliku EmbeddedFontLineCreator, instancja FontConsumer może użyć czcionki osadzonej w pliku 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, 12:06 PM Z