mirror of
https://github.com/italicsjenga/winit-sonoma-fix.git
synced 2024-10-19 00:11:34 +11:00
131 lines
3.6 KiB
Rust
131 lines
3.6 KiB
Rust
use std::ffi::CString;
|
|
|
|
use libc;
|
|
use objc::runtime::{ Object, Class };
|
|
|
|
#[allow(non_camel_case_types)]
|
|
pub type id = *mut Object;
|
|
|
|
#[allow(non_camel_case_types)]
|
|
#[allow(non_upper_case_globals)]
|
|
pub const nil: id = 0 as id;
|
|
|
|
pub type CFStringRef = *const libc::c_void;
|
|
pub type CFTimeInterval = f64;
|
|
pub type Boolean = u32;
|
|
|
|
#[allow(non_upper_case_globals)]
|
|
pub const kCFRunLoopRunHandledSource: i32 = 4;
|
|
|
|
#[cfg(target_pointer_width = "32")]
|
|
pub type CGFloat = f32;
|
|
#[cfg(target_pointer_width = "64")]
|
|
pub type CGFloat = f64;
|
|
|
|
#[cfg(target_pointer_width = "32")]
|
|
pub type NSUInteger = u32;
|
|
#[cfg(target_pointer_width = "64")]
|
|
pub type NSUInteger = u64;
|
|
|
|
#[allow(non_upper_case_globals)]
|
|
pub const UIViewAutoresizingFlexibleWidth: NSUInteger = 1 << 1;
|
|
#[allow(non_upper_case_globals)]
|
|
pub const UIViewAutoresizingFlexibleHeight: NSUInteger = 1 << 4;
|
|
|
|
|
|
#[repr(C)]
|
|
#[derive(Debug, Clone)]
|
|
pub struct CGPoint {
|
|
pub x: CGFloat,
|
|
pub y: CGFloat,
|
|
}
|
|
|
|
#[repr(C)]
|
|
#[derive(Debug, Clone)]
|
|
pub struct CGRect {
|
|
pub origin: CGPoint,
|
|
pub size: CGSize
|
|
}
|
|
|
|
#[repr(C)]
|
|
#[derive(Debug, Clone)]
|
|
pub struct CGSize {
|
|
pub width: CGFloat,
|
|
pub height: CGFloat
|
|
}
|
|
|
|
pub mod gles {
|
|
include!(concat!(env!("OUT_DIR"), "/gles2_bindings.rs"));
|
|
}
|
|
|
|
#[link(name = "UIKit", kind = "framework")]
|
|
#[link(name = "CoreFoundation", kind = "framework")]
|
|
#[link(name = "GlKit", kind = "framework")]
|
|
extern {
|
|
pub static kCFRunLoopDefaultMode: CFStringRef;
|
|
|
|
pub static kEAGLColorFormatRGB565: id;
|
|
// pub static kEAGLColorFormatRGBA8: id;
|
|
pub static kEAGLDrawablePropertyColorFormat: id;
|
|
pub static kEAGLDrawablePropertyRetainedBacking: id;
|
|
|
|
// int UIApplicationMain ( int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName );
|
|
pub fn UIApplicationMain(argc: libc::c_int, argv: *const libc::c_char, principalClassName: id, delegateClassName: id) -> libc::c_int;
|
|
|
|
// SInt32 CFRunLoopRunInMode ( CFStringRef mode, CFTimeInterval seconds, Boolean returnAfterSourceHandled );
|
|
pub fn CFRunLoopRunInMode(mode: CFStringRef, seconds: CFTimeInterval, returnAfterSourceHandled: Boolean) -> i32;
|
|
}
|
|
|
|
extern {
|
|
pub fn setjmp(env: *mut libc::c_void) -> libc::c_int;
|
|
pub fn longjmp(env: *mut libc::c_void, val: libc::c_int);
|
|
}
|
|
|
|
pub const RTLD_LAZY: libc::c_int = 0x001;
|
|
pub const RTLD_GLOBAL: libc::c_int = 0x100;
|
|
|
|
extern {
|
|
pub fn dlopen(filename: *const libc::c_char, flag: libc::c_int) -> *mut libc::c_void;
|
|
pub fn dlsym(handle: *mut libc::c_void, symbol: *const libc::c_char) -> *mut libc::c_void;
|
|
}
|
|
|
|
pub trait NSString {
|
|
unsafe fn alloc(_: Self) -> id {
|
|
msg_send![class("NSString"), alloc]
|
|
}
|
|
|
|
#[allow(non_snake_case)]
|
|
unsafe fn initWithUTF8String_(self, c_string: *const i8) -> id;
|
|
#[allow(non_snake_case)]
|
|
unsafe fn stringByAppendingString_(self, other: id) -> id;
|
|
unsafe fn init_str(self, string: &str) -> Self;
|
|
#[allow(non_snake_case)]
|
|
unsafe fn UTF8String(self) -> *const libc::c_char;
|
|
}
|
|
|
|
impl NSString for id {
|
|
unsafe fn initWithUTF8String_(self, c_string: *const i8) -> id {
|
|
msg_send![self, initWithUTF8String:c_string as id]
|
|
}
|
|
|
|
unsafe fn stringByAppendingString_(self, other: id) -> id {
|
|
msg_send![self, stringByAppendingString:other]
|
|
}
|
|
|
|
unsafe fn init_str(self, string: &str) -> id {
|
|
let cstring = CString::new(string).unwrap();
|
|
self.initWithUTF8String_(cstring.as_ptr())
|
|
}
|
|
|
|
unsafe fn UTF8String(self) -> *const libc::c_char {
|
|
msg_send![self, UTF8String]
|
|
}
|
|
}
|
|
|
|
#[inline]
|
|
pub fn class(name: &str) -> *mut Class {
|
|
unsafe {
|
|
::std::mem::transmute(Class::get(name))
|
|
}
|
|
}
|