core_graphics2/
direct_display.rs

1use core_foundation::{array::CFArrayRef, base::CFTypeID, dictionary::CFDictionaryRef, string::CFStringRef};
2use libc::{c_double, c_float, c_void, size_t};
3
4use crate::{
5    context::CGContextRef,
6    error::CGError,
7    geometry::{CGPoint, CGRect},
8    image::CGImageRef,
9};
10#[cfg(feature = "window")]
11use crate::{window::CGWindowID, window_level::CGWindowLevel};
12
13pub type CGDirectDisplayID = u32;
14pub type CGOpenGLDisplayMask = u32;
15pub type CGRefreshRate = c_double;
16pub type CGGammaValue = c_float;
17
18#[repr(C)]
19pub struct __CGDisplayMode(c_void);
20
21pub type CGDisplayModeRef = *mut __CGDisplayMode;
22
23pub const kCGNullDirectDisplay: CGDirectDisplayID = 0;
24
25extern "C" {
26    pub fn CGMainDisplayID() -> CGDirectDisplayID;
27    pub fn CGGetDisplaysWithPoint(point: CGPoint, maxDisplays: u32, displays: *mut CGDirectDisplayID, matchingDisplayCount: *mut u32) -> CGError;
28    pub fn CGGetDisplaysWithRect(rect: CGRect, maxDisplays: u32, displays: *mut CGDirectDisplayID, matchingDisplayCount: *mut u32) -> CGError;
29    pub fn CGGetDisplaysWithOpenGLDisplayMask(
30        mask: CGOpenGLDisplayMask,
31        maxDisplays: u32,
32        displays: *mut CGDirectDisplayID,
33        matchingDisplayCount: *mut u32,
34    ) -> CGError;
35    pub fn CGGetActiveDisplayList(maxDisplays: u32, activeDisplays: *mut CGDirectDisplayID, displayCount: *mut u32) -> CGError;
36    pub fn CGGetOnlineDisplayList(maxDisplays: u32, onlineDisplays: *mut CGDirectDisplayID, displayCount: *mut u32) -> CGError;
37    pub fn CGDisplayIDToOpenGLDisplayMask(display: CGDirectDisplayID) -> CGOpenGLDisplayMask;
38    pub fn CGOpenGLDisplayMaskToDisplayID(mask: CGOpenGLDisplayMask) -> CGDirectDisplayID;
39    pub fn CGDisplayBounds(display: CGDirectDisplayID) -> CGRect;
40    pub fn CGDisplayPixelsWide(display: CGDirectDisplayID) -> size_t;
41    pub fn CGDisplayPixelsHigh(display: CGDirectDisplayID) -> size_t;
42    pub fn CGDisplayCopyAllDisplayModes(display: CGDirectDisplayID, options: CFDictionaryRef) -> CFArrayRef;
43    pub fn CGDisplayCopyDisplayMode(display: CGDirectDisplayID) -> CGDisplayModeRef;
44    pub fn CGDisplaySetDisplayMode(display: CGDirectDisplayID, mode: CGDisplayModeRef, options: CFDictionaryRef) -> CGError;
45    pub fn CGDisplayModeGetWidth(mode: CGDisplayModeRef) -> size_t;
46    pub fn CGDisplayModeGetHeight(mode: CGDisplayModeRef) -> size_t;
47    pub fn CGDisplayModeCopyPixelEncoding(mode: CGDisplayModeRef) -> CFStringRef;
48    pub fn CGDisplayModeGetRefreshRate(mode: CGDisplayModeRef) -> CGRefreshRate;
49    pub fn CGDisplayModeGetIOFlags(mode: CGDisplayModeRef) -> u32;
50    pub fn CGDisplayModeGetIODisplayModeID(mode: CGDisplayModeRef) -> i32;
51    pub fn CGDisplayModeIsUsableForDesktopGUI(mode: CGDisplayModeRef) -> bool;
52    pub fn CGDisplayModeGetTypeID() -> CFTypeID;
53    pub fn CGDisplayModeRetain(mode: CGDisplayModeRef) -> CGDisplayModeRef;
54    pub fn CGDisplayModeRelease(mode: CGDisplayModeRef);
55    pub fn CGDisplayModeGetPixelWidth(mode: CGDisplayModeRef) -> size_t;
56    pub fn CGDisplayModeGetPixelHeight(mode: CGDisplayModeRef) -> size_t;
57    pub fn CGSetDisplayTransferByFormula(
58        display: CGDirectDisplayID,
59        redMin: CGGammaValue,
60        redMax: CGGammaValue,
61        redGamma: CGGammaValue,
62        greenMin: CGGammaValue,
63        greenMax: CGGammaValue,
64        greenGamma: CGGammaValue,
65        blueMin: CGGammaValue,
66        blueMax: CGGammaValue,
67        blueGamma: CGGammaValue,
68    ) -> CGError;
69    pub fn CGGetDisplayTransferByFormula(
70        display: CGDirectDisplayID,
71        redMin: *mut CGGammaValue,
72        redMax: *mut CGGammaValue,
73        redGamma: *mut CGGammaValue,
74        greenMin: *mut CGGammaValue,
75        greenMax: *mut CGGammaValue,
76        greenGamma: *mut CGGammaValue,
77        blueMin: *mut CGGammaValue,
78        blueMax: *mut CGGammaValue,
79        blueGamma: *mut CGGammaValue,
80    ) -> CGError;
81    pub fn CGDisplayGammaTableCapacity(display: CGDirectDisplayID) -> u32;
82    pub fn CGSetDisplayTransferByTable(
83        display: CGDirectDisplayID,
84        tableSize: u32,
85        redTable: *const CGGammaValue,
86        greenTable: *const CGGammaValue,
87        blueTable: *const CGGammaValue,
88    ) -> CGError;
89    pub fn CGGetDisplayTransferByTable(
90        display: CGDirectDisplayID,
91        capacity: u32,
92        redTable: *mut CGGammaValue,
93        greenTable: *mut CGGammaValue,
94        blueTable: *mut CGGammaValue,
95        sampleCount: *mut u32,
96    ) -> CGError;
97    pub fn CGSetDisplayTransferByByteTable(
98        display: CGDirectDisplayID,
99        tableSize: u32,
100        redTable: *const u8,
101        greenTable: *const u8,
102        blueTable: *const u8,
103    ) -> CGError;
104    pub fn CGDisplayRestoreColorSyncSettings();
105
106    pub static kCGDisplayShowDuplicateLowResolutionModes: CFDictionaryRef;
107}
108
109bitflags! {
110    #[repr(C)]
111    #[derive(Clone, Copy, Debug, Default, PartialEq)]
112    pub struct CGCaptureOptions: u32 {
113        #[doc(alias = "kCGCaptureNoOptions")]
114        const NoOptions = 0;
115        #[doc(alias = "kCGCaptureNoFill")]
116        const NoFill = 1;
117    }
118}
119
120extern "C" {
121    pub fn CGDisplayCapture(display: CGDirectDisplayID) -> CGError;
122    pub fn CGDisplayCaptureWithOptions(display: CGDirectDisplayID, options: CGCaptureOptions) -> CGError;
123    pub fn CGDisplayRelease(display: CGDirectDisplayID) -> CGError;
124    pub fn CGCaptureAllDisplays() -> CGError;
125    pub fn CGCaptureAllDisplaysWithOptions(options: CGCaptureOptions) -> CGError;
126    pub fn CGReleaseAllDisplays() -> CGError;
127    #[cfg(feature = "window")]
128    pub fn CGShieldingWindowID(display: CGDirectDisplayID) -> CGWindowID;
129    #[cfg(feature = "window")]
130    pub fn CGShieldingWindowLevel() -> CGWindowLevel;
131    pub fn CGDisplayCreateImage(display: CGDirectDisplayID) -> CGImageRef;
132    pub fn CGDisplayCreateImageForRect(display: CGDirectDisplayID, rect: CGRect) -> CGImageRef;
133    pub fn CGDisplayHideCursor(display: CGDirectDisplayID) -> CGError;
134    pub fn CGDisplayShowCursor(display: CGDirectDisplayID) -> CGError;
135    pub fn CGDisplayMoveCursorToPoint(display: CGDirectDisplayID, point: CGPoint) -> CGError;
136    pub fn CGGetLastMouseDelta(deltaX: *mut i32, deltaY: *mut i32) -> CGError;
137    pub fn CGDisplayGetDrawingContext(display: CGDirectDisplayID) -> CGContextRef;
138}