我正在为Mac OS X开发基于文档的应用程序。它是一种媒体播放器,但它不是播放音频或视频文件,而是打开包含指定OpenGL动画的元数据的文本文件。我想模仿Apples QuickTime X窗口风格。这意味着,我必须自己做所有的窗口图,因为Cocoa没有合适的窗口样式。
有一件事令我头痛:通常在Mac OS X窗口上找到圆角。我尝试使用无边框窗口掩码并使用一些CGS魔法 - 有一些私有的Apple标题允许窗口整形,但它们当然没有文档。我能够在窗户边缘切割出矩形孔,但我无法弄清楚Apple如何实现圆角。
创建透明窗口并自己绘制框架不起作用,因为OpenGL视口始终是矩形的,并且更改它的唯一方法是打开NSOpenGLCPSurfaceOpacity以获得Alpha透明度并使用模板缓冲区或着色器来剪切边缘,这似乎是很多开销的地狱。
如果我将OpenGLView放入带有标题栏的标准Cocoa窗口,则底边是圆角的。这似乎发生在视图层次结构的NSThemeFrame阶段。有任何想法如何做到这一点?
答案 0 :(得分:1)
使用图层支持的视图,并在不可见窗口的CALayer
中绘图。图层包括自动处理圆角和边框。
CALayer
的背景位于Core Animation Programming Guide。要为NSView
创建图层,您需要调用[view setWantsLayer:YES]
。您可以使用CAOpenGLLayer
创建setLayer:
并将其分配给视图。
请参阅CALayerEssentials,了解如何在其他图层类型中使用CAOpenGLLayer
的示例代码。
答案 1 :(得分:0)
由于Robs的建议不起作用,没有其他人参与讨论,我决定使用模板缓冲区来裁剪窗户角落。我这样做是通过从窗口背景创建纹理并将其渲染到模板缓冲区中,丢弃所有透明像素。看起来很好,但在调整窗口大小时速度很慢:/