我可以在没有gtk_init()/ gtk_main()的情况下使用GtkTextView小部件吗?

时间:2017-01-05 21:38:25

标签: gtk gtk3 pangocairo

我目前使用cairo / pango从动态文本生成原始图像数据。我的应用程序不是Gtk + GUI应用程序,只是本机C ++无头视频服务器。使用动态文本,我生成了覆盖的原始图像,然后将它们混合在服务器处理和通过网络分发的视频流上。此文本不涉及文本编辑,但是给定文本我生成适合于alpha混合的相应图像叠加。

但是,我需要更多格式灵活性(缩进,居中对齐等)。在cairo / pango中进行大量格式化是很痛苦的。

我一直在查看GtkTextView / GtkTextBuffer API,我认为使用GtkTextTag可以更轻松地进行格式化。这些小部件显然具有广泛的编辑功能,但我只需要格式化功能。

问题:我可以使用GtkTextView / GtkTextBuffer / GtkTextTag 而不是通过gtk_init()/ gtk_main()运行主要的gtk +循环吗?

问题:如何在所有标签格式化文本后获得对原始格式化缓冲区(cairo图像表面或小部件pixbuf)的引用?

我一直在使用gtk_widget_get_pango_context(),pango_layout_new(),gtk_widget_create_pango_layout(),例程,但由于没有屏幕,因此会出现各种错误。

编辑:附加信息:我想要做的只是使用GtkTextView / GtkTextBuffer / GtkTextTag例程作为一种独立的库来生成渲染和格式化文本的图像数据。

谢谢, -Andres

1 个答案:

答案 0 :(得分:3)

基本上没有。你不能在没有init()和/或mainloop()的情况下使用Gtk。为什么?因为任何绘图事件都排队,并且只在空闲循环中绘制。没有mainloop()你就没有空闲时间。

另一方面,你正在从开罗的低级绘图跳到gtk中的小部件(它使用低水平的开罗)。您可以考虑许多中间解决方案。您可以生成Latex并进行编译。 Markdown可以采用简单格式化。当然还有HTML,你甚至可以使用CSS,并将其呈现给任何东西。