2009-05-11 5 views
0

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

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

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

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

ответ

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); 

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

+0

Масштабирование на самом деле меня не беспокоит. Я могу обрабатывать негативные вещи. Проблема в том, что мне трудно заблокировать изображение в верхнем левом углу моего плагина. Поскольку происхождение, кажется, трудно найти, трудно перевести мой образ в нужное место, когда я рисую его в контексте ... –

+0

Если вы используете перевернутые координаты просмотра, то ваше происхождение эффективно становится левым верхним , В противном случае он должен * просто быть в случае с левым нижним левым изображением - высота изображения плагина - высота изображения. NSMaxY (pluginView.bounds) даст вам y-индекс верхнего края, поэтому вы можете использовать 'image.bounds.origin.y = (NSMaxY (pluginView.bounds) - image.size.height);' –

Смежные вопросы