From f4c007264252253ae97a41036dcb2972a80804ce Mon Sep 17 00:00:00 2001 From: Drew Weymouth Date: Fri, 5 Apr 2024 08:17:31 -0700 Subject: [PATCH 1/3] add clean task for visualCache --- cmd/fyne_demo/main.go | 4 ++-- widget/richtext.go | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/cmd/fyne_demo/main.go b/cmd/fyne_demo/main.go index 81deb5fcbb..1780a4390c 100644 --- a/cmd/fyne_demo/main.go +++ b/cmd/fyne_demo/main.go @@ -246,10 +246,10 @@ func makeNav(setTutorial func(tutorial tutorials.Tutorial), loadPrevious bool) f themes := container.NewGridWithColumns(2, widget.NewButton("Dark", func() { - a.Settings().SetTheme(&forcedVariant{Theme: theme.DefaultTheme(), variant: theme.VariantDark}) + //a.Settings().SetTheme(&forcedVariant{Theme: theme.DefaultTheme(), variant: theme.VariantDark}) }), widget.NewButton("Light", func() { - a.Settings().SetTheme(&forcedVariant{Theme: theme.DefaultTheme(), variant: theme.VariantLight}) + //a.Settings().SetTheme(&forcedVariant{Theme: theme.DefaultTheme(), variant: theme.VariantLight}) }), ) diff --git a/widget/richtext.go b/widget/richtext.go index 007b8e3c67..23469c7725 100644 --- a/widget/richtext.go +++ b/widget/richtext.go @@ -225,6 +225,26 @@ func (t *RichText) cachedSegmentVisual(seg RichTextSegment, offset int) fyne.Can return vis } +func (t *RichText) cleanVisualCache() { + var deletingSegs []RichTextSegment + for seg1 := range t.visualCache { + found := false + for _, seg2 := range t.Segments { + if seg1 == seg2 { + found = true + break + } + } + if !found { + // cached segment is not currently in t.Segments, clear it + deletingSegs = append(deletingSegs, seg1) + } + } + for _, seg := range deletingSegs { + delete(t.visualCache, seg) + } +} + // insertAt inserts the text at the specified position func (t *RichText) insertAt(pos int, runes string) { index := 0 @@ -726,6 +746,8 @@ func (r *textRenderer) Refresh() { r.Layout(r.obj.Size()) canvas.Refresh(r.obj.super()) + + r.obj.cleanVisualCache() } func (r *textRenderer) layoutRow(texts []fyne.CanvasObject, align fyne.TextAlign, xPos, yPos, lineWidth float32) (float32, float32) { From 77b6e423990542e974a65425cec9d3408cb6d818 Mon Sep 17 00:00:00 2001 From: Drew Weymouth Date: Fri, 5 Apr 2024 08:19:06 -0700 Subject: [PATCH 2/3] undo unintentional fyne_demo changes --- cmd/fyne_demo/main.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/fyne_demo/main.go b/cmd/fyne_demo/main.go index 1780a4390c..81deb5fcbb 100644 --- a/cmd/fyne_demo/main.go +++ b/cmd/fyne_demo/main.go @@ -246,10 +246,10 @@ func makeNav(setTutorial func(tutorial tutorials.Tutorial), loadPrevious bool) f themes := container.NewGridWithColumns(2, widget.NewButton("Dark", func() { - //a.Settings().SetTheme(&forcedVariant{Theme: theme.DefaultTheme(), variant: theme.VariantDark}) + a.Settings().SetTheme(&forcedVariant{Theme: theme.DefaultTheme(), variant: theme.VariantDark}) }), widget.NewButton("Light", func() { - //a.Settings().SetTheme(&forcedVariant{Theme: theme.DefaultTheme(), variant: theme.VariantLight}) + a.Settings().SetTheme(&forcedVariant{Theme: theme.DefaultTheme(), variant: theme.VariantLight}) }), ) From 6c7515e769ed993ada8162b8648024a6f77acb72 Mon Sep 17 00:00:00 2001 From: Drew Weymouth Date: Fri, 5 Apr 2024 08:49:49 -0700 Subject: [PATCH 3/3] add early return condition to cleanVisualCache --- widget/richtext.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/widget/richtext.go b/widget/richtext.go index 23469c7725..3477953592 100644 --- a/widget/richtext.go +++ b/widget/richtext.go @@ -226,6 +226,9 @@ func (t *RichText) cachedSegmentVisual(seg RichTextSegment, offset int) fyne.Can } func (t *RichText) cleanVisualCache() { + if len(t.visualCache) <= len(t.Segments) { + return + } var deletingSegs []RichTextSegment for seg1 := range t.visualCache { found := false