Mac OS X的窗口系统的体系结构是什么?


34

我熟悉X11系统的工作原理,其中客户端通过套接字连接到服务器进程,然后将操作发送到窗口服务器以代表它们执行某些操作。

但是我不了解(并且找不到合适的文档)描述GUI应用程序如何与Mac OS X上的窗口系统交互。我遇到的一些问题包括:

  • 应用如何从窗口系统接收事件?
  • 该应用是否需要向内核或某个窗口系统服务器注册?
  • 窗口系统如何请求应用更新其显示?
  • 应用如何触发重新显示操作?
  • 窗口系统是否有基于套接字的协议或其他RPC系统?
  • 窗口系统或应用程序是否可以直接访问硬件?
  • 客户端应用程序和窗口系统之间可以进行哪些操作?

Answers:


14

到目前为止,这是我能够收集到的:

应用程序通过某种私有API与WindowServer进程进行通信,WindowServer进程实际上是一个获取硬件事件(鼠标,键盘)并将其分配给客户端应用程序的进程。(这仍然是一个悬而未决的问题:它们使用什么协议(如果有的话),使用Mach端口和MIG或某些基于套接字的API(不确定)?

一些信息在这里:

https://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/OSX_Technology_Overview/GraphicsTechnologies/GraphicsTechnologies.html#//apple_ref/doc/uid/TP40001067-CH273-SW1

WindowServer是Quartz Compositor。通常,应用程序使用Quartz2D API,该API在CoreGraphics API(CGXXX功能)中公开。应用程序创建CoreGraphics“上下文”(CGContext)并在此处绘制。将上下文作为大位图完成时是否推送上下文,或者是否像在X11上一样将操作发送到服务器仍是一个悬而未决的问题。

仅有有限的API可以控制WindowServer进程的某些方面(通常是通过“设置”应用程序完成的那种配置设置),但是除了应用程序如何实际传达图形请求或从服务器泵送消息外,没有文档说明暴露的碳/可可API。


链接已断开
Mick

3

“什么是可可粉?” 《可可基础指南》的“ 可可基础知识”部分从下至上提供了大量有关体系结构的精彩插图。


2
(对不起,还不能发布注释):Quartz或Core Graphics是OS X中的绘图和窗口系统(替换QuickDraw)。核心图形是Cocoa的一部分(整个Cocoa可与整个Win32 API相比,而不是GDI,Direct2D或X)
KellyClowers 2010年


1

XQuartz是在Mac OS X上运行的X.org X Window System的开源项目。他们的开发人员Wiki和邮件列表应帮助您解决问题,似乎您需要深入参与该项目的人员来回答这些问题。


4
是的,但这只涉及XQuartz,这只是一个与他们真正的窗口系统对话的程序。问题是关于XQuarts或Finder之类的应用程序如何与此窗口系统进行对话
miguel.de.icaza 2010年

1

在以前的MacOS版本中,提升是通过QuickDraw完成的。在OS X中,已被Cocoa取代...

它不只是与X11并行。例如,X11不包含音频,但Cocoa包含音频。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.