gpt4 book ai didi

c++ - Pango/Cairo 中的动态文本

转载 作者:太空狗 更新时间:2023-10-29 21:40:58 26 4
gpt4 key购买 nike

我觉得我可能会错过 Pango 的一些东西。 API 中的几乎所有内容似乎都适合显示静态文本,除了在特定位置绘制/移动光标的两个函数除外,这表明可能有一种内置的方式来实现编辑文本。

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

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

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

最佳答案

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

每次按下键或鼠标更改标记区域时渲染窗口似乎是其最小的问题,优化(虽然不如 GTK 灵活)超出了它们的用途。

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

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

关于c++ - Pango/Cairo 中的动态文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30040954/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com