Видимая рамка NSScreen слишком велика - PullRequest
2 голосов
/ 23 апреля 2011

Мне нужны границы моего экрана, чтобы знать самые маленькие и самые большие координаты х / у. У меня разрешение экрана 1440х900. Когда я спрашиваю NSScreen для видимой рамки, то есть

NSRect frame = [[NSScreen mainScreen] visibleFrame]

Я получаю следующие значения х / у:

xMin = NSMinX(frame) // 74
yMin = NSMinY(frame) // 0
xMax = NSMaxX(frame) // 1440
yMax = NSMaxY(frame) // 878

У меня есть док-станция с левой стороны, поэтому мой xMin больше 0, а yMin равен 0. Однако проблема в yMax. Насколько я могу судить, строка меню имеет высоту 44 пикселя, поэтому yMax должен быть 900 - 44 = 856 пикселей. Согласно NSScreen, строка меню может максимально использовать 22 пикселя. Как это?


Дополнительные сведения о моем сценарии использования: я настраиваю положение окон и размеры окон с помощью Applescript. Чтобы узнать, какие значения разрешены, то есть внутри видимого фрейма, мне нужно проверить видимый фрейм NSScreen. Однако NSScreen начинает считать пиксели с левого нижнего края, а Applescript - с левого верхнего. В процессе создания метода для NSScreen, возвращающего свою координату слева вверху, я столкнулся с этой проблемой.

Преобразованный видимый кадр имеет значение yMin 22, то есть 22 пикселя от верхней границы. Я экспериментировал с Applescript напрямую и обнаружил, что каждый yMin ниже 44 будет настроен на 44, поскольку строка меню занимает пространство от 0 до 43 пикселей.


Надеюсь, мои объяснения не были слишком запутанными. В конце концов, проблема в том, что эксперименты показывают, что строка меню имеет высоту 44 пикселя, тогда как NSScreen оставляет только 22 пикселя свободными для строки меню (поскольку ее высота составляет 878 пикселей на экране 900 пикселей).


РЕДАКТИРОВАТЬ: Высота строки меню составляет 22 пикселей. Проблема в том, как он обрабатывает события, связанные со свойством границ.

1 Ответ

2 голосов
/ 24 апреля 2011

Строка меню составляет 22 пикселя. В качестве теста откройте TextEdit, поместите его окно в верхнюю часть экрана, а затем запустите этот appleScriptcript, и вы увидите, что он равен 22.

tell application "TextEdit"
    bounds of window 1
end tell

Проблема, которую вы видите в том, как Finder измеряет свои окна. В 10.6 что-то изменилось. Кажется, что строка заголовка окон не учитывается Finder, и, таким образом, видимая позиция 0 окна - это не верхний левый угол, а несколько пикселей вниз от этой позиции. Я также сценарий положения окна и замечаю, что мой код должен отличаться между 10,5 и 10,6. Например, откройте окно Finder и нажмите его в верхней части экрана, а затем запустите этот код ... он показывает 44.

tell application "Finder"
    bounds of window 1
end tell

Чтобы доказать, что это Finder, запустите этот скрипт в том же окне Finder. Обратите внимание на информацию из системных событий в сравнении с Finder. И помните, в 10.5 и ранее Finder не показывал это несоответствие.

tell application "System Events"
    tell process "Finder"
        set s to size of window 1
        set p to position of window 1
        return {p, s}
    end tell
end tell
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...