Установка атрибутов для изображения окна

Почти каждое окно имеет соответствующее устройство окна экрана в сервере окна. Устройство окна содержит нарисованное изображение окна и имеет два атрибута, определенные сервером окна и много атрибутов, которыми управляет окно. Сервер окна присваивает устройство окна уникальный идентификатор (в приложении). Это - число окна, и к нему можно получить доступ с помощью windowNumber метод. Каждое окно также имеет состояние графики, которое большинство его представлений совместно использует для рисования (представления могут создать свое собственное также). gState метод возвращает свой идентификатор. Атрибуты под прямым управлением окном являются следующим:

Указание, как сохранить изображение окна

Тип запоминающего устройства устройства окна определяет, как сохранено изображение окна. Когда окно инициализируется и может быть одним из трех типов, это установлено.

Буферизированное устройство окна представляет все вовлекающие дисплейный буфер и затем сбрасывает его на экран. Всегда рисование к буферу производит очень гладкий дисплей, но может потребовать существенного количества памяти. Буферизированные окна являются лучшими для отображения материала, который должен часто перерисовываться, такие как текст. Необходимо также использовать буферизованные окна, если Вы хотите, чтобы Ваши окна поддерживали прозрачность.

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

Несохраненное устройство окна не имеет никакого буфера вообще и должно перерисовать части, поскольку они представлены. Далее, когда механизм дисплея окна вытесняется, эта перерисовка приостановлена. Например, если пользователь перетаскивает окно через несохраненное окно, несохраненное окно «стирается» и не перерисовывается до разъединений абонентом мышь.

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

Можно изменить тип запоминающего устройства между буферизированным и сохраненным после инициализации с помощью setBackingType: метод.

Указание, где сохранить изображение окна

Сервер окна выбирает, поместить ли запоминающее устройство для буферизированного окна в оперативной памяти или видеопамяти. Это выберет расположение, обеспечивающее лучшую общую производительность. Можно запросить сервер окна для определения, где запоминающее устройство окна расположено с помощью preferredBackingLocation метод.

Можно принять решение установить предпочтительное расположение для запоминающего устройства Окна с помощью setPreferredBackingLocation: метод. В то время как сервер окна не требуется, чтобы уважать, это предпочло поддерживать расположение, он попытается сделать так. Вы не должны изменять предпочтительное местоположение поддержки, не тестируя, как оно влияет на производительность Вашего приложения.

Указание, когда создается изображение окна

defer параметр инициализатору указывает, создает ли окно свое устройство окна сразу или только когда это перемещено в экран. Задержка создания устройства окна может предложить некоторое увеличение производительности для окон, сразу не выведенных на экран, потому что это сокращает объем работы, который должен быть выполнен передняя сторона. Задержка создания устройства окна особенно полезна, когда создание самого окна не может быть задержано или когда окно необходимо в целях кроме отображения содержания. Подменю с ключевыми эквивалентами, например, должны существовать для ключевых эквивалентов работе, но никогда не могут фактически выводиться на экран.

Указание, сохраняется ли изображение окна когда вне экрана

Когда окно удалено из экрана, память может также быть сохранена путем уничтожения устройства окна. setOneShot: метод управляет этим поведением. Устройства окна с одним выстрелом существуют только, когда их окна являются экранными.

Указание предела глубины для изображения окна

Как аппаратные средства дисплея, буфер устройства окна имеет глубину, или предел памяти выделил каждый пиксель. Буферизованные и сохраненные окна начинаются с той же глубиной как основной дисплей или 16 битов, какой бы ни более глубоко. Эти настройки остаются в действительности, если не изменено использование setDepthLimit: метод, берущий в качестве параметра предел глубины окна, создал использование NSBestDepth функция.

Указание, ли предельные изменения глубины в способности экрана

Хранение глубины окна в ее самых богатых заповедниках, выведенное на экран изображение, но может подвергнуться ненужной памяти наверху, когда буферная глубина окна более глубока, чем экранная глубина. Можно использовать setDynamicDepthLimit: метод, чтобы сказать окну соответствовать глубину экрана это идет. Когда это перемещено в новый экран, окно с динамическим пределом глубины корректирует свой буфер к новой глубине перед перерисовкой. Создание глубины окна ограничить динамические переопределения предельное использование набора setDepthLimit:, и удаление динамического предела возвращается окно к пределу по умолчанию.

Указание, может ли содержание окна быть считано или записано другим процессом

Содержание Вашего окна может быть сделано доступным для других процессов. По умолчанию содержание Вашего окна может быть считано, но не записано в другими процессами. Это позволяет системным службам работать с содержанием Вашего окна и также позволяет другим приложениям получать снимок Вашего содержания окон.

Можно переопределить поведение по умолчанию с помощью setSharingType: метод. Изменение совместного использования вводит к NSWindowSharingNone препятствует тому, чтобы другие системы получили данные изображения Вашего окна. Если Вы сделаете это, однако, то Ваше окно не будет в состоянии участвовать во многих системных службах; поэтому, эта установка должна использоваться с осторожностью. Если Вы устанавливаете совместное использование своего окна типа в NSWindowSharingReadWrite, другие процессы могут и считать и изменить содержание окна.