C 在XLIB中使用XDRAW矩形在屏幕上拖动鼠标时,不需要的闪烁橡胶带
我在Ubuntu 14.04平台上,我正试图为我的屏幕播放项目制作一个橡胶垫。我找到了使用xlib的rubberbanding示例,但我在拖动鼠标时看到了闪烁和部分丢失的矩形。我想知道它是针对我的系统还是不推荐使用的xlib库? 有解决办法吗 我还注意到imagemagic的屏幕位置抓取命令C 在XLIB中使用XDRAW矩形在屏幕上拖动鼠标时,不需要的闪烁橡胶带,c,xlib,rubber-band,C,Xlib,Rubber Band,我在Ubuntu 14.04平台上,我正试图为我的屏幕播放项目制作一个橡胶垫。我找到了使用xlib的rubberbanding示例,但我在拖动鼠标时看到了闪烁和部分丢失的矩形。我想知道它是针对我的系统还是不推荐使用的xlib库? 有解决办法吗 我还注意到imagemagic的屏幕位置抓取命令import window.miff也以同样的方式闪烁 这是我试过的代码 看起来背景中的终端正在重新喷漆。您可能总是自私,执行XGrabServer(),移动/调整窗口大小时使用矩形的WMs就是这样做的。
import window.miff
也以同样的方式闪烁
这是我试过的代码
看起来背景中的终端正在重新喷漆。您可能总是自私,执行
XGrabServer()
,移动/调整窗口大小时使用矩形的WMs就是这样做的。在您释放抓斗之前,屏幕上的其他内容(时钟、负载监视器)不会更新
应避免服务器抓取。您可能需要添加一个--grab/--nograb
选项,让用户决定是希望避免视觉伪影,还是让其他应用程序(电影播放器、加载监视器、时钟等)在橡皮包过程中更新屏幕
另一种选择是使用半透明窗口而不是轮廓矩形,这与现代窗口管理器倾向于使用真实窗口而不是橡皮筋移动/调整窗口大小的方式类似(即使这可能意味着在操作完成之前多次重新绘制窗口,对于远程X,使用橡皮筋移动/调整大小肯定表现得更好)
XGrabServer()
令人讨厌的例子:
- :一名TWM用户在调整窗口大小时抱怨XGrabServer(),冻结了在其他窗口上播放的视频,并破坏了流媒体网络连接
- :用户抱怨由于(ab-)使用
,在启动应用程序时冻结了约25秒XGrabServer()
XSetFunction(dpy,gc,GXxor); // sets xor mode
只需设置一些缓冲区,并保留一份您绘制的内容副本,以便可以再次执行(包括颜色)
我去年写过这样一篇文章:我将最后50行存储在一个循环缓冲区中,然后重新绘制它们以进行擦除。我可以在没有不完整的擦除工件的情况下运行数小时。而且CPU使用率非常低。几乎达到xscreensaver质量。
看起来后台的终端正在重新粉刷自己。你可能总是很自私,做一个
XGrabServer()
,这是移动/调整窗口大小时使用矩形的WMs所做的。在你释放抓取之前,屏幕上的任何其他内容(时钟、加载监视器)都不会更新。@ninjalj非常感谢!放置XGrabServer(disp)
在XDrawRectangle()之前
有效。请将其作为答案发布。这可能对其他人有帮助。我还尝试查找基于glut的橡胶粘合示例,我发现了一些示例,但它们都有窗口装饰器。我无法删除窗口装饰器,在glut中似乎很难做到这一点。这是我的glut问题OP已经在使用XOR。问题是下面的窗户正在重新粉刷。