Сохранять поля для рисования после изменения размера окна - PullRequest
0 голосов
/ 21 июня 2009

Я пишу, что приложение рисует в окне другого приложения (это под OS X с Какао, но вопрос достаточно общий, и я надеюсь, что его не увязнут проблемы операционной системы / фреймворка), и я ' Я столкнулся с проблемой, которая, кажется, должна иметь простой ответ, но это сводит меня с ума. Вот проблема:

Я рисую прямоугольник внутри окна другого приложения, которое должно находиться в определенном месте относительно верхней и левой частей окна (то есть поля между моим прямоугольником и верхней и левой частью целевого окна должны оставаться фиксированными). Я могу рассчитать относительные координаты x, y в процентах от размера окна, что прекрасно работает: прямоугольник отображается правильно. Однако пользователь затем изменяет размеры окна, и я могу правильно изменить размер прямоугольника, используя преобразование, основанное на отношении новой высоты и ширины к старой высоте и ширине, но я теряю свое относительное расположение: координаты прямоугольника теперь неверны (см. изображение - это грубый макет проблемы).

изображение http://img30.imageshack.us/img30/5273/resizeexample.png

Теперь я не могу понять, как вычислить новые координаты x, y относительно верхней и левой частей окна. Окно не квадратное; его изменение размера ограничено другим приложением, но соотношение сторон ширина / высота изменяется какой-то неизвестной функцией. Когда я измеряю требуемые координаты y в относительных единицах, процент изменяется при изменении размера окна. Численно это выглядит примерно так:

До изменения размера:
размер окна: h => 760, w => 546
начало прямоугольника: x => 355, y => 84 (например, 84/546 = 15,3% высоты)

После изменения размера:
размер окна: h => 1009, w => 717
Происхождение прямоугольника должно быть: (Я могу измерить его как что-то вроде x => 474, y => 99, но я не могу предсказать эти значения; 99/717 сейчас = 13,8% высоты).

Я испробовал все соотношения измерений двух окон, которые только могу себе представить; Я также натолкнулся на идею перевода в начало координат, масштабирования, а затем перевода обратно, чтобы избежать проблемы масштабирования перемещения координат - но я не знаю, куда переводить обратно! Это, вероятно, имеет какое-то простое геометрическое / тригонометрическое решение, но со мной ничего не происходит, независимо от того, сколько диаграмм я рисую. Я готов согласиться с неизбежным смущением того, что кто-то указывает на какое-то однострочное решение этой проблемы, если они могут просто указать мне правильное направление здесь!

Ответы [ 2 ]

0 голосов
/ 21 июня 2009

Для потомков: я действительно понятия не имею, как Apple (или кто-либо еще) делает это - и, честно говоря, я думаю, что приложение, с которым я пытаюсь взаимодействовать, не было написано с учетом этого в любом случае, так как оно далеко не доступно , Чтобы решить эту проблему, я просто выбрал целую кучу разных (x, y) пар и построил линейную модель, чтобы предсказать правильные координаты для произвольных координат. Немного кувалды, но это лучшее, что я мог придумать.

0 голосов
/ 21 июня 2009

Если вы хотите, чтобы это были left единицы слева и top единицы сверху, тогда попробуйте начало координат как:

x: left
у: window.frame.size.height - rectangle.frame.size.height - top

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...