Быстрый способ установить формат текста для диапазона текста с помощью TLF - PullRequest
0 голосов
/ 25 января 2010

Мне нужно установить текстовый формат для некоторых токенов в виде простого текста. Я пытаюсь использовать Text Layout Framework для повышения скорости работы, но я обнаружил, что TLF намного медленнее (в моих тестах 10X), чем старый setTextFormat (). Для каждого токена я вызываю эту функцию:

public function setTextFormat(format:TextLayoutFormat, begin:int, end:int):void{

            var selection:SelectionState = new SelectionState(this._textFlow, begin, end, this._normalFormat);
            IEditManager(_textFlow.interactionManager).applyLeafFormat(format, selection);

        }

Есть ли более быстрый и умный способ выполнить эту операцию?

Спасибо

1 Ответ

1 голос
/ 25 января 2010

Большую часть времени обработки в этих обновлениях TLF составляет пересчет и обновление дисплея. Ассоциация определенных форматов с частями вашей текстовой модели намного менее интенсивна. К сожалению, вызов applyLeafFormat () выполняет как операции форматирования, так и операции повторного отображения. Вам нужно разделить эти две части.

Вместо того, чтобы иметь дело только с вашими токенами с точки зрения их абсолютных позиций, вы можете разделить их на отдельные объекты FlowElement (скорее всего, SpanElements), которые можно однозначно идентифицировать с помощью свойства "id". Как только ваши токены находятся в отдельных элементах, становится простым итерировать их множество, изменять характеристики формата и только принудительно обновлять отображение в конце.

for each (var id:String in ids) {
    var element:SpanElement = _textFlow.getElementByID(id) as SpanElement;
    if (element) {
        element.format = getAppropriateFormatForElement(element);
    }
}
_textFlow.flowComposer.updateAllControllers();

Кроме того, разделение ваших токенов на элементы также открывает дверь для сохранения вашей классификации токенов в самих элементах, освобождая вас от необходимости поддерживать отдельную структуру отображения классификации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...