| Пакет | flashx.textLayout.compose |
| Интерфейс | public interface ISWFContext |
| Средство реализации | TextContainerManager |
| Язык версии: | ActionScript 3.0 |
| Версии среды выполнения: | Flash Player 10, AIR 1.5 |
Приложение может использовать этот интерфейс для управления созданием TextLine по двум причинам.
- Многократное использование встроенного шрифта: если приложению требуется использовать шрифт, встроенный в загруженный SWF-файл, оно может получить доступ к шрифту, если объект TextLine создан в контексте загруженного SWF-файла.
-
Многократное использование существующих экземпляров TextLine: это позволяет быстрее выполнять повторную компоновку существующих экземпляров TextLine. TLF многократно использует существующие экземпляры TextLine во внутреннем режиме. TLF повторно использует объект TextLine путем вызова метода
TextBlock.recreateTextLine()вместоTextBlock.createTextLine(), когда TLF распознает, что TextLine уже существует.
В приложении могут быть дополнительные объекты TextLine, доступные для многократного использования. Чтобы повторно использовать существующие экземпляры TextLine вручную, выполните следующие действия.
- Перехватывайте вызовы
TextBlock.createTextLine(), а затем - вызовите метод
TextBlock.recreateTextLine()с существующим объектом TextLine вместо методаTextBlock.createTextLine().
Однако следует учитывать, что метод TextBlock.recreateTextLine() доступен только Flash Player 10.1 и более поздних версиях.
Связанные элементы API
| Метод | Определено | ||
|---|---|---|---|
Способ вызова метода в контексте, управляемом клиентом. | ISWFContext | ||
callInContext | () | метод |
public function callInContext(fn:Function, thisArg:Object, argArray:Array, returns:Boolean = true):*| Язык версии: | ActionScript 3.0 |
| Версии среды выполнения: | Flash Player 10, AIR 1.5 |
Способ вызова метода в контексте, управляемом клиентом.
Параметры
fn:Function — Вызываемая функция или метод
| |
thisArg:Object — Указатель функции
| |
argArray:Array — Аргументы функции
| |
returns:Boolean (default = true) — Если true, функция возвращает значение
|
* — При любом значении, возвращаемом функцией.
|
Связанные элементы API
Класс EmbeddedFontLineCreator внедряет ISWFContext и встраивает шрифт. Другие классы могут загрузить SWF-файл, основанный на EmbeddedFontLineCreator, и получить доступ к вложенному шрифту.
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);
}
}
}
Класс FontConsumer сначала загружает файл EmbeddedFontLineCreator.swf и ожидает функции загрузки для успешного выполнения. При успешной загрузке функция прослушивателя событий createFlow() создает контейнер текста и поток текста. Затем прослушиватель событий создает компоновщик потока и связывает загруженный SWF-файл со свойством swfContext компоновщика потока. Эта ассоциация позволяет экземпляру FontConsumer вызывать методы в пределах контекста загруженного SWF-файла. Получив доступ к контексту EmbeddedFontLineCreator, экземпляр FontConsumer может использовать шрифт, встроенный в 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, 11:34 AM Z