【问题标题】:Dynamic text in Pango/CairoPango/Cairo 中的动态文本
【发布时间】:2015-05-04 22:15:45
【问题描述】:

我感觉我可能会在 Pango 中遗漏一些东西。 API 中的几乎所有内容似乎都旨在显示静态文本,但在特定位置绘制/移动光标的两个函数除外,这表明可能存在实现编辑文本的内置方法。

例如,要使用鼠标标记文本块(即更改两点之间的背景颜色),我可以为每次鼠标移动重新生成带有更改标签的文本,或者在 Cairo 中绘制矩形,然后使用 Pango在顶部绘制具有透明背景的文本。有没有办法在不重新生成或重绘整个屏幕的情况下将属性应用于范围?

同样,如果我让 Pango 自己绘制光标并处理按键事件,是否有替代重绘整个屏幕的替代方法?

GtkTextBuffer 不是一个选项 - 我在任何时候都没有所有文本,并且使用紧凑的二进制格式并使用一组不断变化的过滤器来计算需要动态显示的内容要高效得多。除了臃肿、多余和不优雅之外,它还非常缓慢。

【问题讨论】:

    标签: c++ gtk3 pangocairo


    【解决方案1】:

    在除了最稀疏的文档之外没有任何文档的情况下,我检查了 GtkTextView (https://git.gnome.org/browse/gtk+/tree/gtk/gtktextview.c) 的源代码以了解 pango 布局如何在 GTK 本身中使用。

    似乎每次按下键或鼠标更改标记区域时呈现窗口是其问题最少的问题,并且优化(虽然不如 GTK 灵活)超出了它们所使用的范围。

    例如,文本标记涉及将标签插入渲染树,重新计算树,然后对输出进行双缓冲——这应该是大量的过度杀伤,并为 3d 渲染保留。通过抓取输出图像然后渲染文本的子部分来加快滚动速度。

    我想彻底的解决方案是重新设计 GtkTextBuffer/GtkTextView 以更符合 MVC 模型,而不是预先要求全文,但现在我想我会坚持我对用户绘制的小优化小部件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-04
      • 1970-01-01
      • 2012-04-29
      • 1970-01-01
      • 1970-01-01
      • 2020-01-24
      • 1970-01-01
      • 2012-09-12
      相关资源
      最近更新 更多