summaryrefslogtreecommitdiff
path: root/newctrl/container_darwin.m
diff options
context:
space:
mode:
authorPietro Gagliardi <[email protected]>2014-10-18 14:17:35 -0400
committerPietro Gagliardi <[email protected]>2014-10-18 14:17:35 -0400
commitfd9e614faaae390a42f7dc39e63d0197ea9d7efa (patch)
tree67daa05343c858cd697584b87061b63e7805e302 /newctrl/container_darwin.m
parentb1ac28cc938d2de25357328d9da910a84a2cc8cc (diff)
Started the Mac OS X conversion.
Diffstat (limited to 'newctrl/container_darwin.m')
-rw-r--r--newctrl/container_darwin.m51
1 files changed, 51 insertions, 0 deletions
diff --git a/newctrl/container_darwin.m b/newctrl/container_darwin.m
new file mode 100644
index 0000000..c5a50e1
--- /dev/null
+++ b/newctrl/container_darwin.m
@@ -0,0 +1,51 @@
+// 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
+
+@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)];
+}
+
+struct xrect containerBounds(id view)
+{
+ NSRect b;
+ struct xrect r;
+
+ b = [toNSView(view) bounds];
+ r.x = (intptr_t) b.origin.x;
+ r.y = (intptr_t) b.origin.y;
+ r.width = (intptr_t) b.size.width;
+ r.height = (intptr_t) b.size.height;
+ return r;
+}