From 0fd0cf574f39040f3fd4a2acf43e5f8cd2ca5cd5 Mon Sep 17 00:00:00 2001 From: Jacob Date: Tue, 27 Feb 2024 13:44:07 +0100 Subject: [PATCH] Lat the renderer define the MinSize --- widget/check.go | 15 +++++++-------- widget/richtext.go | 11 +++-------- widget/select_entry.go | 2 +- 3 files changed, 11 insertions(+), 17 deletions(-) diff --git a/widget/check.go b/widget/check.go index b03bfeedae..96368f41b0 100644 --- a/widget/check.go +++ b/widget/check.go @@ -24,8 +24,6 @@ type Check struct { hovered bool binder basicBinder - - minSize fyne.Size // cached for hover/tap position calculations } // NewCheck creates a new check widget with the set label and change handler @@ -119,8 +117,9 @@ func (c *Check) MouseMoved(me *desktop.MouseEvent) { // only hovered if cached minSize has not been initialized (test code) // or the pointer is within the "active" area of the widget (its minSize) - c.hovered = c.minSize.IsZero() || - (me.Position.X <= c.minSize.Width && me.Position.Y <= c.minSize.Height) + minSize := c.MinSize() + c.hovered = minSize.IsZero() || + (me.Position.X <= minSize.Width && me.Position.Y <= minSize.Height) if oldHovered != c.hovered { c.Refresh() @@ -132,8 +131,9 @@ func (c *Check) Tapped(pe *fyne.PointEvent) { if c.Disabled() { return } - if !c.minSize.IsZero() && - (pe.Position.X > c.minSize.Width || pe.Position.Y > c.minSize.Height) { + minSize := c.MinSize() + if !minSize.IsZero() && + (pe.Position.X > minSize.Width || pe.Position.Y > minSize.Height) { // tapped outside the active area of the widget return } @@ -151,8 +151,7 @@ func (c *Check) Tapped(pe *fyne.PointEvent) { // MinSize returns the size that this widget should not shrink below func (c *Check) MinSize() fyne.Size { c.ExtendBaseWidget(c) - c.minSize = c.BaseWidget.MinSize() - return c.minSize + return c.BaseWidget.MinSize() } // CreateRenderer is a private method to Fyne which links this widget to its renderer diff --git a/widget/richtext.go b/widget/richtext.go index 007b8e3c67..d237c0ec56 100644 --- a/widget/richtext.go +++ b/widget/richtext.go @@ -45,7 +45,6 @@ type RichText struct { visualCache map[RichTextSegment][]fyne.CanvasObject cacheLock sync.Mutex - minCache fyne.Size } // NewRichText returns a new RichText widget that renders the given text and segments. @@ -89,19 +88,14 @@ func (t *RichText) CreateRenderer() fyne.WidgetRenderer { // MinSize calculates the minimum size of a rich text widget. // This is based on the contained text with a standard amount of padding added. func (t *RichText) MinSize() fyne.Size { - // we don't return the minCache here, as any internal segments could have caused it to change... t.ExtendBaseWidget(t) - - min := t.BaseWidget.MinSize() - t.minCache = min - return min + return t.BaseWidget.MinSize() } // Refresh triggers a redraw of the rich text. // // Implements: fyne.Widget func (t *RichText) Refresh() { - t.minCache = fyne.Size{} t.updateRowBounds() for _, s := range t.Segments { @@ -123,10 +117,11 @@ func (t *RichText) Resize(size fyne.Size) { } t.size.Store(size) + minSize := t.MinSize() t.propertyLock.RLock() segments := t.Segments - skipResize := !t.minCache.IsZero() && size.Width >= t.minCache.Width && size.Height >= t.minCache.Height && t.Wrapping == fyne.TextWrapOff && t.Truncation == fyne.TextTruncateOff + skipResize := !minSize.IsZero() && size.Width >= minSize.Width && size.Height >= minSize.Height && t.Wrapping == fyne.TextWrapOff && t.Truncation == fyne.TextTruncateOff t.propertyLock.RUnlock() if skipResize { diff --git a/widget/select_entry.go b/widget/select_entry.go index 806d17c8c0..d6161252f9 100644 --- a/widget/select_entry.go +++ b/widget/select_entry.go @@ -55,7 +55,7 @@ func (e *SelectEntry) Disable() { // Implements: fyne.Widget func (e *SelectEntry) MinSize() fyne.Size { e.ExtendBaseWidget(e) - return e.Entry.MinSize() + return e.BaseWidget.MinSize() } // Move changes the relative position of the select entry.