Apple的专业应用程序如何强制“石墨”外观?

时间:2013-11-02 16:42:57

标签: macos cocoa

我想知道Apple的“Pro”应用程序(Final Cut Pro X,Compressor等)如何始终显示“石墨”外观,即使用户在系统首选项上设置了“蓝色”。

进行一些调查我发现实现它的代码是在一个名为NSProApplicationMain的函数中。如果我创建一个新的Xcode项目,将它链接到ProKit.framework并交换NSProApplicationMain而不是NSApplicationMain,该应用程序将获得“石墨”外观。

任何人都知道是什么让这件事发生的?有系统调用吗?

3 个答案:

答案 0 :(得分:7)

我终于想通了,它非常简单,并且不涉及使用私有API:

[[NSUserDefaults standardUserDefaults] setVolatileDomain:@{@"AppleAquaColorVariant": @6} forName:NSArgumentDomain];

我通过反汇编新iMovie附带的ProKit框架发现了它;)

编辑:上面的代码必须在UIApplicationMain之前运行。

答案 1 :(得分:2)

ProKit实现了它自己。它不依赖于AppKit中内置的石墨外观。

除了自己重新实现外,没有受支持的方式来使用此外观。

答案 2 :(得分:1)

如果想要有类似的外观,你现在需要使用NSBorderlessWindowMask并重新实现很多细微之处。红绿灯按钮有点工作要做对。一切都应该根据窗口是关键或主要以及最前面的应用程序来改变它的外观 NSAppearance可能会成为未来有用的东西。不要屏住呼吸等待。 转到NSWindowNSWindowControllerNSViewNSViewController的深处,然后,艰难的部分来实现新风格的所有其他控件和视图。