69 lines
1.4 KiB
Go
69 lines
1.4 KiB
Go
|
// 4 august 2014
|
||
|
|
||
|
package ui
|
||
|
|
||
|
import (
|
||
|
"unsafe"
|
||
|
)
|
||
|
|
||
|
// #include "objc_darwin.h"
|
||
|
import "C"
|
||
|
|
||
|
type container struct {
|
||
|
containerbase
|
||
|
id C.id
|
||
|
}
|
||
|
|
||
|
type sizing struct {
|
||
|
sizingbase
|
||
|
|
||
|
// for size calculations
|
||
|
// nothing for mac
|
||
|
|
||
|
// for the actual resizing
|
||
|
neighborAlign C.struct_xalignment
|
||
|
}
|
||
|
|
||
|
func newContainer(child Control) *container {
|
||
|
c := new(container)
|
||
|
c.id = C.newContainerView(unsafe.Pointer(c))
|
||
|
c.child = child
|
||
|
c.child.setParent(&controlParent{c.id})
|
||
|
return c
|
||
|
}
|
||
|
|
||
|
//export containerResized
|
||
|
func containerResized(data unsafe.Pointer, width C.intptr_t, height C.intptr_t) {
|
||
|
c := (*container)(unsafe.Pointer(data))
|
||
|
// the origin of a view's content area is always (0, 0)
|
||
|
c.resize(0, 0, int(width), int(height))
|
||
|
}
|
||
|
|
||
|
// These are based on measurements from Interface Builder.
|
||
|
const (
|
||
|
macXMargin = 20
|
||
|
macYMargin = 20
|
||
|
macXPadding = 8
|
||
|
macYPadding = 8
|
||
|
)
|
||
|
|
||
|
func (c *container) beginResize() (d *sizing) {
|
||
|
d = new(sizing)
|
||
|
if spaced {
|
||
|
d.xmargin = macXMargin
|
||
|
d.ymargintop = macYMargin
|
||
|
d.ymarginbottom = d.ymargintop
|
||
|
d.xpadding = macXPadding
|
||
|
d.ypadding = macYPadding
|
||
|
}
|
||
|
return d
|
||
|
}
|
||
|
|
||
|
func (c *container) translateAllocationCoords(allocations []*allocation, winwidth, winheight int) {
|
||
|
for _, a := range allocations {
|
||
|
// winheight - y because (0,0) is the bottom-left corner of the window and not the top-left corner
|
||
|
// (winheight - y) - height because (x, y) is the bottom-left corner of the control and not the top-left
|
||
|
a.y = (winheight - a.y) - a.height
|
||
|
}
|
||
|
}
|