make artist image displayable in pop-up

This commit is contained in:
Drew Weymouth
2023-02-07 09:31:49 -08:00
parent 87ae3e940f
commit 9fd6508af0
7 changed files with 113 additions and 75 deletions
+28
View File
@@ -6,6 +6,8 @@ import (
"math"
"strings"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/canvas"
"fyne.io/fyne/v2/widget"
"golang.org/x/net/html"
)
@@ -26,6 +28,32 @@ func ImageAspect(im image.Image) float32 {
return float32(b.Max.X-b.Min.X) / float32(b.Max.Y-b.Min.Y)
}
type PopUpProvider interface {
CreatePopUp(fyne.CanvasObject) *widget.PopUp
WindowSize() fyne.Size
}
func ShowPopUpImage(img image.Image, popUpProvider PopUpProvider) {
im := canvas.NewImageFromImage(img)
im.FillMode = canvas.ImageFillContain
pop := popUpProvider.CreatePopUp(im)
s := popUpProvider.WindowSize()
var popS fyne.Size
if asp := ImageAspect(img); s.Width/s.Height > asp {
// window height is limiting factor
h := s.Height * 0.8
popS = fyne.NewSize(h*asp, h)
} else {
w := s.Width * 0.8
popS = fyne.NewSize(w, w*(1/asp))
}
pop.Resize(popS)
pop.ShowAtPosition(fyne.NewPos(
(s.Width-popS.Width)/2,
(s.Height-popS.Height)/2,
))
}
func RichTextSegsFromHTMLString(s string) []widget.RichTextSegment {
tokr := html.NewTokenizer(strings.NewReader(s))
var segs []widget.RichTextSegment