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



我目前使用cairo/pango从动态文本生成原始图像数据。我的应用程序不是Gtk+GUI应用程序,只是一个原生的C++无头视频服务器。使用动态文本,我生成了覆盖的原始图像,然后在服务器处理并通过网络分发的视频流上进行阿尔法混合。该文本不涉及文本编辑,但给定文本,我会生成适合alpha混合的相应图像覆盖。

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

我一直在研究GtkTextView/GtkTextBuffer API,我认为它使用GtkTextTag更容易格式化。这些小部件显然具有广泛的编辑功能,但我只需要格式化功能。

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

问题:在所有标签都格式化了文本之后,我如何获得对原始格式化缓冲区(cairo image surface或widget pixbuf)的引用?

我一直在使用gtk_widget_get_pango_text()、pango_layout_new()、gtk.widget_create_pango_layout()例程,但由于没有屏幕,所以会出现各种错误。

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

谢谢,-Andres

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

另一方面,你正在从开罗的低级别绘图跳到gtk中的Widgets(在低级别使用开罗)。您可以考虑许多中间解决方案。你可以生成Latex并编译它。Markdown可以采用简单的格式。当然还有HTML,您甚至可以在其中使用CSS,并将其呈现为任何内容。

相关内容

  • 没有找到相关文章

最新更新