Обзор кварцевых служб дисплея
Quartz Display Services является рядом функций системного программного обеспечения, поддерживающих динамические изменения расположения и режимов отображения дисплеев, присоединенных к компьютеру пользователя, а также другим связанным с дисплеем операциям. (В этом документе термин дисплей относится к системе аппаратного обеспечения машинной графики, состоящей из кадрового буфера, таблицы гамма-коррекции или цветовой палитры, и возможно присоединенного монитора.)
Например, приложения Mac могут использовать Quartz Display Services для:
Исследуйте и измените режимы отображения
Сконфигурируйте ряд дисплеев в единственной работе
Получите один или несколько дисплеев для монопольного использования
Выполните исчезают эффекты
Активируйте зеркальное отражение дисплея
Сконфигурируйте гамма таблицы коррекции цвета и цветовые палитры
Получите уведомление об экранных операциях обновления
Quartz Display Services является низкоуровневый API. Когда мониторы отсоединяются или изменение режимов отображения, элементы пользовательского интерфейса, такие как окна автоматически не изменены местоположение. Вместо этого Кварц обеспечивает механизм уведомления для изменений состояния дисплея. Какао автоматически обнаруживает эти изменения состояния и вносит изменения в размер, позицию и расположение окон на затронутых дисплеях.
Установки системы OS X используют Quartz Display Services для выполнения некоторых действий в предпочтительной области Дисплеев. Например, область Display содержит средства управления, позволяющие пользователю переключать режимы отображения на различное разрешение дисплея.
В системе с двумя или больше присоединенными мониторами область Arrangement, показанная на рисунке 1, содержит средства управления, позволяющие пользователю:
Перестройте дисплеи на расширенном рабочем столе
Измените основной дисплей путем перемещения строки меню от одного дисплея до другого
Создайте набор зеркального отражения дисплея
Следующие несколько разделов представляют некоторые основные характеристики дисплеев, вместе с некоторыми более важными функциями в Quartz Display Services API. Другие статьи в этом документе содержат примеры, показывающие, как использовать этот API для выполнения некоторых общих операций.
Состояния дисплея
Когда аппаратные средства кадрового буфера подключены к монитору, дисплей считается онлайновым. Если никакой монитор не присоединен к кадровому буферу, дисплей характеризуется как оффлайновый.
Когда дисплей является онлайновым, дисплей отображается в глобальный дисплей (рабочий стол) система координат. Верхний левый угол дисплея вызывают источником. Источник дисплея всегда указывается в глобальном дисплее (настольные) координаты.
Дисплей с источником в (0,0) вызывают основным или главным дисплеем. В системе без зеркального отражения дисплея дисплей со строкой меню обычно является основным дисплеем. Пользователь может изменить основной дисплей путем перетаскивания строки меню к различному дисплею в предпочтениях Дисплеев.
Онлайновый дисплей может быть активным, зеркальное отражение или сон. Эти условия определяются следующим образом:
Дисплей активен, если он бодрствует и доступен для рисования.
Если то же содержание нарисовано к обоим дисплеям одновременно, дисплей зеркально отражает другой дисплей. Вы не можете привлечь дисплей зеркального отражения.
Когда его кадровый буфер и присоединенный монитор находятся в сокращенном режиме питания, дисплей спит. Дисплей сна все еще считается частью глобального выставочного пространства, но Вы не можете привлечь его.
Дисплей IDs
Когда монитор присоединяется, и дисплей онлайновый, Кварц присваивает уникальный идентификатор дисплея (ID) типа CGDirectDisplayID
. ID дисплея может сохраниться через процессы и обычно остается постоянным, пока не перезапущена машина. Можно получить массив дисплея IDs, соответствующий всем онлайновым дисплеям в системе с функцией CGGetOnlineDisplayList
.
Как правило, Вы больше интересуетесь активными дисплеями, потому что они доступны для рисования. Можно получить массив дисплея IDs, соответствующий всем активным дисплеям в системе с функцией CGGetActiveDisplayList
. Первый дисплей в списке всегда является основным дисплеем. Основной дисплей также представлен константой kCGDirectMainDisplay
, который определяется как вызов к функции CGMainDisplayID
.
Эти функции также получают массив дисплея IDs:
CGGetDisplaysWithPoint
получает дисплей IDs для онлайновых дисплеев, границы которых включают указанную точку.CGGetDisplaysWithRect
получает дисплей IDs для онлайновых дисплеев, границы которых включают указанный прямоугольник.CGGetDisplaysWithOpenGLDisplayMask
получает дисплей IDs для онлайновых дисплеев, соответствующих набору битов в маске дисплея OpenGL.
Режимы отображения (OS X v10.6 или позже)
Каждый дисплей имеет ряд поддерживаемых режимов работы. Режим отображения является рядом стандартных свойств — таких как разрешение (ширина и высота в пикселях), биты на пиксель, и частота обновления — и дополнительные свойства — такие как пиксель, простирающийся для заполнения экрана.
Каждый режим отображения представлен экземпляром CGDisplayMode
непрозрачный тип. Для обнаружения, что поддерживают режимы дисплей Вы используете функцию CGDisplayCopyAllDisplayModes
, который возвращает массив режимов отображения. Для обнаружения текущего режима отображения для онлайнового дисплея Вы используете функцию CGDisplayCopyDisplayMode
, который возвращает единственный режим отображения. Режим отображения содержит ряд свойств, что можно запросить использование Quartz Display Services CGDisplayMode
функции. Вы ответственны за выпуск режима отображения, когда Вы закончены с ним.
Режимы отображения только для чтения. Если Вы хотите изменить определенное свойство дисплея, такое как разрешение, необходимо найти надлежащий режим отображения и использовать его для изменения режима дисплея. Можно использовать CGDisplaySetDisplayMode
, функция удобства для изменения режима единственного дисплея. Для получения дополнительной информации посмотрите Изменяющиеся Режимы отображения (OS X v10.6 или позже).
Режимы отображения (OS X v10.5)
Каждый дисплей имеет ряд поддерживаемых режимов работы. Режим отображения является рядом стандартных свойств — таких как разрешение (ширина и высота в пикселях), биты на пиксель, и частота обновления — и дополнительные свойства — такие как пиксель, простирающийся для заполнения экрана.
Каждый режим отображения представлен словарем режима отображения. Для обнаружения, что поддерживают режимы дисплей Вы используете функцию CGDisplayAvailableModes
, который возвращает список словарей режима. Для обнаружения текущего режима отображения для онлайнового дисплея Вы используете функцию CGDisplayCurrentMode
, который возвращает единственный словарь режима. Словарь режима отображения содержит ряд пар ключ/значение, что можно запросить использующую Базовую Основу CFDictionary
функции.
Для нахождения оптимального режима для выбранного набора свойств можно использовать функцию CGDisplayBestModeForParameters
. Например, если Вы запрашиваете поддерживаемый режим на дисплей с разрешением 750 x 550 пикселей и 24 бит на пиксель, эта функция может возвратить поддерживаемый режим с разрешением 800 x 600 пикселей и 32 бит на пиксель.
Словари режима только для чтения. Если Вы хотите изменить определенное свойство дисплея, такое как разрешение, необходимо найти надлежащий словарь режима и использовать его для изменения режима дисплея. Можно использовать CGDisplaySwitchToMode
, функция удобства для изменения режима единственного дисплея. Для получения дополнительной информации посмотрите Изменяющиеся Режимы отображения (OS X v10.5).
Расположение дисплея
В системах с многократными дисплеями Ваше приложение может управлять расположением дисплеев в глобальном выставочном пространстве. Это сделано путем установки источника каждого дисплея с функцией CGConfigureDisplayOrigin
. Новые источники помещаются максимально близко в требуемые расположения, не накладываясь или оставляя разрыв между дисплеями. Можно также использовать эту функцию для обозначения дисплея как основной дисплей путем установки его источника в (0,0). Для получения дополнительной информации об использовании этой функции посмотрите, что Дисплеи Конфигурирования Используют Транзакцию.
Когда Ваше приложение завершается, расположение дисплея возвращается к текущим настройкам в предпочтениях Дисплеев.
Зеркальное отражение дисплея
В системах с многократными дисплеями Ваше приложение может нарисовать то же содержание к двум или больше дисплеям одновременно. Это вызывают, зеркально отражая, и дисплеи, как говорят, находятся в наборе зеркального отражения. Можно создать или изменить конфигурацию набора зеркального отражения с функцией CGConfigureDisplayMirrorOfDisplay
. Один дисплей определяется основной или главный дисплей в наборе зеркального отражения, и все получение направлено к этому дисплею. Для получения дополнительной информации об использовании этой функции посмотрите, что Дисплеи Конфигурирования Используют Транзакцию.
Зеркальное отражение дисплея и генерация матового стекла дисплея реализованы или в (предпочтенных) аппаратных средствах или в программном обеспечении, на усмотрение драйвера устройства. В аппаратном зеркальном отражении аппаратное обеспечение машинной графики представляет содержание единственного кадрового буфера в двух или больше дисплеях одновременно. В зеркальном отражении программного обеспечения идентичное содержание вовлечено в кадровый буфер каждого дисплея в наборе зеркального отражения. Дисплей с самым высоким разрешением и самой глубокой пиксельной глубиной обычно становится основным дисплеем.
Кварц удостоверяется, что все содержание оконное помещается во все дисплеи в наборе зеркального отражения. Приложения, рисующие в окнах, не должны касаться поддержки зеркального отражения. Приложения, рисующие непосредственно к дисплею, возможно, должны реализовать традиционный цикл устройства для надлежащей поддержки зеркального отражения.