自定义NSButtonCell渲染和默认按钮

时间:2014-03-17 05:34:32

标签: objective-c macos cocoa nsbuttoncell

我最近遇到了自定义NSButtonCell子类的问题。我们有一个带有白色文本的黑暗界面,所有内容都按预期进行,直到我们尝试创建默认按钮(即指定等效于\r的键)。我们得到的东西看起来很神秘:挡板画,但文字没有。但如果我把文字变成黑色,它就会画出来。如果我用黑色阴影使文本变白,只有阴影画出来!

当我尝试将测试文本设置为[NSColor redColor]时,这个谜团开始解开。 (此处的“创建”按钮的密钥等效于\r,“取消”为Esc。)

red button test

我最终想到的是默认按钮的单元格正在绘制到位图上下文中,可能是因为渲染的字形可以缓存为Aqua外观给出的动画蓝色脉冲背景。这完全有道理,但令人惊讶的是,该位图随后通过乘法合成操作绘制。因此,黑色显示,白色不显示,两者之间的任何显示都变暗。

我设法通过从-drawTitle:withFrame:inView:中取出文本呈现并在-drawBezelInFrame:inView:中进行操作来破解解决方法。但是这会被重复调用,所以我需要手动缓存图像。而且它只是概念上的丑陋,因为它特别是渲染标题的错误方法!

我的问题:当然必须有更好的方法,对吧?是否有某种方法可以告诉按钮单元不自动使用此屏幕外渲染路径,即使该按钮是默认的?

0 个答案:

没有答案