我有一个程序在屏幕上显示一个标尺,并且使用Xlib每隔100ms轮询一次光标位置并更新显示。显示器由数字/线等组成,特别是一条指示光标位置的线(这就是它更新的原因)。
问题是需要删除旧行并恢复下面的内容,因此我必须重绘整个窗口以反映位置的变化。每秒这样做10次会产生一个非常闪烁的程序。
我只能重新绘制标尺后我确认光标处于更改指示线的位置(即在标尺的范围内),但是当它确实仍然闪烁相当糟糕时正在更新。
将菜鸟排序为GTK和Xlib以及所有建议,我们将不胜感激。
答案 0 :(得分:2)
嗯,你已经达到了游标实施时面临的最早问题之一!光标变化非常频繁,每次重绘整个窗口都没有任何意义!来你的问题,看看需要什么&你在做什么光标移动时是否需要更新完整窗口?不需要。您只需更新窗口的一部分,因此不要更新整个窗口。在顶部,我可以想到两种减少闪烁的方法:
1.简单的方法是使用GdkCursor
。从像素图(开发者页面上提供的示例)创建一个新光标,其中包含您需要的形状,在您的案例中为一行。 Associate光标位于应用程序主窗口的GdkWindow
。这样您就不必跟踪光标和放大器。划清界线。光标本身将显示为行(因此您不必担心清除和重绘它)。现在,在重绘整个窗口的计时器回调中,仅重绘在光标位置更改时必须更新的组件。这应该有希望减少闪烁,因为你没有绘制所有组件
2.如果您不想使用GdkCursor
,可以在专用于光标的应用程序窗口顶部创建一个单独的透明窗口。在这种方法中,您只能更新光标窗口&应用程序窗口中的组件,用于更改光标位置的更新。这样,每次都不会重新绘制应用程序窗口中的其他组件。希望这也应该能够减少闪烁
希望这有帮助!