Ускорение setTextFormat () - PullRequest
       18

Ускорение setTextFormat ()

0 голосов
/ 17 января 2010

У меня есть текст с очень длинным списком слов, который нужно выделить, и вызов метода setTextFormat (), по одному на каждое слово, занимает много лет. Есть какой-нибудь способ ускорить эту операцию? я пытался с TextField, не создаваемым в списке DisplayObject, чтобы обойти этап рендеринга, но я обнаружил, что производительность одинакова. Есть идеи?

Ответы [ 3 ]

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

Я настоятельно рекомендую вам взглянуть на новый режим Text Layout Framework для работы со стилями расширенного текста.

По сути, TLF имеет объект TextFlow, который содержит модель вашего текста, включая все соответствующие форматирование для конкретного диапазона. Это отличается от «представления» части отображения текста, которая будет управляться (в вашем случае редактируемый текст) отдельным компоновщиком потока и EditManager.

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

1 голос
/ 16 декабря 2010

Используйте TLF, и перед тем, как начать раскрашивать все, вызовите beginCompositeOperation (); и в конце вызов _objEditManager.endCompositeOperation (); Вот пример прямо из моего кода

_objFlow.interactionManager = _objEditManager;
                    _objEditManager.beginCompositeOperation();

                    DocColoringUtils.SetRegionColor(_objFlow, iStart, iEnd, BackgroundColor.TRANSPARENT, 1);

                    var colRegions:Vector.<Region> = _objResourceMediator.GetCurrentResourceRegions();
                    var objEditingExcerpt:Excerpt = _objExcerptingMediator.EditingExcerpt;

                    if (_objExcerptingMediator.InEditMode == true && objEditingExcerpt != null)
                    {
                        DocColoringUtils.ColorizeForEditMode(_objFlow, iStart, iEnd, colRegions, objEditingExcerpt.StartIndex, objEditingExcerpt.EndIndex, _objExcerptingMediator.SearchMatchRegions);
                    }
                    else
                    {
                        DocColoringUtils.ColorizeForNonEditMode(_objFlow, iStart, iEnd, colRegions, _objExcerptingMediator.SearchMatchRegions);
                    }
                    _objEditManager.endCompositeOperation();

                    _objFlow.interactionManager = _objSelectionManager;

Наконец, вы должны раскрашивать только то, что находится в видимом диапазоне +/- 300 символов. Затем при прокрутке перекрасить текущий видимый регион. Это работает для какого-то безумно большого документа на http://www.Dedoose.com.

0 голосов
/ 17 января 2010

, если это htmlText и слова, которые вы хотите выделить, помещены в теги типа <strong>, вам следует взглянуть на StyleSheet Объект, вы можете определить его стили загрузкой файла CSS или вы можете назначить стили следующим образом:

var style:StyleSheet = new StyleSheet();
var strong:Object = new Object(); 
strong.textDecoration = "underline";
style.setStyle("strong", strong);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...