core_graphics2/
direct_display.rs1use 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}