Используя исчезают эффекты

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

Кварц автоматически исчезает все онлайновые дисплеи для Вас во время изменений конфигурации. Настройки времени для значения по умолчанию исчезают, эффект составляет 0,3 секунды для постепенного исчезновения и 0,5 секунды для постепенного появления. Исчезнуть цвет является французским Синим для нормального рабочего стола, и черный для полученного дисплея. Во время транзакции конфигурации можно настроить, это встроенное исчезает, эффект — видит пример в Конфигурировании Дисплеев Используя Транзакцию.

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

Исчезая все Дисплеи

Quartz Display Services обеспечивает функции, позволяющие, Вы для выполнения пользовательского исчезаете эффект на все онлайновые дисплеи одновременно. Первый шаг должен вызвать CGAcquireDisplayFadeReservation зарезервировать исчезнуть механизм для указанного интервала. Эта функция пасует назад маркер, представляющий новое, исчезают резервирование. Ваше приложение использует этот маркер в качестве параметра в последующих вызовах к CGDisplayFade. Во время исчезнуть интервала резервирования Ваше приложение имеет исключительные права использовать исчезнуть механизм. Для выпуска резервирования Вы вызываете CGReleaseDisplayFadeReservation.

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

Перечисление 1  , Исчезающее все дисплеи

CGDisplayFadeReservationToken token;
CGError err;
 
err = CGAcquireDisplayFadeReservation (kCGMaxDisplayReservationInterval, &token); // 1
if (err == kCGErrorSuccess)
{
    err = CGDisplayFade (token, 0.3, kCGDisplayBlendNormal,
        kCGDisplayBlendSolidColor, 0, 0, 0, true); // 2
    err = CGDisplayCapture (kCGDirectMainDisplay); // 3
    /* draw something on the captured display */
    err = CGDisplayFade (token, 0.5, kCGDisplayBlendSolidColor,
        kCGDisplayBlendNormal, 0, 0, 0, true); // 4
    err = CGReleaseDisplayFadeReservation (token); // 5
}

Вот то, что делает код:

  1. Резервы исчезнуть механизм для максимального разрешенного интервала. Ваше приложение должно выполнить этот шаг, прежде чем это сможет исчезнуть дисплеи. В это время Ваше приложение имеет исключительные права использовать исчезнуть механизм.

  2. Исчезает дисплеи к черному цвету с продолжительностью 0,3 секунд. Вызов функции синхронен.

  3. Получает основной дисплей. Дисплей является уже черным, таким образом, пользователь не видит изменения.

  4. Исчезает дисплеи от черного цвета до нормального с продолжительностью 0,5 секунд. Вызов функции синхронен.

  5. Выпуски исчезнуть резервирование и лишают законной силы маркер.

Исчезая единственный дисплей

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

При корректировке гамма значений Вы не можете предположить, что максимальное гамма значение 1.0; пользователь, возможно, указал различное максимальное значение в Установках системы. Необходимо получить текущие настройки и масштабировать их соответственно.

Перечисление 2 показывает, как исчезнуть указанный дисплей к черному цвету и назад. Цикл с фиксированной задержкой используется для получения гладкого, исчезают (другой подход должен использовать таймер, чтобы гарантировать, чтобы фиксированное исчезло продолжительность в различных системах).

Перечисление 2  , Исчезающее единственный дисплей

const double kMyFadeTime = 1.0; /* fade time in seconds */
const int kMyFadeSteps = 100;
const double kMyFadeInterval = (kMyFadeTime / (double) kMyFadeSteps);
const useconds_t kMySleepTime = (1000000 * kMyFadeInterval); /* delay in microseconds */
 
int step;
double fade;
CGGammaValue redMin, redMax, redGamma,
             greenMin, greenMax, greenGamma,
             blueMin, blueMax, blueGamma;
CGError err;
 
err = CGGetDisplayTransferByFormula (display, // 1
    &redMin, &redMax, &redGamma,
    &greenMin, &greenMax, &greenGamma,
    &blueMin, &blueMax, &blueGamma);
 
for (step = 0; step < kMyFadeSteps; ++step) { // 2
    fade = 1.0 - (step / (double)kMyFadeSteps);
    err = CGSetDisplayTransferByFormula (display,
        redMin, fade*redMax, redGamma,
        greenMin, fade*greenMax, greenGamma,
        blueMin, fade*blueMax, blueGamma);
    usleep (kMySleepTime); // 3
}
 
err = CGDisplayCapture (display);
/* draw something on the captured display */
 
for (step = 0; step < kMyFadeSteps; ++step) { // 4
    fade = (step / (double)kMyFadeSteps);
    err = CGSetDisplayTransferByFormula (display,
        redMin, fade*redMax, redGamma,
        greenMin, fade*greenMax, greenGamma,
        blueMin, fade*blueMax, blueGamma);
    usleep (kMySleepTime); // 5
}
 
CGDisplayRestoreColorSyncSettings();  // 6

Вот то, что делает код:

  1. Получает текущие коэффициенты гамма формулы передачи для дисплея как стартовые гамма значения.

  2. Исчезает от текущей гаммы путем установки цветной гамма-функции для дисплея, указанного как коэффициенты гамма формулы передачи. Запускается с текущей гаммы (умножающийся фактором 1,0) и заканчивается черным цветом (умножение на фактор 0,0).

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

  4. Исчезает от черного цвета (умножение на фактор 0,0) назад к исходной гамме (умножающийся фактором 1,0).

  5. Приостанавливает обработку за короткий интервал для достижения гладкого, исчезают в действительности.

  6. Восстанавливает гамма таблицы к значениям в профиле дисплея ColorSync пользователя.