Skip to content

Commit

Permalink
Move MinSize calculation from Entry into renderer
Browse files Browse the repository at this point in the history
  • Loading branch information
Jacalz committed Feb 27, 2024
1 parent 07c173f commit 36c10da
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 23 deletions.
49 changes: 27 additions & 22 deletions widget/entry.go
Original file line number Diff line number Diff line change
Expand Up @@ -409,16 +409,7 @@ func (e *Entry) MinSize() fyne.Size {
}

e.ExtendBaseWidget(e)

th := e.Theme()
iconSpace := th.Size(theme.SizeNameInlineIcon) + th.Size(theme.SizeNameLineSpacing)
min := e.BaseWidget.MinSize()
if e.ActionItem != nil {
min = min.Add(fyne.NewSize(iconSpace, 0))
}
if e.Validator != nil {
min = min.Add(fyne.NewSize(iconSpace, 0))
}

e.propertyLock.Lock()
e.minCache = min
Expand Down Expand Up @@ -1679,25 +1670,39 @@ func (r *entryRenderer) MinSize() fyne.Size {
if rend := cache.Renderer(r.entry.content); rend != nil {
rend.(*entryContentRenderer).updateScrollDirections()
}
if r.scroll.Direction == widget.ScrollNone {
return r.entry.content.MinSize().Add(fyne.NewSize(0, r.entry.Theme().Size(theme.SizeNameInputBorder)*2))
}

innerPadding := r.entry.Theme().Size(theme.SizeNameInnerPadding)
textSize := r.entry.Theme().Size(theme.SizeNameText)
charMin := r.entry.placeholderProvider().charMinSize(r.entry.Password, r.entry.TextStyle, textSize)
minSize := charMin.Add(fyne.NewSquareSize(innerPadding))
th := r.entry.Theme()
minSize := fyne.Size{}

if r.scroll.Direction == widget.ScrollNone {
minSize = r.entry.content.MinSize().AddWidthHeight(0, th.Size(theme.SizeNameInputBorder)*2)
} else {
innerPadding := th.Size(theme.SizeNameInnerPadding)
textSize := th.Size(theme.SizeNameText)
charMin := r.entry.placeholderProvider().charMinSize(r.entry.Password, r.entry.TextStyle, textSize)
minSize = charMin.Add(fyne.NewSquareSize(innerPadding))

if r.entry.MultiLine {
count := r.entry.multiLineRows
if count <= 0 {
count = multiLineRows
}

if r.entry.MultiLine {
count := r.entry.multiLineRows
if count <= 0 {
count = multiLineRows
minSize.Height = charMin.Height*float32(count) + innerPadding
}

minSize.Height = charMin.Height*float32(count) + innerPadding
minSize = minSize.AddWidthHeight(innerPadding*2, innerPadding)
}

iconSpace := th.Size(theme.SizeNameInlineIcon) + th.Size(theme.SizeNameLineSpacing)
if r.entry.ActionItem != nil {
minSize.Width += iconSpace
}
if r.entry.Validator != nil {
minSize.Width += iconSpace
}

return minSize.Add(fyne.NewSize(innerPadding*2, innerPadding))
return minSize
}

func (r *entryRenderer) Objects() []fyne.CanvasObject {
Expand Down
2 changes: 1 addition & 1 deletion widget/entry_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -454,7 +454,7 @@ func TestEntry_MinSize(t *testing.T) {
min = entry.MinSize()
entry.ActionItem = canvas.NewCircle(color.Black)
entry.Refresh()
assert.Equal(t, min.Add(fyne.NewSize(theme.IconInlineSize()+theme.Padding(), 0)), entry.MinSize())
assert.Equal(t, min.Add(fyne.NewSize(theme.IconInlineSize()+theme.LineSpacing(), 0)), entry.MinSize())
}

func TestEntryMultiline_MinSize(t *testing.T) {
Expand Down

0 comments on commit 36c10da

Please sign in to comment.