summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--redo/container_darwin.go31
-rw-r--r--redo/container_darwin.m33
-rw-r--r--redo/objc_darwin.h5
-rw-r--r--redo/tab_darwin.go18
-rw-r--r--redo/tab_darwin.m5
5 files changed, 79 insertions, 13 deletions
diff --git a/redo/container_darwin.go b/redo/container_darwin.go
new file mode 100644
index 0000000..fd28b4c
--- /dev/null
+++ b/redo/container_darwin.go
@@ -0,0 +1,31 @@
+// 4 august 2014
+
+package ui
+
+import (
+ "unsafe"
+)
+
+// #include "objc_darwin.h"
+import "C"
+
+type container struct {
+ view C.id
+ *sizer
+}
+
+func newContainer(child Control) *container {
+ c := &container{
+ sizer: new(sizer),
+ }
+ c.view = C.newContainerView(unsafe.Pointer(c))
+ c.child = child
+ c.child.setParent(&controlParent{c.view})
+ return c
+}
+
+//export containerResized
+func containerResized(data unsafe.Pointer, width C.intptr_t, height C.intptr_t) {
+ c := (*container)(unsafe.Pointer(data))
+ c.resize(0, 0, int(width), int(height))
+}
diff --git a/redo/container_darwin.m b/redo/container_darwin.m
new file mode 100644
index 0000000..17ada72
--- /dev/null
+++ b/redo/container_darwin.m
@@ -0,0 +1,33 @@
+// 4 august 2014
+
+#include "objc_darwin.h"
+#include "_cgo_export.h"
+#include <Cocoa/Cocoa.h>
+
+// calling -[className] on the content views of NSWindow, NSTabItem, and NSBox all return NSView, so I'm assuming I just need to override these
+// fortunately, in the case of NSTabView, this -[setFrame:] is called when resizing and when changing tabs, so we can indeed use this directly there
+@interface goContainerView : NSView {
+@public
+ void *gocontainer;
+}
+@end
+
+@implementation goContainerView
+
+- (void)setFrame:(NSRect)r
+{
+ [super setFrame:r];
+ if (self->gocontainer != NULL)
+ containerResized(self->gocontainer, (intptr_t) r.size.width, (intptr_t) r.size.height);
+}
+
+@end
+
+id newContainerView(void *gocontainer)
+{
+ goContainerView *c;
+
+ c = [[goContainerView alloc] initWithFrame:NSMakeRect(0, 0, 100, 100)];
+ c->gocontainer = gocontainer;
+ return (id) c;
+}
diff --git a/redo/objc_darwin.h b/redo/objc_darwin.h
index 84d1a84..b739f39 100644
--- a/redo/objc_darwin.h
+++ b/redo/objc_darwin.h
@@ -55,7 +55,7 @@ extern void moveControl(id, intptr_t, intptr_t, intptr_t, intptr_t);
/* tab_darwin.m */
extern id newTab(void *);
-extern id tabAppend(id, char *);
+extern void tabAppend(id, char *, id);
/* table_darwin.m */
extern id newTable(void);
@@ -87,4 +87,7 @@ extern struct xsize areaPrefSize(id);
extern struct xalignment alignmentInfo(id, struct xrect);
extern struct xrect frame(id);
+/* container_darwin.m */
+extern id newContainerView(void *);
+
#endif
diff --git a/redo/tab_darwin.go b/redo/tab_darwin.go
index 503c138..3a9b338 100644
--- a/redo/tab_darwin.go
+++ b/redo/tab_darwin.go
@@ -11,7 +11,7 @@ import "C"
type tab struct {
_id C.id
- tabs []*sizer
+ tabs []*container
}
func newTab() Tab {
@@ -21,22 +21,20 @@ func newTab() Tab {
}
func (t *tab) Append(name string, control Control) {
- s := new(sizer)
- t.tabs = append(t.tabs, s)
+ c := newContainer(control)
+ t.tabs = append(t.tabs, c)
cname := C.CString(name)
defer C.free(unsafe.Pointer(cname))
- tabview := C.tabAppend(t._id, cname)
- s.child = control
- s.child.setParent(&controlParent{tabview})
+ C.tabAppend(t._id, cname, c.view)
}
//export tabResized
func tabResized(data unsafe.Pointer, width C.intptr_t, height C.intptr_t) {
- t := (*tab)(unsafe.Pointer(data))
- for _, s := range t.tabs {
+// t := (*tab)(unsafe.Pointer(data))
+// for _, c := range t.tabs {
// the tab area's coordinate system is localized, so the origin is (0, 0)
- s.resize(0, 0, int(width), int(height))
- }
+// c.resize(0, 0, int(width), int(height))
+// }
}
func (t *tab) id() C.id {
diff --git a/redo/tab_darwin.m b/redo/tab_darwin.m
index c99e275..7697e26 100644
--- a/redo/tab_darwin.m
+++ b/redo/tab_darwin.m
@@ -5,6 +5,7 @@
#import <Cocoa/Cocoa.h>
#define toNSTabView(x) ((NSTabView *) (x))
+#define toNSView(x) ((NSView *) (x))
@interface goTabView : NSTabView {
@public
@@ -35,12 +36,12 @@ id newTab(void *gotab)
return (id) t;
}
-id tabAppend(id t, char *name)
+void tabAppend(id t, char *name, id view)
{
NSTabViewItem *i;
i = [[NSTabViewItem alloc] initWithIdentifier:nil];
[i setLabel:[NSString stringWithUTF8String:name]];
+ [i setView:toNSView(view)];
[toNSTabView(t) addTabViewItem:i];
- return (id) [i view];
}