// Copyright 2013-2015 The Servo Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution. // // Licensed under the Apache License, Version 2.0 or the MIT license // , at your // option. This file may not be copied, modified, or distributed // except according to those terms. use std::os::raw::c_void; use crate::array::CFArrayRef; use crate::base::{ mach_port_t, Boolean, CFAllocatorRef, CFHashCode, CFIndex, CFOptionFlags, CFTypeID, }; use crate::date::{CFAbsoluteTime, CFTimeInterval}; use crate::string::CFStringRef; #[repr(C)] pub struct __CFRunLoop(c_void); pub type CFRunLoopRef = *mut __CFRunLoop; #[repr(C)] pub struct __CFRunLoopSource(c_void); pub type CFRunLoopSourceRef = *mut __CFRunLoopSource; #[repr(C)] pub struct __CFRunLoopObserver(c_void); pub type CFRunLoopObserverRef = *mut __CFRunLoopObserver; // Reasons for CFRunLoopRunInMode() to Return pub const kCFRunLoopRunFinished: i32 = 1; pub const kCFRunLoopRunStopped: i32 = 2; pub const kCFRunLoopRunTimedOut: i32 = 3; pub const kCFRunLoopRunHandledSource: i32 = 4; // Run Loop Observer Activities //typedef CF_OPTIONS(CFOptionFlags, CFRunLoopActivity) { pub type CFRunLoopActivity = CFOptionFlags; pub const kCFRunLoopEntry: CFOptionFlags = 1 << 0; pub const kCFRunLoopBeforeTimers: CFOptionFlags = 1 << 1; pub const kCFRunLoopBeforeSources: CFOptionFlags = 1 << 2; pub const kCFRunLoopBeforeWaiting: CFOptionFlags = 1 << 5; pub const kCFRunLoopAfterWaiting: CFOptionFlags = 1 << 6; pub const kCFRunLoopExit: CFOptionFlags = 1 << 7; pub const kCFRunLoopAllActivities: CFOptionFlags = 0x0FFFFFFF; #[repr(C)] #[derive(Debug, Clone, Copy)] pub struct CFRunLoopSourceContext { pub version: CFIndex, pub info: *mut c_void, pub retain: Option *const c_void>, pub release: Option, pub copyDescription: Option CFStringRef>, pub equal: Option Boolean>, pub hash: Option CFHashCode>, pub schedule: Option, pub cancel: Option, pub perform: extern "C" fn(info: *const c_void), } #[repr(C)] #[derive(Debug, Clone, Copy)] pub struct CFRunLoopSourceContext1 { pub version: CFIndex, pub info: *mut c_void, pub retain: Option *const c_void>, pub release: Option, pub copyDescription: Option CFStringRef>, pub equal: Option Boolean>, pub hash: Option CFHashCode>, #[cfg(any(target_os = "macos", target_os = "ios"))] pub getPort: extern "C" fn(info: *mut c_void) -> mach_port_t, #[cfg(any(target_os = "macos", target_os = "ios"))] pub perform: extern "C" fn( msg: *mut c_void, size: CFIndex, allocator: CFAllocatorRef, info: *mut c_void, ) -> *mut c_void, #[cfg(not(any(target_os = "macos", target_os = "ios")))] pub getPort: extern "C" fn(info: *mut c_void) -> *mut c_void, #[cfg(not(any(target_os = "macos", target_os = "ios")))] pub perform: extern "C" fn(info: *mut c_void) -> *mut c_void, } #[repr(C)] #[derive(Debug, Clone, Copy)] pub struct CFRunLoopObserverContext { pub version: CFIndex, pub info: *mut c_void, pub retain: Option *const c_void>, pub release: Option, pub copyDescription: Option CFStringRef>, } pub type CFRunLoopObserverCallBack = extern "C" fn(observer: CFRunLoopObserverRef, activity: CFRunLoopActivity, info: *mut c_void); #[repr(C)] #[derive(Clone, Copy, Debug)] pub struct CFRunLoopTimerContext { pub version: CFIndex, pub info: *mut c_void, pub retain: Option *const c_void>, pub release: Option, pub copyDescription: Option CFStringRef>, } pub type CFRunLoopTimerCallBack = extern "C" fn(timer: CFRunLoopTimerRef, info: *mut c_void); #[repr(C)] pub struct __CFRunLoopTimer(c_void); pub type CFRunLoopTimerRef = *mut __CFRunLoopTimer; extern "C" { /* * CFRunLoop.h */ pub static kCFRunLoopDefaultMode: CFStringRef; pub static kCFRunLoopCommonModes: CFStringRef; /* CFRunLoop */ /* Getting a Run Loop */ pub fn CFRunLoopGetCurrent() -> CFRunLoopRef; pub fn CFRunLoopGetMain() -> CFRunLoopRef; /* Starting and Stopping a Run Loop */ pub fn CFRunLoopRun(); pub fn CFRunLoopRunInMode( mode: CFStringRef, seconds: CFTimeInterval, returnAfterSourceHandled: Boolean, ) -> i32; pub fn CFRunLoopWakeUp(rl: CFRunLoopRef); pub fn CFRunLoopStop(rl: CFRunLoopRef); pub fn CFRunLoopIsWaiting(rl: CFRunLoopRef) -> Boolean; /* Managing Sources */ pub fn CFRunLoopAddSource(rl: CFRunLoopRef, source: CFRunLoopSourceRef, mode: CFStringRef); pub fn CFRunLoopContainsSource( rl: CFRunLoopRef, source: CFRunLoopSourceRef, mode: CFStringRef, ) -> Boolean; pub fn CFRunLoopRemoveSource(rl: CFRunLoopRef, source: CFRunLoopSourceRef, mode: CFStringRef); /* Managing Observers */ pub fn CFRunLoopAddObserver( rl: CFRunLoopRef, observer: CFRunLoopObserverRef, mode: CFStringRef, ); pub fn CFRunLoopContainsObserver( rl: CFRunLoopRef, observer: CFRunLoopObserverRef, mode: CFStringRef, ) -> Boolean; pub fn CFRunLoopRemoveObserver( rl: CFRunLoopRef, observer: CFRunLoopObserverRef, mode: CFStringRef, ); /* Managing Run Loop Modes */ pub fn CFRunLoopAddCommonMode(rl: CFRunLoopRef, mode: CFStringRef); pub fn CFRunLoopCopyAllModes(rl: CFRunLoopRef) -> CFArrayRef; pub fn CFRunLoopCopyCurrentMode(rl: CFRunLoopRef) -> CFStringRef; /* Managing Timers */ pub fn CFRunLoopAddTimer(rl: CFRunLoopRef, timer: CFRunLoopTimerRef, mode: CFStringRef); pub fn CFRunLoopGetNextTimerFireDate(rl: CFRunLoopRef, mode: CFStringRef) -> CFAbsoluteTime; pub fn CFRunLoopRemoveTimer(rl: CFRunLoopRef, timer: CFRunLoopTimerRef, mode: CFStringRef); pub fn CFRunLoopContainsTimer( rl: CFRunLoopRef, timer: CFRunLoopTimerRef, mode: CFStringRef, ) -> Boolean; /* Scheduling Blocks */ // fn CFRunLoopPerformBlock(rl: CFRunLoopRef, mode: CFTypeRef, block: void (^)(void)); /* Getting the CFRunLoop Type ID */ pub fn CFRunLoopGetTypeID() -> CFTypeID; /* CFRunLoopSource */ /* CFRunLoopSource Miscellaneous Functions */ pub fn CFRunLoopSourceCreate( allocator: CFAllocatorRef, order: CFIndex, context: *mut CFRunLoopSourceContext, ) -> CFRunLoopSourceRef; pub fn CFRunLoopSourceGetContext( source: CFRunLoopSourceRef, context: *mut CFRunLoopSourceContext, ); pub fn CFRunLoopSourceGetOrder(source: CFRunLoopSourceRef) -> CFIndex; pub fn CFRunLoopSourceGetTypeID() -> CFTypeID; pub fn CFRunLoopSourceInvalidate(source: CFRunLoopSourceRef); pub fn CFRunLoopSourceIsValid(source: CFRunLoopSourceRef) -> Boolean; pub fn CFRunLoopSourceSignal(source: CFRunLoopSourceRef); /* CFRunLoopObserver */ /* CFRunLoopObserver Miscellaneous Functions */ // fn CFRunLoopObserverCreateWithHandler(allocator: CFAllocatorRef, activities: CFOptionFlags, repeats: Boolean, order: CFIndex, block: void (^) (CFRunLoopObserverRef observer, CFRunLoopActivity activity)) -> CFRunLoopObserverRef; pub fn CFRunLoopObserverCreate( allocator: CFAllocatorRef, activities: CFOptionFlags, repeats: Boolean, order: CFIndex, callout: CFRunLoopObserverCallBack, context: *mut CFRunLoopObserverContext, ) -> CFRunLoopObserverRef; pub fn CFRunLoopObserverDoesRepeat(observer: CFRunLoopObserverRef) -> Boolean; pub fn CFRunLoopObserverGetActivities(observer: CFRunLoopObserverRef) -> CFOptionFlags; pub fn CFRunLoopObserverGetContext( observer: CFRunLoopObserverRef, context: *mut CFRunLoopObserverContext, ); pub fn CFRunLoopObserverGetOrder(observer: CFRunLoopObserverRef) -> CFIndex; pub fn CFRunLoopObserverGetTypeID() -> CFTypeID; pub fn CFRunLoopObserverInvalidate(observer: CFRunLoopObserverRef); pub fn CFRunLoopObserverIsValid(observer: CFRunLoopObserverRef) -> Boolean; /* CFRunLoopTimer */ /* CFRunLoopTimer Miscellaneous Functions */ // fn CFRunLoopTimerCreateWithHandler(allocator: CFAllocatorRef, fireDate: CFAbsoluteTime, interval: CFTimeInterval, flags: CFOptionFlags, order: CFIndex, block: void (^) (CFRunLoopTimerRef timer)) -> CFRunLoopTimerRef; pub fn CFRunLoopTimerCreate( allocator: CFAllocatorRef, fireDate: CFAbsoluteTime, interval: CFTimeInterval, flags: CFOptionFlags, order: CFIndex, callout: CFRunLoopTimerCallBack, context: *mut CFRunLoopTimerContext, ) -> CFRunLoopTimerRef; pub fn CFRunLoopTimerDoesRepeat(timer: CFRunLoopTimerRef) -> Boolean; pub fn CFRunLoopTimerGetContext(timer: CFRunLoopTimerRef, context: *mut CFRunLoopTimerContext); pub fn CFRunLoopTimerGetInterval(timer: CFRunLoopTimerRef) -> CFTimeInterval; pub fn CFRunLoopTimerGetNextFireDate(timer: CFRunLoopTimerRef) -> CFAbsoluteTime; pub fn CFRunLoopTimerGetOrder(timer: CFRunLoopTimerRef) -> CFIndex; pub fn CFRunLoopTimerGetTypeID() -> CFTypeID; pub fn CFRunLoopTimerInvalidate(timer: CFRunLoopTimerRef); pub fn CFRunLoopTimerIsValid(timer: CFRunLoopTimerRef) -> Boolean; pub fn CFRunLoopTimerSetNextFireDate(timer: CFRunLoopTimerRef, fireDate: CFAbsoluteTime); pub fn CFRunLoopTimerGetTolerance(timer: CFRunLoopTimerRef) -> CFTimeInterval; //macos(10.9)+ pub fn CFRunLoopTimerSetTolerance(timer: CFRunLoopTimerRef, tolerance: CFTimeInterval); //macos(10.9)+ }