← All posts tagged tlf

Constantiner
Adobe tlf Когда пытаешься в интернете найти инфу об устройстве bidirectional text в Adobe TLF, то попадаешь исключительно на рекламу, как классно он в TLF поддерживается. Очевидно, что конкретика в коде. Так не хочется :(
Constantiner
Adobe Flex tlf К предыдущему #1114763 и #1114706. Только три вида операций могут сливаться. Эту инфу можно найти в коде метода merge класса flashx.textLayout.operations.CompositeOperation. Операции эти суть InsertTextOperation, SplitParagraphOperation и DeleteTextOperation. Может, кому пригодится.
Constantiner
Adobe Flex tlf В классе flashx.textLayout.operations.FlowOperation есть метод tlf_internal function merge(operation:FlowOperation):FlowOperation коммент к которому гласит:

Combine this operation with another operation if the result can
be represented as a single operation. In general, operations cannot be
merged. But sequential inserts or deletes may be mergeable.

Ну не суки ли написать такой важный коммент там, где можно прочитать лишь если залезть в код? :(
Constantiner
Adobe fail Flex tlf Опять сграный TLF. Ну вот хрена он кэширует операции изменения в текстовом поле? Если вставлять в текст одну и ту же букву, то он будет каждый раз присылать событие, в котором InsertTextOperation будет один и тот же объект, а вот вставляемый текст разный. Ну вот нафига?
Constantiner
Adobe Flex tlf В продолжение #1106352 о пиздатости дизайна TLF и Flex.

Ну вот я решил отнаследовать RichEditableTextContainerManager и, конечно, отнаследовать RichEditableText, в котором этот отнаследованный менеджер будет использоваться. Все, вроде, здорово. Мне даже не надо отнаследоваться от TextArea так как у нас есть механизм скинов, в котором мы можем легко и просто подменить наш RichEditableText на RichEditableTextExt. Конечно, тут тоже не все пучком. Ибо скин приходится полностью копировать, но это уже баян и не смешно.

Но метод создания RichEditableTextContainerManager в RichEditableText, который мне надо переопределить, состоит из одной строчки:

return new RichEditableTextContainerManager(this, staticConfiguration)
При этом staticConfiguration — это приватное статическое поле. Понятно, что код его создания придется копировать тоже. Ну вот ничего у Адобов нельзя сделать быстро просто и красиво. А ведь когда-то так не было. Как-то проще все было…
Constantiner
Adobe Flex tlf Ненавижу Адобов за кривизну и непродуманность года :( У них в TextArea, а если точнее, то в RichEditableText, есть поле textContainerManager типа TextContainerManager. Он якобы является фасадом для ContainerController, решая якобы задачи производительности. Вариант убогий, но приемлемый. Убогость варианта в том, что к этому полю доступ идет через контейнер (в данном случае RichEditableText), который обычно не отнаследован в других контролах, а идет композитом. Соответственно, красиво и универсально передавать некому классу TextFlow уже не получится. Надо передавать контейнер и иметь все замечательные проверки его типа и кастинги.

Тем не менее, этот TextContainerManager решает вопросы перехвата событий мыши в виде событий, когда ContainerController предполагает наследование и переопределение соответствующих обработчиков. Решение кривоватое (обращение только через контейнер), но решение. А теперь такой момент, что контекстное меню они решили из этого класса исключить. Ничего страшного. Сделаем свой ContainerController, в котором переопределим menuSelectHandler. Но в итоге оказывается, что старый ContainerController в TextFlow уже не заменить столь безболезненно, особенно ничего не зная о нашем контейнере и оперируя лишь TextFlow (как нам этого бы и хотелось).

Дело в том: что этот TextContainerManager имеет внутренний класс, отнаследованный от ContainerController, на который жестко, а не по родителям или интерфейсу завязан. То есть распутать их нельзя. NPE обеспечено. Они ссылаются друг на друга и ввиду того, что TMContainerController — класс внутренний, он не наследуется и не подменяется.

В итоге сейчас пойду наследовать TextContainerManager, что все равно предполагает, что придется общаться с контейнером.

Ух, Адобы, кривые вы уроды! И все это на фоне чрезмерной усложненности TLF, который почему-то должен быть MVC. Хотя никто не может в точности сказать, где там M, где V, а где C. Ибо роли нечетки размазаны тонким слоем по хлебу :(

Я высказался :)
Constantiner
Flash Win Adobe Flex tlf Я сцуко победитель TLF! Все косяки разрулил, все сделал очень няшно. Практически полностью доволен. Проявил нед/женную выдержку, героизм, смекалку и поисковые навыки :)
Constantiner
Flash Adobe fail Flex tlf Вот строчка из кода TLF (клас FlowLeafElement):
tlf_internal override function getEventMirror():EventDispatcher
Вроде, ничего страшного. А теперь ASDoc к этому методу:
Gets the EventDispatcher associated with this FlowElement. Use the functions
of EventDispatcher such as setEventHandler() and removeEventHandler()
to capture events that happen over this FlowLeafElement object. The
event handler that you specify will be called after this FlowElement object does
the processing it needs to do.


Ну вы поняли? Человек, писавший этот код, считает, что у EventDispatcher есть методы setEventHandler и removeEventHandler. И эти люди запрещают мне ковыряться в носу!
Constantiner
Flash Adobe Flex tlf InlineGraphicElement is final. TLF — реальное говно. Реальное. У него столько лишних возможностей, но чтобы его расширить для довольно очевидных случаев (типа адекватного поведения курсора и интерактива для встроенной в текст графики) надо тупо дублировать код и упираться в private, final-классы и прочее говноедство. Уйду я от тебя, Adobe. Все грожусь, но рано или поздно уйду. Еще несколько лет назад можно было нормально разрабатывать. Но теперь произведено столько ужасного нового говнокода, что я не закрываю Google :( А я хочу просто воплощать идеи и требования. А не говноедствовать.
Constantiner
Flash Adobe Flex tlf Пять тысяч строк копипасты из-за того, что эти говнари сделали поле приватным. Adobe, гори в аду! За такой код убивают сразу и надолго :(
Constantiner
Flash Adobe Flex tlf Сцуко вы не поверите я заембедил фонты флекс 3 прейложенье и фонты там cff прешлось компилить во флекс читыри и загружать ебацца нахуй блять
Constantiner
Flash Adobe Flex tlf В общем, как я понял, при использовании Flex 3 совместно с TLF шансов использовать embedded fonts нет. Ибо TLF поддерживает только шрифты, заембеденные как CFF, а Flex 3 такой embed не поддерживает. Прав ли я? Это уже не говоря о том, что Flex 3 несовместим с TLF в области embedded fonts еще и по части SWFContext. Честно, у меня уже злости нет. Просто опускаются руки :(
Constantiner
Flash Adobe Flex tlf И все же инженеры из Adobe мудаки :( Все по поводу этого вот #1010011 Даже те хаки, что предлагаются, расчитаны на Flex 4, в то время как TLF типа не привязана к Flex. Вот и получается, что ни встраиваемых шрифтов искаропки, ни решений/хаков, которые подошли бы просто в любой ситуации :( Мудаки, хуле. Правая рука не знает, на что дрочит левая.
Constantiner
Flash Flex tlf В итоге зашаманил отображение HTML+CSS из подружаемых файлов. Осталась проблема только с img. Ну не хочет оно отображаться как отдельная картинка (то есть идет текст, потом картинка, потом опять текст). При этом если ставить ей align="left" или right — идет нормальное обтекание, а вот чтобы ьезо всякого обтекания картинка в тексте — не идет :( Злобно все. Тыкаюсь дальше :)
Constantiner
Flash Flex tlf Продолжаю мучаться с TLF. А я реально мучаюсь, не доставляет он мне и капли радости. Каждый шажок — огромный стопор, куча доки итд. Ну вот как просто тупо вывести содержимое TextFlow в строку для дебага? Ну почему эти контрацептивы не реализовали toString() и вообще пренебрегают реализацией toString()?
Constantiner
Flash Adobe tlf А, может, кто знает какой-нибудь фрэймворк или либу над TLF, решающую простые задачи простыми вызовами? Или описания как проще и без гемора отобразить HTML+CSS? Это к #1012377
Constantiner
Flash Adobe tlf Я правда не понимаю, зачем Адобы в TLF понаписали столько сложного кода, который при этом не умеет искаропки в две строчки отобразить HTML+CSS. Или я что-то упустил? Или правда всем так нравится городить 50 строк конфигурации и читать тонну доки ради самых распространенных задач?
Constantiner
Flash Flex tlf Так и не понял я, как в TLF сделать чтобы заэмбеденный шрифт отображался в точности так же, как остальные в приложении. И мне одному кажется, что все же TLF немного переусложнено для повседневного использования?