// 4 august 2014

package ui

import (
	"unsafe"
)

// #include "objc_darwin.h"
import "C"

type container struct {
	*controlSingleObject
}

type sizing struct {
	sizingbase

	// for size calculations
	// nothing on Mac OS X

	// for the actual resizing
	neighborAlign C.struct_xalignment
}

func newContainer() *container {
	c := new(container)
	c.controlSingleObject = newControlSingleObject(C.newContainerView(unsafe.Pointer(c)))
	return c
}

func (c *container) parent() *controlParent {
	return &controlParent{c.id}
}

func (c *container) allocation(margined bool) C.struct_xrect {
	b := C.containerBounds(c.id)
	if margined {
		b.x += C.intptr_t(macXMargin)
		b.y += C.intptr_t(macYMargin)
		b.width -= C.intptr_t(macXMargin) * 2
		b.height -= C.intptr_t(macYMargin) * 2
	}
	return b
}

// we can just return these values as is
func (c *container) bounds(d *sizing) (int, int, int, int) {
	b := C.containerBounds(c.id)
	return int(b.x), int(b.y), int(b.width), int(b.height)
}

// These are based on measurements from Interface Builder.
const (
	macXMargin  = 20
	macYMargin  = 20
	macXPadding = 8
	macYPadding = 8
)

func (w *window) beginResize() (d *sizing) {
	d = new(sizing)
	d.xpadding = macXPadding
	d.ypadding = macYPadding
	return d
}

/*TODO
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
	}
}
*/