From 8a81650b3da7ce00725336df9e03b38e935c5a65 Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Wed, 2 Jul 2014 22:53:03 -0400 Subject: Moved it all back; the preemptive multitaksing during an event handler kills us on all platforms. Going to have to restrict ALL GUI accss to happening from one t hread, so going to need to drop uitask entirely and have just a start() callback for startup code and a post() function for posting requests to windows (like channel sends but into a perpetual buffer). --- delegate_darwin.go | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 delegate_darwin.go (limited to 'delegate_darwin.go') 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 +// #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() +} -- cgit v1.2.3