2018-05-18 11:28:30 +10:00
|
|
|
// TODO: Upstream these
|
|
|
|
|
2018-05-21 00:24:05 +10:00
|
|
|
#![allow(dead_code, non_snake_case, non_upper_case_globals)]
|
2018-05-18 11:28:30 +10:00
|
|
|
|
2019-06-22 01:33:15 +10:00
|
|
|
use cocoa::{
|
|
|
|
base::id,
|
|
|
|
foundation::{NSInteger, NSUInteger},
|
|
|
|
};
|
2019-07-30 04:16:14 +10:00
|
|
|
use core_foundation::{
|
|
|
|
array::CFArrayRef, dictionary::CFDictionaryRef, string::CFStringRef, uuid::CFUUIDRef,
|
|
|
|
};
|
|
|
|
use core_graphics::{
|
|
|
|
base::CGError,
|
|
|
|
display::{CGDirectDisplayID, CGDisplayConfigRef},
|
|
|
|
};
|
2018-05-18 11:28:30 +10:00
|
|
|
use objc;
|
|
|
|
|
|
|
|
pub const NSNotFound: NSInteger = NSInteger::max_value();
|
|
|
|
|
|
|
|
#[repr(C)]
|
|
|
|
pub struct NSRange {
|
|
|
|
pub location: NSUInteger,
|
|
|
|
pub length: NSUInteger,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl NSRange {
|
|
|
|
#[inline]
|
|
|
|
pub fn new(location: NSUInteger, length: NSUInteger) -> NSRange {
|
|
|
|
NSRange { location, length }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
unsafe impl objc::Encode for NSRange {
|
|
|
|
fn encode() -> objc::Encoding {
|
|
|
|
let encoding = format!(
|
|
|
|
// TODO: Verify that this is correct
|
|
|
|
"{{NSRange={}{}}}",
|
|
|
|
NSUInteger::encode().as_str(),
|
|
|
|
NSUInteger::encode().as_str(),
|
|
|
|
);
|
|
|
|
unsafe { objc::Encoding::from_str(&encoding) }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pub trait NSMutableAttributedString: Sized {
|
|
|
|
unsafe fn alloc(_: Self) -> id {
|
2018-07-20 02:02:33 +10:00
|
|
|
msg_send![class!(NSMutableAttributedString), alloc]
|
2018-05-18 11:28:30 +10:00
|
|
|
}
|
|
|
|
|
|
|
|
unsafe fn init(self) -> id; // *mut NSMutableAttributedString
|
|
|
|
unsafe fn initWithString(self, string: id) -> id;
|
|
|
|
unsafe fn initWithAttributedString(self, string: id) -> id;
|
|
|
|
|
|
|
|
unsafe fn string(self) -> id; // *mut NSString
|
|
|
|
unsafe fn mutableString(self) -> id; // *mut NSMutableString
|
|
|
|
unsafe fn length(self) -> NSUInteger;
|
|
|
|
}
|
|
|
|
|
|
|
|
impl NSMutableAttributedString for id {
|
|
|
|
unsafe fn init(self) -> id {
|
|
|
|
msg_send![self, init]
|
|
|
|
}
|
|
|
|
|
|
|
|
unsafe fn initWithString(self, string: id) -> id {
|
2019-06-22 01:33:15 +10:00
|
|
|
msg_send![self, initWithString: string]
|
2018-05-18 11:28:30 +10:00
|
|
|
}
|
|
|
|
|
|
|
|
unsafe fn initWithAttributedString(self, string: id) -> id {
|
2019-06-22 01:33:15 +10:00
|
|
|
msg_send![self, initWithAttributedString: string]
|
2018-05-18 11:28:30 +10:00
|
|
|
}
|
|
|
|
|
|
|
|
unsafe fn string(self) -> id {
|
|
|
|
msg_send![self, string]
|
|
|
|
}
|
|
|
|
|
|
|
|
unsafe fn mutableString(self) -> id {
|
|
|
|
msg_send![self, mutableString]
|
|
|
|
}
|
|
|
|
|
|
|
|
unsafe fn length(self) -> NSUInteger {
|
|
|
|
msg_send![self, length]
|
|
|
|
}
|
|
|
|
}
|
2018-05-21 00:24:05 +10:00
|
|
|
|
|
|
|
pub const kCGBaseWindowLevelKey: NSInteger = 0;
|
|
|
|
pub const kCGMinimumWindowLevelKey: NSInteger = 1;
|
|
|
|
pub const kCGDesktopWindowLevelKey: NSInteger = 2;
|
|
|
|
pub const kCGBackstopMenuLevelKey: NSInteger = 3;
|
|
|
|
pub const kCGNormalWindowLevelKey: NSInteger = 4;
|
|
|
|
pub const kCGFloatingWindowLevelKey: NSInteger = 5;
|
|
|
|
pub const kCGTornOffMenuWindowLevelKey: NSInteger = 6;
|
|
|
|
pub const kCGDockWindowLevelKey: NSInteger = 7;
|
|
|
|
pub const kCGMainMenuWindowLevelKey: NSInteger = 8;
|
|
|
|
pub const kCGStatusWindowLevelKey: NSInteger = 9;
|
|
|
|
pub const kCGModalPanelWindowLevelKey: NSInteger = 10;
|
|
|
|
pub const kCGPopUpMenuWindowLevelKey: NSInteger = 11;
|
|
|
|
pub const kCGDraggingWindowLevelKey: NSInteger = 12;
|
|
|
|
pub const kCGScreenSaverWindowLevelKey: NSInteger = 13;
|
|
|
|
pub const kCGMaximumWindowLevelKey: NSInteger = 14;
|
|
|
|
pub const kCGOverlayWindowLevelKey: NSInteger = 15;
|
|
|
|
pub const kCGHelpWindowLevelKey: NSInteger = 16;
|
|
|
|
pub const kCGUtilityWindowLevelKey: NSInteger = 17;
|
|
|
|
pub const kCGDesktopIconWindowLevelKey: NSInteger = 18;
|
|
|
|
pub const kCGCursorWindowLevelKey: NSInteger = 19;
|
|
|
|
pub const kCGNumberOfWindowLevelKeys: NSInteger = 20;
|
|
|
|
|
2019-05-02 09:03:30 +10:00
|
|
|
#[derive(Debug, Clone, Copy)]
|
2018-05-21 00:24:05 +10:00
|
|
|
pub enum NSWindowLevel {
|
|
|
|
NSNormalWindowLevel = kCGBaseWindowLevelKey as _,
|
|
|
|
NSFloatingWindowLevel = kCGFloatingWindowLevelKey as _,
|
|
|
|
NSTornOffMenuWindowLevel = kCGTornOffMenuWindowLevelKey as _,
|
|
|
|
NSModalPanelWindowLevel = kCGModalPanelWindowLevelKey as _,
|
|
|
|
NSMainMenuWindowLevel = kCGMainMenuWindowLevelKey as _,
|
|
|
|
NSStatusWindowLevel = kCGStatusWindowLevelKey as _,
|
|
|
|
NSPopUpMenuWindowLevel = kCGPopUpMenuWindowLevelKey as _,
|
|
|
|
NSScreenSaverWindowLevel = kCGScreenSaverWindowLevelKey as _,
|
|
|
|
}
|
2019-07-30 04:16:14 +10:00
|
|
|
|
|
|
|
pub type CGDisplayFadeInterval = f32;
|
|
|
|
pub type CGDisplayReservationInterval = f32;
|
|
|
|
pub type CGDisplayBlendFraction = f32;
|
|
|
|
|
|
|
|
pub const kCGDisplayBlendNormal: f32 = 0.0;
|
|
|
|
pub const kCGDisplayBlendSolidColor: f32 = 1.0;
|
|
|
|
|
|
|
|
pub type CGDisplayFadeReservationToken = u32;
|
|
|
|
pub const kCGDisplayFadeReservationInvalidToken: CGDisplayFadeReservationToken = 0;
|
|
|
|
|
|
|
|
pub type Boolean = u8;
|
|
|
|
pub const FALSE: Boolean = 0;
|
|
|
|
pub const TRUE: Boolean = 1;
|
|
|
|
|
|
|
|
pub const kCGErrorSuccess: i32 = 0;
|
|
|
|
pub const kCGErrorFailure: i32 = 1000;
|
|
|
|
pub const kCGErrorIllegalArgument: i32 = 1001;
|
|
|
|
pub const kCGErrorInvalidConnection: i32 = 1002;
|
|
|
|
pub const kCGErrorInvalidContext: i32 = 1003;
|
|
|
|
pub const kCGErrorCannotComplete: i32 = 1004;
|
|
|
|
pub const kCGErrorNotImplemented: i32 = 1006;
|
|
|
|
pub const kCGErrorRangeCheck: i32 = 1007;
|
|
|
|
pub const kCGErrorTypeCheck: i32 = 1008;
|
|
|
|
pub const kCGErrorInvalidOperation: i32 = 1010;
|
|
|
|
pub const kCGErrorNoneAvailable: i32 = 1011;
|
|
|
|
|
|
|
|
pub const IO1BitIndexedPixels: &str = "P";
|
|
|
|
pub const IO2BitIndexedPixels: &str = "PP";
|
|
|
|
pub const IO4BitIndexedPixels: &str = "PPPP";
|
|
|
|
pub const IO8BitIndexedPixels: &str = "PPPPPPPP";
|
|
|
|
pub const IO16BitDirectPixels: &str = "-RRRRRGGGGGBBBBB";
|
|
|
|
pub const IO32BitDirectPixels: &str = "--------RRRRRRRRGGGGGGGGBBBBBBBB";
|
|
|
|
|
|
|
|
pub const kIO30BitDirectPixels: &str = "--RRRRRRRRRRGGGGGGGGGGBBBBBBBBBB";
|
|
|
|
pub const kIO64BitDirectPixels: &str = "-16R16G16B16";
|
|
|
|
|
|
|
|
pub const kIO16BitFloatPixels: &str = "-16FR16FG16FB16";
|
|
|
|
pub const kIO32BitFloatPixels: &str = "-32FR32FG32FB32";
|
|
|
|
|
|
|
|
pub const IOYUV422Pixels: &str = "Y4U2V2";
|
|
|
|
pub const IO8BitOverlayPixels: &str = "O8";
|
|
|
|
|
|
|
|
pub type CGWindowLevel = i32;
|
|
|
|
pub type CGDisplayModeRef = *mut libc::c_void;
|
|
|
|
|
|
|
|
#[link(name = "CoreGraphics", kind = "framework")]
|
|
|
|
extern "C" {
|
|
|
|
pub fn CGRestorePermanentDisplayConfiguration();
|
|
|
|
pub fn CGDisplayCapture(display: CGDirectDisplayID) -> CGError;
|
|
|
|
pub fn CGDisplayRelease(display: CGDirectDisplayID) -> CGError;
|
|
|
|
pub fn CGConfigureDisplayFadeEffect(
|
|
|
|
config: CGDisplayConfigRef,
|
|
|
|
fadeOutSeconds: CGDisplayFadeInterval,
|
|
|
|
fadeInSeconds: CGDisplayFadeInterval,
|
|
|
|
fadeRed: f32,
|
|
|
|
fadeGreen: f32,
|
|
|
|
fadeBlue: f32,
|
|
|
|
) -> CGError;
|
|
|
|
pub fn CGAcquireDisplayFadeReservation(
|
|
|
|
seconds: CGDisplayReservationInterval,
|
|
|
|
token: *mut CGDisplayFadeReservationToken,
|
|
|
|
) -> CGError;
|
|
|
|
pub fn CGDisplayFade(
|
|
|
|
token: CGDisplayFadeReservationToken,
|
|
|
|
duration: CGDisplayFadeInterval,
|
|
|
|
startBlend: CGDisplayBlendFraction,
|
|
|
|
endBlend: CGDisplayBlendFraction,
|
|
|
|
redBlend: f32,
|
|
|
|
greenBlend: f32,
|
|
|
|
blueBlend: f32,
|
|
|
|
synchronous: Boolean,
|
|
|
|
) -> CGError;
|
|
|
|
pub fn CGReleaseDisplayFadeReservation(token: CGDisplayFadeReservationToken) -> CGError;
|
|
|
|
pub fn CGDisplayCreateUUIDFromDisplayID(display: CGDirectDisplayID) -> CFUUIDRef;
|
|
|
|
pub fn CGShieldingWindowLevel() -> CGWindowLevel;
|
|
|
|
pub fn CGDisplaySetDisplayMode(
|
|
|
|
display: CGDirectDisplayID,
|
|
|
|
mode: CGDisplayModeRef,
|
|
|
|
options: CFDictionaryRef,
|
|
|
|
) -> CGError;
|
|
|
|
pub fn CGDisplayCopyAllDisplayModes(
|
|
|
|
display: CGDirectDisplayID,
|
|
|
|
options: CFDictionaryRef,
|
|
|
|
) -> CFArrayRef;
|
|
|
|
pub fn CGDisplayModeGetPixelWidth(mode: CGDisplayModeRef) -> usize;
|
|
|
|
pub fn CGDisplayModeGetPixelHeight(mode: CGDisplayModeRef) -> usize;
|
|
|
|
pub fn CGDisplayModeGetRefreshRate(mode: CGDisplayModeRef) -> f64;
|
|
|
|
pub fn CGDisplayModeCopyPixelEncoding(mode: CGDisplayModeRef) -> CFStringRef;
|
|
|
|
pub fn CGDisplayModeRetain(mode: CGDisplayModeRef);
|
|
|
|
pub fn CGDisplayModeRelease(mode: CGDisplayModeRef);
|
|
|
|
}
|