c++ - 在 Quartz 插件中找到左上角

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

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

我目前的问题是起源。在 QD 中,原点(明显地)是插件矩形的左上角。在 Quartz 中,它看起来比插件矩形顶部低一个屏幕高度(不包括 Firefox 按钮等)。这实际上是在我的插件矩形中间随机的某个地方。

这也意味着我需要知道浏览器窗口绘图部分的大小。我确定我可以算出一个窗口有多大,但是我如何算出选项卡等占用了多少空间? Mac 不知道这些事情,是吗?

在相关说明中,有人知道为什么 Apple 决定将原点放在左下角吗?我觉得有点傻。

最佳答案

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

或者,如果您不使用 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,并且原点在左下角。

关于c++ - 在 Quartz 插件中找到左上角,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/849734/

相关文章:

c++ - 重载问题

mysql - Mac OSX 上的 Xampp 管理器,最近 mysql 服务器停止启动

macos - Firefox Macos - CSS 转换文本不平滑倾斜

iphone - 将 CGPoints 集转换为 CATransform3D 以校正图像

iphone - 绘制到 quartz 上下文时,UIImage可拉伸(stretch)ImageWithLeftCapWidth不起作用

c++ - 如何判断指针是否指向派生类型的实例?

c++ - 尝试破坏我的链接列表时出错?

c++ - 我需要打印静态矩阵重载 "<<"运算符

swift - 在 NSSplitView 中隐藏分隔线

iPhone:为什么drawRect没有被调用?