diff --git a/widget/table.go b/widget/table.go index f49c6aaee4..24b6922b30 100644 --- a/widget/table.go +++ b/widget/table.go @@ -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() { @@ -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) } diff --git a/widget/table_test.go b/widget/table_test.go index d0b3113e91..5e38fcbb9b 100644 --- a/widget/table_test.go +++ b/widget/table_test.go @@ -267,7 +267,7 @@ 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}) @@ -275,7 +275,13 @@ func TestTable_SetColumnWidth(t *testing.T) { 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() diff --git a/widget/testdata/table/col_size.png b/widget/testdata/table/col_size.png index ec9c2fb5db..42de4ddc35 100644 Binary files a/widget/testdata/table/col_size.png and b/widget/testdata/table/col_size.png differ