diff options
Diffstat (limited to '')
-rw-r--r-- | minilibx_beta/interface.swift | 292 |
1 files changed, 0 insertions, 292 deletions
diff --git a/minilibx_beta/interface.swift b/minilibx_beta/interface.swift deleted file mode 100644 index 97d6b81..0000000 --- a/minilibx_beta/interface.swift +++ /dev/null @@ -1,292 +0,0 @@ - -import Cocoa - -import mlx_window -import mlx_image -import mlx_init - - - -func _mlx_bridge<T : AnyObject>(obj : T) -> UnsafeRawPointer { - return UnsafeRawPointer(Unmanaged.passUnretained(obj).toOpaque()) -} - -func _mlx_bridge_retained<T : AnyObject>(obj : T) -> UnsafeRawPointer { - return UnsafeRawPointer(Unmanaged.passRetained(obj).toOpaque()) -} - -func _mlx_bridge<T : AnyObject>(ptr : UnsafeRawPointer) -> T { - return Unmanaged<T>.fromOpaque(ptr).takeUnretainedValue() -} - -func _mlx_bridge_transfer<T : AnyObject>(ptr : UnsafeRawPointer) -> T { - return Unmanaged<T>.fromOpaque(ptr).takeRetainedValue() -} - - -let MLX_SYNC_IMAGE_WRITABLE = Int32(1) -let MLX_SYNC_WIN_FLUSH_CMD = Int32(2) -let MLX_SYNC_WIN_CMD_COMPLETED = Int32(3) - - - -/// C decl - - -@_cdecl("mlx_init") -public func mlx_init_swift() -> UnsafeRawPointer -{ - let mm = MlxMain() - return (_mlx_bridge_retained(obj:mm)) -} - - -@_cdecl("mlx_loop") -public func mlx_loop_swift(_ mlxptr:UnsafeRawPointer) -{ - let mlx:MlxMain = _mlx_bridge(ptr:mlxptr) - mlx.inLoop = true - NSApp.run() -} - - -@_cdecl("mlx_new_window") -public func mlx_new_window_swift(_ mlxptr:UnsafeRawPointer, Width w:UInt32, Height h:UInt32, Title t:UnsafePointer<CChar>) -> UnsafeRawPointer -{ - let mlx:MlxMain = _mlx_bridge(ptr:mlxptr) - let mw = MlxWin(device: mlx.device, width: Int(w), height: Int(h), title: String(cString: t)) - mw.setNotifs() - mw.initMetal() - mlx.addWinToList(mw) - return (_mlx_bridge_retained(obj:mw)) -} - - - -@_cdecl("mlx_key_hook") -public func mlx_key_hook_swift(_ winptr:UnsafeRawPointer, _ fctptr:UnsafeMutableRawPointer, _ paramptr:UnsafeMutableRawPointer) -> Int32 -{ - let win:MlxWin = _mlx_bridge(ptr:winptr) - win.addHook(index: 3, fct: fctptr, param: paramptr) - return (Int32(0)); -} - - -@_cdecl("mlx_mouse_hook") -public func mlx_mouse_hook_swift(_ winptr:UnsafeRawPointer, _ fctptr:UnsafeMutableRawPointer, _ paramptr:UnsafeMutableRawPointer) -> Int32 -{ - let win:MlxWin = _mlx_bridge(ptr:winptr) - win.addHook(index: 4, fct: fctptr, param: paramptr) - return (Int32(0)); -} - - -@_cdecl("mlx_hook") -public func mlx_hook_swift(_ winptr:UnsafeRawPointer, _ xevent:Int32, _ xmask:Int32, _ fctptr:UnsafeMutableRawPointer, _ paramptr:UnsafeMutableRawPointer) -> Int32 -{ - let win:MlxWin = _mlx_bridge(ptr:winptr) - win.addHook(index: Int(xevent), fct: fctptr, param: paramptr) - return (Int32(0)); -} - - -@_cdecl("mlx_expose_hook") -public func mlx_expose_hook_swift(_ winptr:UnsafeRawPointer, _ fctptr:UnsafeMutableRawPointer, _ paramptr:UnsafeMutableRawPointer) -> Int32 -{ - let win:MlxWin = _mlx_bridge(ptr:winptr) - win.addHook(index: 12, fct: fctptr, param: paramptr) - return (Int32(0)); -} - -@_cdecl("mlx_loop_hook") -public func mlx_loop_hook_swift(_ mlxptr:UnsafeRawPointer, _ fctptr:UnsafeMutableRawPointer, _ paramptr:UnsafeMutableRawPointer) -> Int32 -{ - let mlx:MlxMain = _mlx_bridge(ptr:mlxptr) - mlx.addLoopHook(fctptr, paramptr) - return (Int32(0)); -} - - -@_cdecl("mlx_do_key_autorepeatoff") -public func mlx_do_key_autorepeatoff_swift(_ mlxptr:UnsafeRawPointer) -{ - let mlx:MlxMain = _mlx_bridge(ptr:mlxptr) - mlx.winList.forEach{ $0.setKeyRepeat(0) } -} - - -@_cdecl("mlx_do_key_autorepeaton") -public func mlx_do_key_autorepeatoon_swift(_ mlxptr:UnsafeRawPointer) -{ - let mlx:MlxMain = _mlx_bridge(ptr:mlxptr) - mlx.winList.forEach{ $0.setKeyRepeat(1) } -} - - -@_cdecl("mlx_clear_window") -public func mlx_clear_window_swift(_ mlxptr:UnsafeRawPointer, _ winptr:UnsafeRawPointer) -{ - let win:MlxWin = _mlx_bridge(ptr:winptr) - win.clearWin() -} - - -@_cdecl("mlx_pixel_put") -public func mlx_pixel_put_swift(_ mlxptr:UnsafeRawPointer, _ winptr:UnsafeRawPointer, _ x:Int32, _ y:Int32, _ color:UInt32) -{ - let win:MlxWin = _mlx_bridge(ptr:winptr) - win.pixelPut(x, y, color) -} - - -@_cdecl("mlx_get_color_value") -public func mlx_get_color_value(_ mlxptr:UnsafeRawPointer, _ color:UInt32) -> UInt32 -{ - return color -} - - -@_cdecl("mlx_new_image") -public func mlx_new_image(_ mlxptr:UnsafeRawPointer, _ width:Int32, _ height:Int32) -> UnsafeRawPointer -{ - let mlx:MlxMain = _mlx_bridge(ptr:mlxptr) - let img = MlxImg(d:mlx.device, w:Int(width), h:Int(height)) - mlx.addImgToList(img) -/// print(CFGetRetainCount(img)) - return (_mlx_bridge_retained(obj:img)) - -} - -@_cdecl("mlx_get_data_addr") -public func mlx_get_data_addr_swift(_ imgptr:UnsafeRawPointer, _ bpp:UnsafeMutablePointer<Int32>, _ sizeline:UnsafeMutablePointer<Int32>, _ endian:UnsafeMutablePointer<Int32>) -> UnsafeMutablePointer<UInt32> -{ - let img:MlxImg = _mlx_bridge(ptr:imgptr) - bpp.pointee = 32 - sizeline.pointee = Int32(img.texture_sizeline) - endian.pointee = Int32(0) - return img.texture_data -} - -@_cdecl("mlx_put_image_to_window") -public func mlx_put_image_to_window_swift(_ mlxptr:UnsafeRawPointer, _ winptr:UnsafeRawPointer, _ imgptr:UnsafeRawPointer, _ x:Int32, _ y:Int32) -> Int32 -{ - let win:MlxWin = _mlx_bridge(ptr:winptr) - let img:MlxImg = _mlx_bridge(ptr:imgptr) - win.putImage(image:img, x:x, y:y) - return Int32(0) -} - -@_cdecl("mlx_put_image_to_window_scale") -public func mlx_put_image_to_window_scale_swift(_ mlxptr:UnsafeRawPointer, _ winptr:UnsafeRawPointer, _ imgptr:UnsafeRawPointer, _ sx:Int32, _ sy:Int32, _ sw:Int32, _ sh:Int32, _ dx:Int32, _ dy:Int32, _ dw:Int32, _ dh:Int32, _ color:UInt32) -> Int32 -{ - let win:MlxWin = _mlx_bridge(ptr:winptr) - let img:MlxImg = _mlx_bridge(ptr:imgptr) - win.putImageScale(image:img, sx:sx, sy:sy, sw:sw, sh:sh, dx:dx, dy:dy, dw:dw, dh:dh, c:color) - return Int32(0) -} - -@_cdecl("mlx_do_sync") -public func mlx_do_sync_swift(_ mlxptr:UnsafeRawPointer) -> Int32 -{ - let mlx:MlxMain = _mlx_bridge(ptr:mlxptr) - mlx.winList.forEach { $0.flushImages() } - mlx.winList.forEach { $0.waitForGPU() } - return Int32(0) -} - -@_cdecl("mlx_sync") -public func mlx_sync_swift(_ what:Int32, _ param:UnsafeRawPointer) -> Int32 -{ - switch what - { - case MLX_SYNC_IMAGE_WRITABLE: - let img:MlxImg = _mlx_bridge(ptr:param); while img.onGPU > 0 {} - case MLX_SYNC_WIN_FLUSH_CMD: - let win:MlxWin = _mlx_bridge(ptr:param); win.flushImages() - case MLX_SYNC_WIN_CMD_COMPLETED: - let win:MlxWin = _mlx_bridge(ptr:param); win.flushImages(); win.waitForGPU() - default: - break - } - return Int32(0) -} - -@_cdecl("mlx_destroy_window") -public func mlx_destroy_window_swift(_ mlxptr:UnsafeRawPointer, _ winptr:UnsafeRawPointer) -> Int32 -{ - let mlx:MlxMain = _mlx_bridge(ptr:mlxptr) - /// bridge_transfer to get the retain, at end of this func should release the MlxWin object, because no ref anymore. - let win:MlxWin = _mlx_bridge_transfer(ptr:winptr) - win.delNotifs() - win.flushImages() - win.waitForGPU() - win.destroyWinE() - mlx.winList.removeAll(where: { $0 === win} ) - return Int32(0) -} - -@_cdecl("mlx_destroy_image") -public func mlx_destroy_image_swift(_ mlxptr:UnsafeRawPointer, _ imgptr:UnsafeRawPointer) -> Int32 -{ - let mlx:MlxMain = _mlx_bridge(ptr:mlxptr) - /// bridge_transfer to get the retain, at end of this func should release the MlxImg object, because no ref anymore. - let img:MlxImg = _mlx_bridge_transfer(ptr:imgptr) - mlx.winList.forEach { $0.flushImages() } - while img.onGPU > 0 {} - mlx.imgList.removeAll(where: { $0 === img} ) - return Int32(0) -} - - -@_cdecl("mlx_get_screen_size") -public func mlx_get_screen_size_swift(_ mlxptr:UnsafeRawPointer, _ sizex:UnsafeMutablePointer<Int32>, _ sizey:UnsafeMutablePointer<Int32>) -> Int32 -{ - /// let mlx:MlxMain = _mlx_bridge(ptr:mlxptr) - sizex.pointee = Int32(NSScreen.main!.frame.size.width) - sizey.pointee = Int32(NSScreen.main!.frame.size.height) - return Int32(0) -} - - -@_cdecl("mlx_mouse_hide") -public func mlx_mouse_hide_swift() -> Int32 -{ - NSCursor.hide() - return Int32(0) -} - -@_cdecl("mlx_mouse_show") -public func mlx_mouse_show_swift() -> Int32 -{ - NSCursor.unhide() - return Int32(0) -} - - -@_cdecl("mlx_mouse_move") -public func mlx_mouse_move_swift(_ winptr:UnsafeRawPointer, _ x:Int32, _ y:Int32) -> Int32 -{ - let win:MlxWin = _mlx_bridge(ptr:winptr) - let frame = win.getWinEFrame() -/// let sframe = win.getScreenFrame() - var pt = CGPoint() - pt.x = frame.origin.x + CGFloat(x) -/// pt.y = sframe.size.y - frame.size.y - frame.origin.y + 1 + y - pt.y = frame.origin.y + frame.size.height - 1.0 - CGFloat(y) - CGWarpMouseCursorPosition(pt) - CGAssociateMouseAndMouseCursorPosition(UInt32(1)) - return Int32(0); -} - - - -@_cdecl("mlx_mouse_get_pos") -public func mlx_mouse_get_pos_swift(_ winptr:UnsafeRawPointer, _ x:UnsafeMutablePointer<Int32>, _ y:UnsafeMutablePointer<Int32>) -> Int32 -{ - let win:MlxWin = _mlx_bridge(ptr:winptr) - let frame = win.getWinEFrame() - let point = win.getMouseLoc() - x.pointee = Int32(point.x) - y.pointee = Int32(frame.size.height - 1.0 - point.y) - return Int32(0) -} |