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