Skip to content

Commit

Permalink
Merge pull request #4682 from Jacalz/minsize-into-renderer
Browse files Browse the repository at this point in the history
widget: Move some minsize calculations to the renderer
  • Loading branch information
andydotxyz committed Apr 17, 2024
2 parents 5239aff + 36c10da commit a92d6e0
Show file tree
Hide file tree
Showing 8 changed files with 35 additions and 43 deletions.
3 changes: 1 addition & 2 deletions widget/activity.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,7 @@ func NewActivity() *Activity {

func (a *Activity) MinSize() fyne.Size {
a.ExtendBaseWidget(a)

return fyne.NewSquareSize(a.Theme().Size(theme.SizeNameInlineIcon))
return a.BaseWidget.MinSize()
}

// Start the activity indicator animation
Expand Down
49 changes: 27 additions & 22 deletions widget/entry.go
Original file line number Diff line number Diff line change
Expand Up @@ -410,16 +410,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 @@ -1711,25 +1702,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 @@ -455,7 +455,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
1 change: 0 additions & 1 deletion widget/gridwrap.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,6 @@ func (l *GridWrap) FocusLost() {
// MinSize returns the size that this widget should not shrink below.
func (l *GridWrap) MinSize() fyne.Size {
l.ExtendBaseWidget(l)

return l.BaseWidget.MinSize()
}

Expand Down
7 changes: 2 additions & 5 deletions widget/hyperlink.go
Original file line number Diff line number Diff line change
Expand Up @@ -163,11 +163,8 @@ func (hl *Hyperlink) Refresh() {

// MinSize returns the smallest size this widget can shrink to
func (hl *Hyperlink) MinSize() fyne.Size {
if len(hl.provider.Segments) == 0 {
hl.syncSegments()
}

return hl.provider.MinSize()
hl.ExtendBaseWidget(hl)
return hl.BaseWidget.MinSize()
}

// Resize sets a new size for the hyperlink.
Expand Down
9 changes: 2 additions & 7 deletions widget/label.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package widget
import (
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/data/binding"
"fyne.io/fyne/v2/internal/cache"
"fyne.io/fyne/v2/theme"
)

Expand Down Expand Up @@ -77,12 +76,8 @@ func (l *Label) CreateRenderer() fyne.WidgetRenderer {
//
// Implements: fyne.Widget
func (l *Label) MinSize() fyne.Size {
if l.provider == nil {
l.ExtendBaseWidget(l)
cache.Renderer(l.super())
}

return l.provider.MinSize()
l.ExtendBaseWidget(l)
return l.BaseWidget.MinSize()
}

// Refresh triggers a redraw of the label.
Expand Down
1 change: 0 additions & 1 deletion widget/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,6 @@ func (l *List) FocusLost() {
// MinSize returns the size that this widget should not shrink below.
func (l *List) MinSize() fyne.Size {
l.ExtendBaseWidget(l)

return l.BaseWidget.MinSize()
}

Expand Down
6 changes: 2 additions & 4 deletions widget/separator.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,7 @@ func (s *Separator) CreateRenderer() fyne.WidgetRenderer {
// Implements: fyne.Widget
func (s *Separator) MinSize() fyne.Size {
s.ExtendBaseWidget(s)
t := s.Theme().Size(theme.SizeNameSeparatorThickness)
return fyne.NewSize(t, t)
return s.BaseWidget.MinSize()
}

var _ fyne.WidgetRenderer = (*separatorRenderer)(nil)
Expand All @@ -68,8 +67,7 @@ type separatorRenderer struct {
}

func (r *separatorRenderer) MinSize() fyne.Size {
t := r.d.Theme().Size(theme.SizeNameSeparatorThickness)
return fyne.NewSize(t, t)
return fyne.NewSquareSize(r.d.Theme().Size(theme.SizeNameSeparatorThickness))
}

func (r *separatorRenderer) Refresh() {
Expand Down

0 comments on commit a92d6e0

Please sign in to comment.