diff options
| author | Pietro Gagliardi <[email protected]> | 2014-10-18 14:17:35 -0400 |
|---|---|---|
| committer | Pietro Gagliardi <[email protected]> | 2014-10-18 14:17:35 -0400 |
| commit | fd9e614faaae390a42f7dc39e63d0197ea9d7efa (patch) | |
| tree | 67daa05343c858cd697584b87061b63e7805e302 /newctrl/container_darwin.m | |
| parent | b1ac28cc938d2de25357328d9da910a84a2cc8cc (diff) | |
Started the Mac OS X conversion.
Diffstat (limited to 'newctrl/container_darwin.m')
| -rw-r--r-- | newctrl/container_darwin.m | 51 |
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; +} |
