могу ли я использовать виджет GtkTextView без gtk_init () / gtk_main ()?

В настоящее время я использую cairo / pango для создания необработанных данных изображения из динамического текста. Мое приложение не является приложением с графическим интерфейсом Gtk +, а просто встроенным видеосервером на C ++. Используя динамический текст, я сгенерировал необработанные изображения для наложений, а затем смешал их по альфа-каналу с видеопотоками, которые сервер обрабатывает и распространяет по сети. Для этого текста не требуется редактирование текста, но для данного текста я создаю соответствующее наложение изображения, подходящее для альфа-смешивания.

Однако мне нужна большая гибкость форматирования (отступы, выравнивание по центру и т. Д.). Выполнение обширного форматирования в cairo / pango болезненно.

Я смотрел на API GtkTextView / GtkTextBuffer и думаю, что форматирование с помощью GtkTextTag проще. Эти виджеты, очевидно, имеют обширные возможности редактирования, но мне нужны только возможности форматирования.

Вопрос: могу ли я использовать GtkTextView / GtkTextBuffer / GtkTextTag без выполнения основного цикла gtk + через gtk_init () / gtk_main ()?

Вопрос: как мне получить ссылку на буфер необработанного форматирования (поверхность изображения cairo или pixbuf виджета) после того, как все теги отформатировали текст?

Я использовал подпрограммы gtk_widget_get_pango_context (), pango_layout_new (), gtk_widget_create_pango_layout (), но получаю всевозможные ошибки из-за отсутствия экрана.

Изменить: Дополнительная информация: то, что я пытаюсь сделать, по сути, использовать только процедуры GtkTextView / GtkTextBuffer / GtkTextTag как своего рода автономную библиотеку для создания данных изображения визуализированного и отформатированного текста.

Спасибо, -Андрес


person Andres Gonzalez    schedule 05.01.2017    source источник
comment
Делать обширное форматирование в cairo / pango больно? Требовать GTK + в качестве зависимости также болезненно. Что хуже? Попытка заставить программу делать что-то, для чего она не предназначена, кажется мне труднее, чем найти что-то, что с легкостью выполнит эту работу, или использовать более сложную программу, предназначенную для этой работы.   -  person oldtechaa    schedule 06.01.2017
comment
В качестве примечания, я не хочу показаться злым в своем комментарии выше, но я действительно думаю, что ваш план будет очень сложно заставить работать. По этой причине я тоже не знаю, возможно ли это.   -  person oldtechaa    schedule 06.01.2017
comment
Короткий ответ - нет. GTK необходимо сначала инициализировать с помощью gtk_init (). gtk_main () запускает цикл, без которого GTKTextView не получит никаких графических обновлений. Вероятно, существует библиотека, которая будет делать то, что вы хотите, но это был бы очень широкий ответ.   -  person Errol van de l'Isle    schedule 06.01.2017


Ответы (1)


В основном нет. Вы не можете использовать Gtk без init () и / или mainloop (). Почему? Потому что любое событие рисования ставится в очередь и отрисовывается только в цикле ожидания. Без mainloop () у вас нет простоя.

С другой стороны, вы переходите с низкоуровневого рисования в Каире на виджеты в gtk (который использует Каир на низком уровне). Есть много промежуточных решений, которые вы могли бы рассмотреть. Вы можете сгенерировать Latex и скомпилировать его. Markdown может принимать простое форматирование. Конечно, есть HTML, где вы даже можете использовать CSS и рендерить что угодно.

person jcoppens    schedule 06.01.2017
comment
Я ценю ваше предложение относительно других решений. Это заставило меня переосмыслить весь свой подход - спасибо - person Andres Gonzalez; 07.01.2017