avoid unnecessary refreshes when mousing over GridView covers

This commit is contained in:
Drew Weymouth
2023-07-12 14:39:22 -07:00
parent a8d1380b48
commit 5d09a5f8f3
+25 -5
View File
@@ -23,11 +23,17 @@ type coverImage struct {
Im *ImagePlaceholder
playbtn *canvas.Image
mouseInsideBtn bool
OnPlay func()
OnShowPage func()
OnShowContextMenu func(fyne.Position)
}
var (
playBtnSize = fyne.NewSize(60, 60)
playBtnHoveredSize = fyne.NewSize(65, 65)
)
func newCoverImage(placeholderResource fyne.Resource) *coverImage {
c := &coverImage{}
c.Im = NewImagePlaceholder(placeholderResource, 200)
@@ -35,7 +41,7 @@ func newCoverImage(placeholderResource fyne.Resource) *coverImage {
c.Im.OnTappedSecondary = c.TappedSecondary
c.Im.ScaleMode = canvas.ImageScaleFastest
c.playbtn = &canvas.Image{FillMode: canvas.ImageFillContain, Resource: res.ResPlaybuttonPng}
c.playbtn.SetMinSize(fyne.NewSize(60, 60))
c.playbtn.SetMinSize(playBtnSize)
c.playbtn.Hidden = true
c.ExtendBaseWidget(c)
return c
@@ -75,17 +81,25 @@ func (a *coverImage) MouseIn(*desktop.MouseEvent) {
}
func (a *coverImage) MouseOut() {
a.mouseInsideBtn = false
a.playbtn.Hidden = true
a.Refresh()
}
func (a *coverImage) MouseMoved(e *desktop.MouseEvent) {
if isInside(a.center(), a.playbtn.MinSize().Height/2, e.Position) {
a.playbtn.SetMinSize(fyne.NewSize(65, 65))
if !a.mouseInsideBtn {
a.playbtn.SetMinSize(playBtnHoveredSize)
a.playbtn.Refresh()
}
a.mouseInsideBtn = true
} else {
a.playbtn.SetMinSize(fyne.NewSize(60, 60))
if a.mouseInsideBtn {
a.playbtn.SetMinSize(playBtnSize)
a.playbtn.Refresh()
}
a.mouseInsideBtn = false
}
a.Refresh()
}
func (a *coverImage) center() fyne.Position {
@@ -96,6 +110,12 @@ func (a *coverImage) SetImage(im image.Image) {
a.Im.SetImage(im, true)
}
func (a *coverImage) ResetPlayButton() {
a.playbtn.SetMinSize(playBtnSize)
a.mouseInsideBtn = false
a.playbtn.Hidden = true
}
func isInside(origin fyne.Position, radius float32, point fyne.Position) bool {
x, y := (point.X - origin.X), (point.Y - origin.Y)
return x*x+y*y <= radius*radius
@@ -188,7 +208,7 @@ func (g *GridViewItem) Update(model GridViewItemModel) {
g.secondaryText.SetText(model.Secondary)
g.secondaryText.Disabled = model.SecondaryID == ""
g.secondaryText.Refresh()
g.Cover.playbtn.Hidden = true
g.Cover.ResetPlayButton()
}
func (g *GridViewItem) ItemID() string {