【发布时间】:2012-09-21 15:11:15
【问题描述】:
如何为 gnustep 编写一个窗口服务器?有几天我正在阅读 gnustep 的源代码,但不知道它是如何工作的。有人可以解释一下它是如何从 NSApplicationMain() 到图形用户界面的吗?实现一个非常基本的 WindowServer 需要什么?我知道这是一个很大的话题。
谢谢, 汤米
【问题讨论】:
标签: objective-c ios macos cocoa gnustep
如何为 gnustep 编写一个窗口服务器?有几天我正在阅读 gnustep 的源代码,但不知道它是如何工作的。有人可以解释一下它是如何从 NSApplicationMain() 到图形用户界面的吗?实现一个非常基本的 WindowServer 需要什么?我知道这是一个很大的话题。
谢谢, 汤米
【问题讨论】:
标签: objective-c ios macos cocoa gnustep
GNUstep 在其名为 GSDisplayServer 的 AppKit 中使用其自己的半抽象类来实现对现有窗口系统(如 X11 或 WIN32)的包装器。这也取决于你对这个 WindowServer 的设计,但主要有两件事要做,第一件事是实现你自己的 WindowServer,它提供你需要的 API(如果存在,那不是一些 Quartz API 吗?)和一个后端的实现(子类化 GSDisplayServer 和 NSGraphicsContext)。但据我所知,在 OSX 上获取窗口的唯一方法要求您将 Objective-C 与 NSWindow 一起使用,因为不再支持在没有 Objective-C 的情况下在 OSX 上创建窗口的 API(请在此处纠正我,因为我的知识仅限于GNUstep 方面)。因此,我认为为 GNUstep 实现一个 WindowServer 而不是将它包装在您系统上任何现有的窗口系统周围是没有多大意义的。但说真的,X11 并没有那么糟糕,我强烈建议你使用它。至少在 xcb 中重写 GNUstep 的 x11 后端。发明一个新的窗口系统会浪费很多时间。如果您在其他领域贡献您的时间,GNUstep 会受益更多。但是,如果您只想将 GNUstep 移植到您的窗口系统,只需查看现有的后端。
【讨论】: