2013-08-29 46 views
1

我在写一个使用CoreAnimationDrawingModel的Safari NPAPI插件。这使我可以创建高性能的CAOpenGLLayer并将其返回给浏览器(我使用的是:https://wiki.mozilla.org/NPAPI:CoreAnimationDrawingModel)。如何在基于CALayer的NPAPI插件中支持视网膜?

不幸的是,我在这个设置中支持Retina显示器时遇到了问题,因为我无法找到解决该插件是否托管在Retina显示屏上的方法。没有这些信息,我无法正确设置CALayer的contentScale属性。

在原生应用程序中,我将CALayer托管在NSView中,并观察viewDidChangeBackingProperties以获取所需的解决方案信息。我不确定在NPAPI世界中是否有获取图层主机的方法?即使这是可能的,我也不得不为这个决议进行轮询,理想情况下我想注册某种通知监听器。我正在使用FireBreath(http://www.firebreath.org/)写我的插件,并与那里的开发者(Richard Bateman)谈论IRC,但他们建议在这里问(斯图尔特摩根被提及是一个很好的人)。

回答

1

a spec将此信息传递给NPAPI插件。我并不完全确定实施状况; Chrome并没有实现它,Firefox源代码的随意检查表明它确实如此,并且由于它是由Apple工程师撰写的,所以Safari很可能会这样做。

+0

谢谢,这当然有帮助。我会在下周初做详细的测试。 该规范建议浏览器将不断发送更新通知(使用NPP_SetValue)。到目前为止,我还没有在我的测试中看到过这些,但是他们可能只会在_after_NPN_GetValue查询时启动。 –

+0

对于对此感兴趣的其他人,我现在将相关支持代码添加到FireBreath插件框架中,atm正在等待合并:https://github.com/firebreath/FireBreath/pull/119。至少在Safari 6.0.5中运行良好。 –

+0

这是我可以在Safari NPAPI插件中找到有关视网膜支持的唯一有用信息。我有一个Core Graphics插件,我无法找到如何使其与视网膜一起工作。有什么想法吗? – Samir