我有一种感觉,我可能会因为pango缺少一些东西。API中的几乎所有内容似乎都旨在显示静态文本,除了两个功能以在特定位置绘制/移动光标,这表明可能有一种内置的方式来实现编辑文本。
例如,要用鼠标标记一块文本(即在两个点之间更改背景颜色),我可以为每次鼠标移动带有更改标签的文本,或者在开罗中绘制矩形,然后使用pango在顶部绘制具有透明背景的文本。是否有一种将属性应用于范围的方法,而无需再生或重新绘制整个屏幕?
同样,如果我让pango绘制光标并处理钥匙按下事件,是否可以替代整个屏幕?
gtktextbuffer不是一个选择 - 我随时都不拥有所有文本,并且从紧凑的二进制格式并使用一组不断变化的过滤器的集合可以即时显示需要显示的内容要高得多。除了被肿,多余的和不贵的人,它也很慢。
在没有最稀少的文档之外,我检查了gtktextview(https://git.gnome.org.org/browse/gtk growse/gtk tree/gtk/gtk/gtktextview.c.c.c.c.c.c.c.c.c.c.c.c.ctview。)查看GTK本身中如何使用Pango布局。
看来,每当按下键或鼠标更改鼠标时,标记的区域是其问题的最少,而优化(而比GTK的灵活性也不那么灵活)都超出了它们的使用。
例如,文本标记涉及将标签插入渲染树中,重新计算树,然后对输出进行双重屏蔽 - 这应该是巨大的过度杀伤,并保留用于3D渲染。滚动是通过抓住输出的图像然后渲染文本的子段来加速滚动的。
我想彻底的解决方案是返回gtktextbuffer/gtktextview,以更符合MVC模型,而不是提前更高文本,但是现在我想我会坚持对用户划分的次要优化小部件。