c - 使用 XLIB 中的 XDrawRectangle 在屏幕上拖动鼠标时不需要的闪烁橡皮筋

标签 c xlib rubber-band

我在 Ubuntu 14.04 平台上,我正在尝试为我的截屏项目制作一个橡皮筋。我找到了使用 xlib 的橡皮筋示例,但是在拖动鼠标时出现了闪烁和部分缺失的矩形。我想知道它是否特定于我的系统或已弃用的 xlib 库? 是否有解决方法来解决它?

我还注意到 imagemagic 的屏幕位置抓取命令 import window.miff 也以同样的方式闪烁。

flickering rectangle

这是我试过的代码

xruler

xrectsel

最佳答案

看起来后台的终端正在重新粉刷自己。您可以总是自私,并执行 XGrabServer(),在移动/调整窗口大小时使用矩形的 WM 会执行此操作。在您松开抓取之前,屏幕上的任何其他内容(时钟、负载监视器)都不会更新。

应避免服务器抢夺。您可能希望添加一个 --grab/--nograb 选项,让用户决定他们是喜欢避免视觉伪影还是让其他应用程序(电影播放器​​、负载监视器、时钟等)更新橡皮圈期间的屏幕。

另一种选择是使用半透明窗口而不是轮廓矩形,类似于现代窗口管理器倾向于使用真实窗口而不是橡皮筋来移动/调整窗口大小(即使这可能意味着之前多次重新绘制窗口操作已完成,因为使用橡皮筋进行远程 X 移动/调整大小肯定表现更好。

XGrabServer() 令人讨厌的示例:

关于c - 使用 XLIB 中的 XDrawRectangle 在屏幕上拖动鼠标时不需要的闪烁橡皮筋,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25191715/

相关文章:

c - 在某些重复后停止信号所需的程序

c++ - X11 中的屏幕截图

python - 不同屏幕上的 cv2.imshow()

c++ - opengl橡皮筋框不显示

javascript - Kendo UI Accordion 未在 iPad 中扩展

C解析器递归

c - 如何使用 getchar_unlocked(),我没有得到以下代码中的流程?

c - struct C 中的映射结构

c - 使用 Xlib 生成 Perlin 噪声