diff options
| author | Pietro Gagliardi <[email protected]> | 2014-06-25 22:07:37 -0400 |
|---|---|---|
| committer | Pietro Gagliardi <[email protected]> | 2014-06-25 22:07:37 -0400 |
| commit | e4992dbcb2292a07c7d901dbe21f2d40f6af7a95 (patch) | |
| tree | 76a2a4d3b0f08f2b91696f0c5eb176335f6c56d0 /controlsize.go | |
| parent | cf1da0218c4184d5200eae56defe33a9893df4a1 (diff) | |
Began the work for moving everything to the new control sizing system.
Diffstat (limited to 'controlsize.go')
| -rw-r--r-- | controlsize.go | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/controlsize.go b/controlsize.go new file mode 100644 index 0000000..d4d9d31 --- /dev/null +++ b/controlsize.go @@ -0,0 +1,54 @@ +// 25 june 2014 + +package ui + +type allocation struct { + x int + y int + width int + height int + this Control + neighbor Control +} + +// for verification; see sysdata.go +type sysDataSizeFuncs interface { + beginResize() *sysSizeData + endResize(*sysSizeData) + translateAllocationCoords([]*allocation, int, int) + preferredSize(*sysSizeData) (int, int) + commitResize(*allocation, *sysSizeData) + getAuxResizeInfo(*sysSizeData) +} + +func (s *sysData) resizeWindow(width, height int) { + d := s.beginResize() + allocations := s.allocate(0, 0, width, height, d) + s.translateAllocationCoords(allocations, width, height) + for _, c := range s.allocations { + c.this.commitResize(c, d) + } + s.endResize(d) +} + +// non-layout controls: allocate() should just return a one-element slice; preferredSize(), commitResize(), and getAuxResizeInfo() should defer to their sysData equivalents +type controlSizing interface { + allocate(x int, y int, width int, height int, d *sysSizeData) []*allocation + preferredSize(d *sysSizeData) (width, height int) + commitResize(c *allocation, d *sysSizeData) + getAuxResizeInfo(d *sysSizeData) +} + +// vertical stack: no concept of neighbor, but not too hard to add a vertical neighbor +// horizontal stack: + var current *allocation + // ... + as := s.controls[i].allocate(...) + if current != nil { + current.neighbor = as[0].self + } + current = as[0] + // append all of as +// grid: + // same as above, except current is set to nil on each new row + // adding a vertical neighbor would require storing an extra list |
