1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
use libc::c_float;

use crate::{base::boolean_t, display_configuration::CGDisplayConfigRef, error::CGError};

pub type CGDisplayFadeReservationToken = u32;

pub const kCGDisplayFadeReservationInvalidToken: CGDisplayFadeReservationToken = 0;

pub type CGDisplayBlendFraction = c_float;

pub const kCGDisplayBlendNormal: CGDisplayBlendFraction = 0.0;
pub const kCGDisplayBlendSolidColor: CGDisplayBlendFraction = 1.0;

pub type CGDisplayFadeInterval = c_float;

pub type CGDisplayReservationInterval = c_float;

pub const kCGMaxDisplayReservationInterval: CGDisplayReservationInterval = 15.0;

extern "C" {
    pub fn CGConfigureDisplayFadeEffect(
        config: CGDisplayConfigRef,
        fadeOutSeconds: CGDisplayFadeInterval,
        fadeInSeconds: CGDisplayFadeInterval,
        fadeRed: c_float,
        fadeGreen: c_float,
        fadeBlue: c_float,
    ) -> CGError;
    pub fn CGAcquireDisplayFadeReservation(seconds: CGDisplayReservationInterval, token: *mut CGDisplayFadeReservationToken) -> CGError;
    pub fn CGReleaseDisplayFadeReservation(token: CGDisplayFadeReservationToken) -> CGError;
    pub fn CGDisplayFade(
        token: CGDisplayFadeReservationToken,
        duration: CGDisplayFadeInterval,
        startBlend: CGDisplayBlendFraction,
        endBlend: CGDisplayBlendFraction,
        redBlend: c_float,
        greenBlend: c_float,
        blueBlend: c_float,
        synchronous: boolean_t,
    ) -> CGError;
    pub fn CGDisplayFadeOperationInProgress() -> boolean_t;
}