summaryrefslogtreecommitdiff
path: root/window_darwin.go
diff options
context:
space:
mode:
authorPietro Gagliardi <[email protected]>2014-08-30 23:02:02 -0400
committerPietro Gagliardi <[email protected]>2014-08-30 23:02:02 -0400
commit77bf566ebbcb62acd4d08d905d9542d6ff9b6b80 (patch)
treeeeb8e72bc3bf57f5be7f0c0af4319189ac6de838 /window_darwin.go
parent155899c65ed32245e2ccad4197a10c77017d835b (diff)
...in with the new.
Diffstat (limited to 'window_darwin.go')
-rw-r--r--window_darwin.go69
1 files changed, 69 insertions, 0 deletions
diff --git a/window_darwin.go b/window_darwin.go
new file mode 100644
index 0000000..ddd598e
--- /dev/null
+++ b/window_darwin.go
@@ -0,0 +1,69 @@
+// 8 july 2014
+
+package ui
+
+import (
+ "unsafe"
+)
+
+// #include "objc_darwin.h"
+import "C"
+
+type window struct {
+ id C.id
+
+ closing *event
+
+ *container
+}
+
+func newWindow(title string, width int, height int, control Control) *window {
+ id := C.newWindow(C.intptr_t(width), C.intptr_t(height))
+ ctitle := C.CString(title)
+ defer C.free(unsafe.Pointer(ctitle))
+ C.windowSetTitle(id, ctitle)
+ w := &window{
+ id: id,
+ closing: newEvent(),
+ container: newContainer(control),
+ }
+ C.windowSetDelegate(w.id, unsafe.Pointer(w))
+ C.windowSetContentView(w.id, w.container.id)
+ return w
+}
+
+func (w *window) Title() string {
+ return C.GoString(C.windowTitle(w.id))
+}
+
+func (w *window) SetTitle(title string) {
+ ctitle := C.CString(title)
+ defer C.free(unsafe.Pointer(ctitle))
+ C.windowSetTitle(w.id, ctitle)
+}
+
+func (w *window) Show() {
+ C.windowShow(w.id)
+}
+
+func (w *window) Hide() {
+ C.windowHide(w.id)
+}
+
+func (w *window) Close() {
+ C.windowClose(w.id)
+}
+
+func (w *window) OnClosing(e func() bool) {
+ w.closing.setbool(e)
+}
+
+//export windowClosing
+func windowClosing(xw unsafe.Pointer) C.BOOL {
+ w := (*window)(unsafe.Pointer(xw))
+ close := w.closing.fire()
+ if close {
+ return C.YES
+ }
+ return C.NO
+}