在Quartz插件中找到左上角

时间:2009-05-11 19:47:01

标签: c++ macos quartz-graphics browser-plugin

我有一个Mac插件用于查看图像。它最初是用Quickdraw编写的,我试图将它移到Quartz。

我目前的问题是起源。在QD中,原点(明智地)是插件矩形的左上角。在Quartz中,它似乎是插件矩形顶部下方的一个屏幕高度(不包括firefox按钮等)。这实际上是我的插件矩形中间的随机位置。

这也意味着我需要知道浏览器窗口的绘图部分的大小。我确定我可以弄清楚窗户有多大,但我怎么弄清楚标签占用了多少空间? Mac不知道那些事情,是吗?

在相关的说明中,有谁知道为什么Apple决定将原点放在左下角?对我来说似乎有些愚蠢。

1 个答案:

答案 0 :(得分:1)

如果您正在使用NSView,则可以创建-isFlipped函数的实现,返回YES,这将允许您基于翻转的坐标系进行绘制。

或者,如果您没有使用NSView但正在进行原始CoreGraphics绘图,您可以像这样修改CTM:

CGContextScaleCTM( context, 1.0, -1.0 );

这来自this Apple Q&A document

如果您使用CGContextRef执行此操作,您已经通过其他方式进行了此操作,则应首先保存现有CTM并在完成后将其恢复:

CGContextSaveGState( context );

// do your stuff here ...

CGContextRestoreGState( context );

哦,原点在左下方,因为Quartz渲染系统基于PDF图形系统,它本身基于PostScript,并且在左下角有一个原点。