summaryrefslogtreecommitdiff
path: root/container_darwin.m
diff options
context:
space:
mode:
Diffstat (limited to 'container_darwin.m')
-rw-r--r--container_darwin.m44
1 files changed, 44 insertions, 0 deletions
diff --git a/container_darwin.m b/container_darwin.m
new file mode 100644
index 0000000..0a598c6
--- /dev/null
+++ b/container_darwin.m
@@ -0,0 +1,44 @@
+// 4 august 2014
+
+#include "objc_darwin.h"
+#include "_cgo_export.h"
+#include <Cocoa/Cocoa.h>
+
+#define toNSView(x) ((NSView *) (x))
+
+// calling -[className] on the content views of NSWindow, NSTabItem, and NSBox all return NSView, so I'm assuming I just need to override these
+// fornunately:
+// - NSWindow resizing calls -[setFrameSize:] (but not -[setFrame:])
+// - NSTab resizing calls both -[setFrame:] and -[setFrameSIze:] on the current tab
+// - NSTab switching tabs calls both -[setFrame:] and -[setFrameSize:] on the new tab
+// so we just override setFrameSize:
+// thanks to mikeash and JtRip in irc.freenode.net/#macdev
+@interface goContainerView : NSView {
+@public
+ void *gocontainer;
+}
+@end
+
+@implementation goContainerView
+
+- (void)setFrameSize:(NSSize)s
+{
+ [super setFrameSize:s];
+ containerResized(self->gocontainer, (intptr_t) s.width, (intptr_t) s.height);
+}
+
+@end
+
+id newContainerView(void *gocontainer)
+{
+ goContainerView *c;
+
+ c = [[goContainerView alloc] initWithFrame:NSZeroRect];
+ c->gocontainer = gocontainer;
+ return (id) c;
+}
+
+void moveControl(id c, intptr_t x, intptr_t y, intptr_t width, intptr_t height)
+{
+ [toNSView(c) setFrame:NSMakeRect((CGFloat) x, (CGFloat) y, (CGFloat) width, (CGFloat) height)];
+}