From ece39a27d807261002ee704658fc3148a224a4bc Mon Sep 17 00:00:00 2001 From: Nikolay Igotti Date: Fri, 1 Jun 2018 16:39:09 +0300 Subject: [PATCH] GCD usage example. --- samples/objc/src/main/kotlin/Window.kt | 30 ++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/samples/objc/src/main/kotlin/Window.kt b/samples/objc/src/main/kotlin/Window.kt index 22adfa622d6..a1c26275748 100644 --- a/samples/objc/src/main/kotlin/Window.kt +++ b/samples/objc/src/main/kotlin/Window.kt @@ -3,6 +3,8 @@ import platform.AppKit.* import platform.Foundation.* import platform.objc.* import platform.osx.* +import platform.darwin.* +import platform.posix.* fun main(args: Array) { autoreleasepool { @@ -20,9 +22,29 @@ private fun runApp() { app.run() } +data class Data(val stamp: Long) + +private class Controller : NSObject() { + private val asyncQueue = dispatch_queue_create("com.jetbrains.CustomQueue", null) + + @ObjCAction + fun onClick() { + // Execute some async action on button click. + dispatch_async_f(asyncQueue, konan.worker.detachObjectGraph { + Data(clock_gettime_nsec_np(CLOCK_REALTIME)) + }, staticCFunction { + it -> + initRuntimeIfNeeded() + val data = konan.worker.attachObjectGraph(it) + println("in async: $data") + }) + } +} + private class MyAppDelegate() : NSObject(), NSApplicationDelegateProtocol { private val window: NSWindow + private val controller = Controller() init { val mainDisplayRect = NSScreen.mainScreen()!!.frame @@ -33,6 +55,7 @@ private class MyAppDelegate() : NSObject(), NSApplicationDelegateProtocol { size.width * 0.5, size.height * 0.5 ) + } val windowStyle = NSWindowStyleMaskTitled or NSWindowStyleMaskMiniaturizable or @@ -54,6 +77,13 @@ private class MyAppDelegate() : NSObject(), NSApplicationDelegateProtocol { } } } + + val button = NSButton().initWithFrame(NSMakeRect(10.0, 10.0, 100.0, 40.0)).apply { + title = "Press me" + target = controller + action = NSSelectorFromString("onClick") + } + window.contentView!!.addSubview(button) } override fun applicationWillFinishLaunching(notification: NSNotification) {