这两种窗口事件类型之间有什么区别?我看过这些文档,但没有给出非常详细的描述。我正在尝试让SDL应用程序在取消最小化后重新绘制自己,我目前的解决方案是处理这两种事件类型。仅处理SDL_WINDOWEVENT_EXPOSED
在Ubuntu MATE 1.24.0上不起作用。
使用Xorg时,至少在以下情况下,SDL_WINDOWEVENT_SHOWN
由SDL生成:
- 当从X服务器接收到
MapNotify
事件时 - 当窗口失去
SDL_WINDOW_HIDDEN
标志时 - 当窗口获得
SDL_WINDOW_FULLSCREEN
标志时
关于情况2和3,SDL源代码中的注释提到:
。。。合成窗口管理器可以更改窗口的可见性,而无需任何映射/取消映射它们,所以我们在这里处理。。。
根据X窗口系统词汇表,从未显示未映射的窗口:
如果对窗口执行了映射调用,则称其为已映射窗口。未映射的窗口及其下级永远不可见。
当SDL从X服务器接收到Expose
事件时,它会生成SDL_WINDOWEVENT_EXPOSED
事件。
X Window System Glossary这样描述";"曝光";事件:
当窗口被遮挡或重新配置。暴露事件发送到当窗口区域的内容被迷路的
根据此数据,每当窗口的状态从隐藏变为可见时,似乎都会生成SDL_WINDOWEVENT_SHOWN
事件,而当窗口的任何部分变得模糊时,就会生成SDL_WINDOWEVENT_EXPOSED
事件。