Поиск левого верхнего угла в плагине Quartz - PullRequest
0 голосов
/ 11 мая 2009

У меня есть плагин Mac для просмотра изображений. Первоначально он написан на Quickdraw, и я пытаюсь переместить его в Quartz.

Моя текущая проблема - происхождение. В QD источником является (разумно) верхний левый угол прямоугольника плагина. В Кварце это, кажется, на одну высоту экрана ниже вершины прямоугольника плагина (не включая кнопки Firefox, и т. Д.). Это фактически где-то случайно в середине моего прямоугольника плагина.

Это также означает, что мне нужно знать размер рисованной части окна браузера. Я уверен, что могу понять, насколько велико окно, но как мне определить, сколько места занимают вкладки и т. Д.? Mac не знает об этих вещах, не так ли?

На связанной ноте кто-нибудь знает, почему Apple решила поместить источник в нижний левый угол? Мне кажется, это глупо.

1 Ответ

1 голос
/ 12 мая 2009

Если вы используете NSView, вы можете создать реализацию функции -isFlipped, возвращающую YES, которая позволит вам рисовать на основе перевернутой системы координат.

В качестве альтернативы, если вы не используете NSView, но делаете необработанный рисунок CoreGraphics, вы можете изменить CTM следующим образом:

CGContextScaleCTM( context, 1.0, -1.0 );

Это взято из этого документа Apple Q & A .

Если вы делаете это с CGContextRef, который вы получили от чего-то другого, вы должны сначала сохранить существующий CTM и восстановить его, когда вы закончите:

CGContextSaveGState( context );

// do your stuff here ...

CGContextRestoreGState( context );

Да, и источник находится в левом нижнем углу, потому что система рендеринга Quartz основана на графической системе PDF, сама основана на PostScript и имеет источник в левом нижнем углу.

...