summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPietro Gagliardi <[email protected]>2014-05-12 15:15:26 -0400
committerPietro Gagliardi <[email protected]>2014-05-12 15:15:26 -0400
commitf14614c0c7c98f160e27964dd8926cdc778712d0 (patch)
tree3bf10e2de54c355ab318577aeafb205054d0cfcd
parent05c71e0d252cb9dda500706cbdb939f81b714f1b (diff)
Began the migration to native Objective-C by moving the NSWindow functions and some of the shared helper routines.
-rw-r--r--sysdata_darwin.go34
-rw-r--r--sysdata_darwin.h11
-rw-r--r--sysdata_darwin.m56
3 files changed, 75 insertions, 26 deletions
diff --git a/sysdata_darwin.go b/sysdata_darwin.go
index 1ac4d8d..e8f8f54 100644
--- a/sysdata_darwin.go
+++ b/sysdata_darwin.go
@@ -10,6 +10,7 @@ import (
// #cgo LDFLAGS: -lobjc -framework Foundation -framework AppKit
// #include "objc_darwin.h"
+// #include "sysdata_darwin.h"
import "C"
type sysData struct {
@@ -99,16 +100,15 @@ func initWithDummyFrame(self C.id) C.id {
}
func addControl(parentWindow C.id, control C.id) {
- windowView := C.objc_msgSend_noargs(parentWindow, _contentView)
- C.objc_msgSend_id(windowView, _addSubview, control)
+ C.addControl(parentWindow, control)
}
func controlShow(what C.id) {
- C.objc_msgSend_bool(what, _setHidden, C.BOOL(C.NO))
+ C.controlShow(what)
}
func controlHide(what C.id) {
- C.objc_msgSend_bool(what, _setHidden, C.BOOL(C.YES))
+ C.controlHide(what)
}
const (
@@ -122,40 +122,22 @@ const (
// Button, Checkbox, Combobox, LineEdit, Label, Listbox
func applyStandardControlFont(id C.id) {
- C.objc_setFont(id, _NSRegularControlSize)
+ C.applyStandardControlFont(id)
}
var classTypes = [nctypes]*classData{
c_window: &classData{
make: func(parentWindow C.id, alternate bool, s *sysData) C.id {
- const (
- _NSBorderlessWindowMask = 0
- _NSTitledWindowMask = 1 << 0
- _NSClosableWindowMask = 1 << 1
- _NSMiniaturizableWindowMask = 1 << 2
- _NSResizableWindowMask = 1 << 3
- _NSTexturedBackgroundWindowMask = 1 << 8
-
- _NSBackingStoreBuffered = 2 // the only backing store method that Apple says we should use (the others are legacy)
- )
-
- // we have to specify a content rect to start; it will be overridden soon though
- win := C.objc_msgSend_noargs(_NSWindow, _alloc)
- win = C.objc_msgSend_rect_uint_uint_bool(win,
- _initWithContentRect,
- C.int64_t(0), C.int64_t(0), C.int64_t(100), C.int64_t(100),
- C.uintptr_t(_NSTitledWindowMask | _NSClosableWindowMask | _NSMiniaturizableWindowMask | _NSResizableWindowMask),
- C.uintptr_t(_NSBackingStoreBuffered),
- C.BOOL(C.YES)) // defer creation of device until we show the window
+ win := C.makeWindow()
C.objc_msgSend_id(win, _setDelegate, appDelegate)
// we do not need setAcceptsMouseMovedEvents: here since we are using a tracking rect in Areas for that
return win
},
show: func(what C.id) {
- C.objc_msgSend_id(what, _makeKeyAndOrderFront, what)
+ C.windowShow(what)
},
hide: func(what C.id) {
- C.objc_msgSend_id(what, _orderOut, what)
+ C.windowHide(what)
},
settextsel: _setTitle,
textsel: _title,
diff --git a/sysdata_darwin.h b/sysdata_darwin.h
new file mode 100644
index 0000000..c436c09
--- /dev/null
+++ b/sysdata_darwin.h
@@ -0,0 +1,11 @@
+/* 12 may 2014 */
+
+//#include "common_darwin.h"
+
+extern void addControl(id, id);
+extern void controlShow(id);
+extern void controlHide(id);
+extern void applyStandardControlFont(id);
+extern id makeWindow(void);
+extern void windowShow(id);
+extern void windowHide(id);
diff --git a/sysdata_darwin.m b/sysdata_darwin.m
new file mode 100644
index 0000000..1eee324
--- /dev/null
+++ b/sysdata_darwin.m
@@ -0,0 +1,56 @@
+// 12 may 2014
+
+//#include "sysdata_darwin.h"
+#include "objc_darwin.h"
+#include <Foundation/NSGeometry.h>
+#include <AppKit/NSWindow.h>
+#include <AppKit/NSView.h>
+#include <AppKit/NSCell.h>
+
+static NSRect dummyRect;// = NSMakeRect(0, 0, 100, 100);
+
+#define to(T, x) ((T *) x)
+#define toNSWindow(x) to(NSWindow, x)
+#define toNSView(x) to(NSView, x)
+
+void addControl(id parentWindow, id control)
+{
+ [[toNSWindow(parentWindow) contentView] addSubview:control];
+}
+
+void controlShow(id what)
+{
+ [toNSView(what) setHidden:NO];
+}
+
+void controlHide(id what)
+{
+ [toNSView(what) setHidden:YES];
+}
+
+void applyStandardControlFont(id what)
+{
+ // TODO inline this
+ objc_setFont(what, NSRegularControlSize);
+}
+
+id makeWindow(void)
+{
+ // TODO separate to initilaizer
+ dummyRect = NSMakeRect(0, 0, 100, 100);
+ return [[NSWindow alloc]
+ initWithContentRect:dummyRect
+ styleMask:(NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask | NSResizableWindowMask)
+ backing:NSBackingStoreBuffered
+ defer:YES]; // defer creation of device until we show the window
+}
+
+void windowShow(id window)
+{
+ [toNSWindow(window) makeKeyAndOrderFront:window];
+}
+
+void windowHide(id window)
+{
+ [toNSWindow(window) orderOut:window];
+}