cgs 0.1.0

a ui library for macos
use std::ffi::{c_int, c_void};
use std::sync::LazyLock;

use objc2_core_foundation::{CFString, CFType, CGPoint, CGRect};
use objc2_core_graphics::{CGColorSpace, CGContext, CGError};
#[allow(non_camel_case_types)]
pub type cid_t = i32;
pub static G_CONNECTION: LazyLock<cid_t> = LazyLock::new(|| unsafe { SLSMainConnectionID() });
#[link(name = "SkyLight", kind = "framework")]
unsafe extern "C" {
    pub(super) fn SLSMainConnectionID() -> cid_t;
    pub fn SLSNewWindowWithOpaqueShapeAndContext(
        cid: cid_t,
        r#type: c_int,
        region: *mut CFType,
        opaque_region: *mut CFType,
        options: c_int,
        tags: *mut u64,
        x: f32,
        y: f32,
        tag_count: c_int,
        out_wid: *mut u32,
        context: *mut c_void,
    ) -> CGError;
    pub fn SLSReleaseWindow(cid: cid_t, wid: u32) -> CGError;
    pub fn SLSSetWindowResolution(cid: cid_t, wid: u32, resolution: f64) -> CGError;
    pub fn SLSSetWindowAlpha(cid: cid_t, wid: u32, alpha: f32) -> CGError;
    pub fn SLSSetWindowBackgroundBlurRadiusStyle(
        cid: cid_t,
        wid: u32,
        radius: c_int,
        style: c_int,
    ) -> CGError;
    pub fn SLSSetWindowBackgroundBlurRadius(cid: cid_t, wid: u32, radius: c_int) -> CGError;
    pub fn SLSSetWindowLevel(cid: cid_t, wid: u32, level: c_int) -> CGError;
    pub fn SLSSetWindowSubLevel(cid: cid_t, wid: u32, sub_level: c_int) -> CGError;
    pub fn SLSSetWindowOpacity(cid: cid_t, wid: u32, opaque: bool) -> CGError;
    pub fn SLSSetWindowShape(
        cid: cid_t,
        wid: u32,
        x_offset: f32,
        y_offset: f32,
        shape: *mut CFType,
    ) -> CGError;
    pub fn SLSOrderWindow(cid: cid_t, wid: u32, order: c_int, relative_to: u32) -> CGError;
    pub fn SLSSetWindowTags(cid: cid_t, wid: u32, tags: *mut u64, tag_count: c_int) -> CGError;
    pub fn SLSClearWindowTags(cid: cid_t, wid: u32, tags: *mut u64, tag_count: c_int) -> CGError;
    pub fn CGSNewRegionWithRect(rect: *const CGRect, region: *mut *mut CFType) -> CGError;
    pub fn CGSNewRegionWithRectList(
        rects: *const CGRect,
        rect_count: c_int,
        region: *mut *mut CFType,
    ) -> CGError;
    pub fn CGRegionCreateEmptyRegion() -> *mut CFType;
    pub fn SLWindowContextCreate(cid: cid_t, wid: u32, options: *mut CFType) -> *mut CGContext;

    pub fn SLSAddSurface(cid: cid_t, wid: u32, out_sid: *mut u32) -> CGError;
    pub fn SLSRemoveSurface(cid: cid_t, wid: u32, sid: u32) -> CGError;
    pub fn SLSBindSurface(
        cid: cid_t,
        wid: u32,
        sid: u32,
        options: c_int,
        unknown: c_int,
        context_id: u32,
    ) -> CGError;
    pub fn SLSSetSurfaceBounds(cid: cid_t, wid: u32, sid: u32, bounds: CGRect) -> CGError;
    pub fn SLSSetSurfaceResolution(cid: cid_t, wid: u32, sid: u32, resolution: f64) -> CGError;
    pub fn SLSSetSurfaceOpacity(cid: cid_t, wid: u32, sid: u32, opaque: bool) -> CGError;
    pub fn SLSSetSurfaceColorSpace(
        cid: cid_t,
        wid: u32,
        sid: u32,
        color_space: *mut CGColorSpace,
    ) -> CGError;
    pub fn SLSOrderSurface(
        cid: cid_t,
        wid: u32,
        sid: u32,
        order: c_int,
        relative_to: u32,
    ) -> CGError;
    pub fn SLSTransactionCreate(cid: cid_t) -> *mut CFType;
    pub fn SLSTransactionSetWindowShape(
        transaction: *mut CFType,
        wid: u32,
        x_offset: f32,
        y_offset: f32,
        shape: *mut CFType,
    );
    pub fn SLSTransactionMoveWindowWithGroup(transaction: *mut CFType, wid: u32, point: CGPoint);
    pub fn SLSTransactionSetSurfaceBounds(
        transaction: *mut CFType,
        wid: u32,
        sid: u32,
        bounds: CGRect,
    );
    pub fn SLSTransactionCommit(transaction: *mut CFType, asynchronous: u32);
    pub fn SLSSetWindowProperty(
        cid: cid_t,
        wid: u32,
        property: *mut CFString,
        value: *mut CFType,
    ) -> CGError;
    pub fn SLSFlushWindowContentRegion(cid: cid_t, wid: u32, dirty: *mut c_void) -> CGError;
}