Skip to main content

core_graphics2/
direct_display.rs

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