Reverted Stack and Grid back to pre-yoff form. This is part of the change in the sizing system.
This commit is contained in:
parent
057f0eaf53
commit
08922103a7
19
grid.go
19
grid.go
|
@ -21,7 +21,7 @@ type Grid struct {
|
|||
controls [][]Control
|
||||
filling [][]bool
|
||||
stretchyrow, stretchycol int
|
||||
widths, heights, yoff [][]int // caches to avoid reallocating each time
|
||||
widths, heights [][]int // caches to avoid reallocating each time
|
||||
rowheights, colwidths []int
|
||||
}
|
||||
|
||||
|
@ -42,14 +42,12 @@ func NewGrid(nPerRow int, controls ...Control) *Grid {
|
|||
cf := make([][]bool, nRows)
|
||||
cw := make([][]int, nRows)
|
||||
ch := make([][]int, nRows)
|
||||
cyoff := make([][]int, nRows)
|
||||
i := 0
|
||||
for row := 0; row < nRows; row++ {
|
||||
cc[row] = make([]Control, nPerRow)
|
||||
cf[row] = make([]bool, nPerRow)
|
||||
cw[row] = make([]int, nPerRow)
|
||||
ch[row] = make([]int, nPerRow)
|
||||
cyoff[row] = make([]int, nPerRow)
|
||||
for x := 0; x < nPerRow; x++ {
|
||||
cc[row][x] = controls[i]
|
||||
i++
|
||||
|
@ -62,7 +60,6 @@ func NewGrid(nPerRow int, controls ...Control) *Grid {
|
|||
stretchycol: -1,
|
||||
widths: cw,
|
||||
heights: ch,
|
||||
yoff: cyoff,
|
||||
rowheights: make([]int, nRows),
|
||||
colwidths: make([]int, nPerRow),
|
||||
}
|
||||
|
@ -145,12 +142,11 @@ func (g *Grid) setRect(x int, y int, width int, height int, rr *[]resizerequest)
|
|||
// 2) get preferred sizes; compute row/column sizes
|
||||
for row, xcol := range g.controls {
|
||||
for col, c := range xcol {
|
||||
w, h, yoff := c.preferredSize()
|
||||
w, h := c.preferredSize()
|
||||
g.widths[row][col] = w
|
||||
g.heights[row][col] = h
|
||||
g.rowheights[row] = max(g.rowheights[row], h)
|
||||
g.colwidths[col] = max(g.colwidths[col], w)
|
||||
g.yoff[row][col] = yoff
|
||||
}
|
||||
}
|
||||
// 3) handle the stretchy control
|
||||
|
@ -178,7 +174,7 @@ func (g *Grid) setRect(x int, y int, width int, height int, rr *[]resizerequest)
|
|||
w = g.colwidths[col]
|
||||
h = g.rowheights[row]
|
||||
}
|
||||
c.setRect(x, y + g.yoff[row][col], w, h - g.yoff[row][col], rr)
|
||||
c.setRect(x, y, w, h, rr)
|
||||
x += g.colwidths[col]
|
||||
}
|
||||
x = startx
|
||||
|
@ -188,7 +184,7 @@ func (g *Grid) setRect(x int, y int, width int, height int, rr *[]resizerequest)
|
|||
}
|
||||
|
||||
// filling and stretchy are ignored for preferred size calculation
|
||||
func (g *Grid) preferredSize() (width int, height int, yoff int) {
|
||||
func (g *Grid) preferredSize() (width int, height int) {
|
||||
max := func(a int, b int) int {
|
||||
if a > b {
|
||||
return a
|
||||
|
@ -206,8 +202,7 @@ func (g *Grid) preferredSize() (width int, height int, yoff int) {
|
|||
// 2) get preferred sizes; compute row/column sizes
|
||||
for row, xcol := range g.controls {
|
||||
for col, c := range xcol {
|
||||
// ignore yoff for preferred size calculations
|
||||
w, h, _ := c.preferredSize()
|
||||
w, h := c.preferredSize()
|
||||
g.widths[row][col] = w
|
||||
g.heights[row][col] = h
|
||||
g.rowheights[row] = max(g.rowheights[row], h)
|
||||
|
@ -221,7 +216,5 @@ func (g *Grid) preferredSize() (width int, height int, yoff int) {
|
|||
for _, h := range g.rowheights {
|
||||
height += h
|
||||
}
|
||||
|
||||
// yoff is always zero for grids
|
||||
return width, height, 0
|
||||
return width, height
|
||||
}
|
||||
|
|
18
stack.go
18
stack.go
|
@ -25,7 +25,7 @@ type Stack struct {
|
|||
orientation orientation
|
||||
controls []Control
|
||||
stretchy []bool
|
||||
width, height, yoff []int // caches to avoid reallocating these each time
|
||||
width, height []int // caches to avoid reallocating these each time
|
||||
}
|
||||
|
||||
func newStack(o orientation, controls ...Control) *Stack {
|
||||
|
@ -35,7 +35,6 @@ func newStack(o orientation, controls ...Control) *Stack {
|
|||
stretchy: make([]bool, len(controls)),
|
||||
width: make([]int, len(controls)),
|
||||
height: make([]int, len(controls)),
|
||||
yoff: make([]int, len(controls)),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -93,8 +92,7 @@ func (s *Stack) setRect(x int, y int, width int, height int, rr *[]resizerequest
|
|||
nStretchy++
|
||||
continue
|
||||
}
|
||||
w, h, yoff := c.preferredSize()
|
||||
s.yoff[i] = yoff
|
||||
w, h := c.preferredSize()
|
||||
if s.orientation == horizontal { // all controls have same height
|
||||
s.width[i] = w
|
||||
s.height[i] = height
|
||||
|
@ -122,7 +120,7 @@ func (s *Stack) setRect(x int, y int, width int, height int, rr *[]resizerequest
|
|||
}
|
||||
// 3) now actually place controls
|
||||
for i, c := range s.controls {
|
||||
c.setRect(x, y + s.yoff[i], s.width[i], s.height[i] - s.yoff[i], rr)
|
||||
c.setRect(x, y, s.width[i], s.height[i], rr)
|
||||
if s.orientation == horizontal {
|
||||
x += s.width[i]
|
||||
} else {
|
||||
|
@ -133,7 +131,7 @@ func (s *Stack) setRect(x int, y int, width int, height int, rr *[]resizerequest
|
|||
}
|
||||
|
||||
// The preferred size of a Stack is the sum of the preferred sizes of non-stretchy controls + (the number of stretchy controls * the largest preferred size among all stretchy controls).
|
||||
func (s *Stack) preferredSize() (width int, height int, yoff int) {
|
||||
func (s *Stack) preferredSize() (width int, height int) {
|
||||
max := func(a int, b int) int {
|
||||
if a > b {
|
||||
return a
|
||||
|
@ -145,11 +143,10 @@ func (s *Stack) preferredSize() (width int, height int, yoff int) {
|
|||
var maxswid, maxsht int
|
||||
|
||||
if len(s.controls) == 0 { // no controls, so return emptiness
|
||||
return 0, 0, 0
|
||||
return 0, 0
|
||||
}
|
||||
for i, c := range s.controls {
|
||||
// ignore yoff for preferred size calculations
|
||||
w, h, _ := c.preferredSize()
|
||||
w, h := c.preferredSize()
|
||||
if s.stretchy[i] {
|
||||
nStretchy++
|
||||
maxswid = max(maxswid, w)
|
||||
|
@ -172,9 +169,6 @@ func (s *Stack) preferredSize() (width int, height int, yoff int) {
|
|||
} else {
|
||||
height += nStretchy * maxsht
|
||||
}
|
||||
|
||||
// yoff is always zero for stacks
|
||||
yoff = 0
|
||||
return
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue