diff options
| author | Pietro Gagliardi <[email protected]> | 2014-10-18 16:01:40 -0400 |
|---|---|---|
| committer | Pietro Gagliardi <[email protected]> | 2014-10-18 16:01:40 -0400 |
| commit | a5c002fcd231129db4b99083af0e731482871df9 (patch) | |
| tree | 267bf1152912a1f78b6f43501462aeefaf7b1cd0 /newctrl/tab_darwin.go | |
| parent | 0351cf27fefd59148eee3f5f98ecfbaef2b607ac (diff) | |
More Mac OS X work. Woah, almost done!
Diffstat (limited to 'newctrl/tab_darwin.go')
| -rw-r--r-- | newctrl/tab_darwin.go | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/newctrl/tab_darwin.go b/newctrl/tab_darwin.go new file mode 100644 index 0000000..8bc1276 --- /dev/null +++ b/newctrl/tab_darwin.go @@ -0,0 +1,53 @@ +// 25 july 2014 + +package ui + +import ( + "unsafe" +) + +// #include "objc_darwin.h" +import "C" + +type tab struct { + *controlSingleObject + tabs []*container + children []Control + chainresize func(x int, y int, width int, height int +} + +func newTab() Tab { + t := &tab{ + controlSingleObject: newControlSingleObject(C.newTab()), + } + t.fpreferredsize = t.xpreferredsize + t.chainresize = t.fresize + t.fresize = t.xresize + return t +} + +func (t *tab) Append(name string, control Control) { + c := newContainer() + t.tabs = append(t.tabs, c) + control.setParent(c.parent()) + t.children = append(t.children, control) + cname := C.CString(name) + defer C.free(unsafe.Pointer(cname)) + C.tabAppend(t.id, cname, c.id) +} + +func (t *tab) xpreferredSize(d *sizing) (width, height int) { + s := C.tabPreferredSize(t.id) + return int(s.width), int(s.height) +} + +func (t *tab) xresize(x int, y int, width int, height int, d *sizing) { + // first, chain up to change the GtkFrame and its child container + t.chainresize(x, y, width, height, d) + + // now that the containers have the correct size, we can resize the children + for i, _ := range t.tabs { + a := t.tabs[i].allocation(false/*TODO*/) + t.children[i].resize(int(a.x), int(a.y), int(a.width), int(a.height), d) + } +} |
