【问题标题】:can I use GtkTextView widget without gtk_init() / gtk_main()?我可以在没有 gtk_init() / gtk_main() 的情况下使用 GtkTextView 小部件吗?
【发布时间】:2017-01-05 21:38:25
【问题描述】:

我目前使用 cairo/pango 从动态文本生成原始图像数据。我的应用程序不是 Gtk+ GUI 应用程序,只是本机 C++ 无头视频服务器。使用动态文本,我为叠加层生成原始图像,然后将它们与服务器处理并通过网络分发的视频流进行 alpha 混合。该文本不涉及文本编辑,但给定文本,我会生成适合 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 例程作为一种独立库,用于生成渲染和格式化文本的图像数据。

谢谢, -安德烈斯

【问题讨论】:

  • “在 cairo/pango 中进行大量格式化很痛苦”?要求 GTK+ 作为依赖项也很痛苦。哪个更糟?在我看来,试图强迫一个软件做一些它不是为它设计的事情似乎比找到一个可以轻松完成工作的东西或使用一个更难完成的工作的软件更难。
  • 请注意,我不想在上面的评论中显得刻薄,但我真的认为你的计划很难实施。出于这个原因,我也不知道这是否可能。
  • 简短回答是否定的。 GTK 需要先用 gtk_init() 初始化。 gtk_main() 启动循环,否则 GTKTextView 将不会获得任何图形更新。那里可能有一个库可以满足您的需求,但这将是一个非常广泛的答案。

标签: gtk gtk3 pangocairo


【解决方案1】:

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

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

【讨论】:

  • 感谢您提出其他解决方案的建议。这让我重新思考了我的整个方法——谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-31
  • 2019-01-31
  • 2016-08-11
  • 2021-08-10
  • 2021-07-28
  • 1970-01-01
相关资源
最近更新 更多