Eto: Создайте строку RTF, не беспокоя RichTextArea

Созданный на 29 мар. 2019  ·  12Комментарии  ·  Источник: picoe/Eto

Это запрос на улучшение.

У меня длинный список текстовых строк, каждая строка может иметь разный цвет. Я хочу добавить их в RichTextArea . Использование Append работает, но производительность оставляет желать лучшего.

Было бы здорово, если бы у нас был метод построения RTF-строки, не беспокоясь о RichTextArea , тогда мы могли бы установить RichTextArea.Rtf в построенную строку.

Обратите внимание, что хотя можно использовать другую библиотеку для создания RTF, но они используют разные классы / типы по сравнению с Eto (например, Font , Color ...), и я все еще хочу использовать метод Append на том же RichTextArea .

Самый полезный комментарий

Привет @katatunix , спасибо за запрос. Я действительно работал над чем-то в этом направлении (своего рода TextBuffer), который имеет все те же API, что и RichTextArea, но позволяет вам создавать его отдельно, а затем добавлять (или устанавливать) его в RichTextArea.

Одна вещь, которую я хотел бы сделать, - это сделать так, чтобы он мог быть построен в фоновом потоке, но, к сожалению, не все платформы поддерживают это. Я все еще расследую это.

Все 12 Комментарий

Привет @katatunix , спасибо за запрос. Я действительно работал над чем-то в этом направлении (своего рода TextBuffer), который имеет все те же API, что и RichTextArea, но позволяет вам создавать его отдельно, а затем добавлять (или устанавливать) его в RichTextArea.

Одна вещь, которую я хотел бы сделать, - это сделать так, чтобы он мог быть построен в фоновом потоке, но, к сожалению, не все платформы поддерживают это. Я все еще расследую это.

Если у вас есть код по этому поводу, я хотел бы взглянуть на него.

@LaraSQP Я только что загрузил свою работу в PR # 1507

Поскольку элемент управления RichTextArea обрабатывает только несколько свойств (шрифт + стиль, передний + задний цвет), почему бы не написать "простой" класс rtf для составления строки rtf, а затем передать его в RichTextArea.Rtf свойство?

Что-то вроде:

https://www.codeproject.com/Articles/30902/RichText-Builder-StringBuilder-for-RTF

Я что-то здесь упускаю и снова веду себя дебилом?

@LaraSQP нет, это полностью работает. Однако GTK не поддерживает RTF.

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

Не знал про GTK и RTF. Это облом.

Внешний построитель RTF не будет работать как есть из-за проблем, поднятых исходным плакатом (разные классы / типы по сравнению с Eto, например, Font, Color ...) и, в любом случае, поток RTF должен быть преобразован во что-то отображаемое с помощью GTK. Таким образом, ваш TextBuffer .

Штопать

@LaraSQP Вы _ можете_ теоретически построить RTF, используя внешний инструмент / api, а затем загрузить его в Eto. Вы можете использовать Eto's Font / Color и перевести их в RTF-формат, если это действительно необходимо.

Проблема с RTF, однако, заключается в том, что хотя он и является «стандартом», на самом деле он составлен по-разному в зависимости от платформы (по крайней мере, Mac или Windows). В частности, имена шрифтов, указанные в RTF, сильно различаются. Вы можете увидеть различия, используя TextEdit на Mac и WordPad в Windows.

Надеюсь это поможет.

Действительно грязно.

Надо сказать, что вы проделали большую работу с портом Linux. Вряд ли какое-либо снижение производительности, несмотря на частое использование нескольких шрифтов и цветов.

Однако тот же код в Windows - это слизняк.

Однако тот же код в Windows - это слизняк.

Да, не знаю, как это обойти ... FlowDocument работает очень медленно.

Поскольку производительность в Linux отличная, знаете ли вы, что она работает на Mac?

@LaraSQP, это должно быть довольно быстро и на macOS. по моему опыту, это просто WPF, который на данный момент работает довольно медленно. Я бы хотел найти способ сделать это быстрее (;

В таком случае считайте этот вопрос для меня закрытым.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги