在 Xlib 中,我使用 XDefineCursor 函数将鼠标指针更改为从 XCreatePixmapCursor 函数生成的各种光标。我发现光标确实按预期更改,但是当它这样做时,光标更改之间会发生奇怪的闪烁/闪烁,光标在重新出现在正确位置之前快速且不规则地抖动到位。它发生得非常快,但非常明显。光标更改之间是否可以平滑过渡?还是我做错了什么?谢谢!
更新:
我认为 Pixmap 光标定义期间使用的热点与此问题有关。我使用的每个光标都有自己的唯一热点,具体取决于光标的外观。我发现当我简单地将所有热点值设置为 (0, 0) 时,闪烁消失了。不幸的是,这意味着我的光标热点不正确。前任:
// before, causes flicker
cursor1_pointer = XCreatePixmapCursor(dpy, cursor1_source, cursor1_source,
&foreground_color, &background_color, 16, 15);
// after, no flicker
cursor1_pointer = XCreatePixmapCursor(dpy, cursor1_source, cursor1_source,
&foreground_color, &background_color, 0, 0);
我猜 Xlib 正在尝试在更改期间根据其新热点重新定位光标。不幸的是,它似乎并没有以一种视觉上优雅的方式这样做。有任何想法吗?
更新:
我想出了一个半笨拙的技巧来防止这种闪烁。基本上,我将光标图像文件编辑为具有足够大且共享的画布大小,然后在该空间内重新定位每个光标图像,以便程序中使用的所有光标可以共享一个公共热点像素坐标 (16, 16)。这样当 Xlib 更新光标时,它就不必根据新的图像热点重新定位光标,从而实现半平滑的视觉过渡。
不是最优雅的解决方案,但它有效。