summaryrefslogtreecommitdiff
path: root/delegate_darwin.go
diff options
context:
space:
mode:
Diffstat (limited to 'delegate_darwin.go')
-rw-r--r--delegate_darwin.go46
1 files changed, 46 insertions, 0 deletions
diff --git a/delegate_darwin.go b/delegate_darwin.go
new file mode 100644
index 0000000..b1daece
--- /dev/null
+++ b/delegate_darwin.go
@@ -0,0 +1,46 @@
+// 27 february 2014
+
+package ui
+
+/*
+This creates a class goAppDelegate that will be used as the delegate for /everything/. Specifically, it:
+ - runs uitask requests (uitask:)
+ - handles window close events (windowShouldClose:)
+ - handles window resize events (windowDidResize:)
+ - handles button click events (buttonClicked:)
+ - handles the application-global Quit event (such as from the Dock) (applicationShouldTerminate)
+*/
+
+// #include <stdlib.h>
+// #include "objc_darwin.h"
+import "C"
+
+var (
+ appDelegate C.id
+)
+
+func makeAppDelegate() {
+ appDelegate = C.makeAppDelegate()
+}
+
+//export appDelegate_windowShouldClose
+func appDelegate_windowShouldClose(win C.id) C.BOOL {
+ sysData := getSysData(win)
+ return toBOOL(sysData.close())
+}
+
+//export appDelegate_windowDidResize
+func appDelegate_windowDidResize(win C.id) {
+ s := getSysData(win)
+ wincv := C.windowGetContentView(win) // we want the content view's size, not the window's
+ r := C.frame(wincv)
+ // (0,0) is the bottom left corner but this is handled in sysData.translateAllocationCoords()
+ s.resizeWindow(int(r.width), int(r.height))
+ C.display(win) // redraw everything
+}
+
+//export appDelegate_buttonClicked
+func appDelegate_buttonClicked(button C.id) {
+ sysData := getSysData(button)
+ sysData.event()
+}