mig*_*aza 36 osx window-manager
我熟悉 X11 系统的工作原理,其中客户端通过套接字连接到服务器进程并将操作发送到窗口服务器以代表它们执行某些操作。
但我不明白(我找不到好的文档)描述 GUI 应用程序如何与 Mac OS X 上的窗口系统交互。我的一些问题包括:
mig*_*aza 14
这是我迄今为止能够收集到的:
应用程序通过某种私有 API 与 WindowServer 进程通信,WindowServer 进程是实际获取硬件事件(鼠标、键盘)并将这些事件分派给客户端应用程序的进程。(这仍然是一个悬而未决的问题:如果有的话,他们使用什么协议,他们使用的是 Mach 端口和 MIG,还是一些基于 Socket 的 API,不确定)。
一些信息在这里:
WindowServer 是 Quartz 合成器。通常应用程序使用在 CoreGraphics API(CGXXX 函数)中公开的 Quartz2D API。应用程序创建 CoreGraphics“上下文”(CGContext)并在那里绘制。上下文是否在作为大位图完成时被推送,或者操作是否像在 X11 上一样发送到服务器仍然是一个悬而未决的问题。
公开了一个有限的 API 来控制 WindowServer 进程的某些方面,这种配置设置通常从 Settings 应用程序完成,但没有关于应用程序如何实际从服务器通信图形请求或泵消息的文档,除了暴露的碳/可可 API。
XQuartz 是在 Mac OS X 上运行的 X.org X Window 系统的开源项目。他们的开发人员 wiki 和邮件列表应该可以帮助您解决问题,似乎您需要深入参与该项目的人来回答这些问题。