Skip to content

Commit

Permalink
Fix the position of elements after SetColumnWidth called
Browse files Browse the repository at this point in the history
Also fix the minsize for the scroller which was ignoring the value
Fixes fyne-io#1951
  • Loading branch information
andydotxyz committed Feb 15, 2021
1 parent 1ac1d1d commit d41a13f
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 6 deletions.
23 changes: 18 additions & 5 deletions widget/table.go
Expand Up @@ -508,7 +508,20 @@ func (r *tableCellsRenderer) MinSize() fyne.Size {
} else {
fyne.LogError("Missing Length callback required for Table", nil)
}
return fyne.NewSize(r.cells.cellSize.Width*float32(cols)+float32(cols-1), r.cells.cellSize.Height*float32(rows)+float32(rows-1))

width := float32(0)
cellWidth := r.cells.cellSize.Width
for col := 0; col < cols; col++ {
colWidth, ok := r.cells.t.columnWidths[col]
if ok {
width += colWidth
} else {
width += cellWidth
}
}

separatorSize := theme.SeparatorThicknessSize()
return fyne.NewSize(width+float32(cols-1)*separatorSize, r.cells.cellSize.Height*float32(rows)+float32(rows-1)*separatorSize)
}

func (r *tableCellsRenderer) Refresh() {
Expand Down Expand Up @@ -556,12 +569,12 @@ func (r *tableCellsRenderer) Refresh() {
if c == nil {
continue
}

c.Move(fyne.NewPos(theme.Padding()+cellOffset,
theme.Padding()+float32(row)*(r.cells.cellSize.Height+separatorThickness)))
c.Resize(fyne.NewSize(colWidth-theme.Padding()*2, r.cells.cellSize.Height-theme.Padding()*2))
}

c.Move(fyne.NewPos(theme.Padding()+cellOffset,
theme.Padding()+float32(row)*(r.cells.cellSize.Height+separatorThickness)))
c.Resize(fyne.NewSize(colWidth-theme.Padding()*2, r.cells.cellSize.Height-theme.Padding()*2))

if updateCell != nil {
updateCell(TableCellID{row, col}, c)
}
Expand Down
8 changes: 7 additions & 1 deletion widget/table_test.go
Expand Up @@ -267,15 +267,21 @@ func TestTable_SetColumnWidth(t *testing.T) {
obj.(*Label).Text = "placeholder"
}
})
table.SetColumnWidth(0, 16)
table.SetColumnWidth(0, 32)
table.Resize(fyne.NewSize(120, 120))
table.Select(TableCellID{1, 0})

renderer := test.WidgetRenderer(table).(*tableRenderer)
cellRenderer := test.WidgetRenderer(renderer.scroll.Content.(*tableCells))
cellRenderer.Refresh()
assert.Equal(t, 8, len(cellRenderer.Objects()))
assert.Equal(t, float32(32), cellRenderer.(*tableCellsRenderer).Objects()[0].Size().Width)
cell1Offset := theme.SeparatorThicknessSize()+theme.Padding()*3
assert.Equal(t, float32(32)+cell1Offset, cellRenderer.(*tableCellsRenderer).Objects()[1].Position().X)

table.SetColumnWidth(0, 16)
assert.Equal(t, float32(16), cellRenderer.(*tableCellsRenderer).Objects()[0].Size().Width)
assert.Equal(t, float32(16)+cell1Offset, cellRenderer.(*tableCellsRenderer).Objects()[1].Position().X)

w := test.NewWindow(table)
defer w.Close()
Expand Down
Binary file removed widget/testdata/table/col_size.png
Binary file not shown.

0 comments on commit d41a13f

Please sign in to comment.