SDL_WINDOWEVENT_SHOWN or SDL_WINDOWEVENT_EXPOSED?



这两种窗口事件类型之间有什么区别?我看过这些文档,但没有给出非常详细的描述。我正在尝试让SDL应用程序在取消最小化后重新绘制自己,我目前的解决方案是处理这两种事件类型。仅处理SDL_WINDOWEVENT_EXPOSED在Ubuntu MATE 1.24.0上不起作用。

使用Xorg时,至少在以下情况下,SDL_WINDOWEVENT_SHOWN由SDL生成:

  1. 当从X服务器接收到MapNotify事件时
  2. 当窗口失去SDL_WINDOW_HIDDEN标志时
  3. 当窗口获得SDL_WINDOW_FULLSCREEN标志时

关于情况2和3,SDL源代码中的注释提到:

。。。合成窗口管理器可以更改窗口的可见性,而无需任何映射/取消映射它们,所以我们在这里处理。。。

根据X窗口系统词汇表,从未显示未映射的窗口:

如果对窗口执行了映射调用,则称其为已映射窗口。未映射的窗口及其下级永远不可见。

当SDL从X服务器接收到Expose事件时,它会生成SDL_WINDOWEVENT_EXPOSED事件。

X Window System Glossary这样描述";"曝光";事件:

当窗口被遮挡或重新配置。暴露事件发送到当窗口区域的内容被迷路的

根据此数据,每当窗口的状态从隐藏变为可见时,似乎都会生成SDL_WINDOWEVENT_SHOWN事件,而当窗口的任何部分变得模糊时,就会生成SDL_WINDOWEVENT_EXPOSED事件。

相关内容

  • 没有找到相关文章

最新更新