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 #1951
  • Loading branch information
andydotxyz committed Feb 21, 2021
1 parent ca981cb commit b755866
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 b755866

Please sign in to comment.