avoid unnecessary refreshes when mousing over GridView covers
This commit is contained in:
@@ -23,11 +23,17 @@ type coverImage struct {
|
|||||||
|
|
||||||
Im *ImagePlaceholder
|
Im *ImagePlaceholder
|
||||||
playbtn *canvas.Image
|
playbtn *canvas.Image
|
||||||
|
mouseInsideBtn bool
|
||||||
OnPlay func()
|
OnPlay func()
|
||||||
OnShowPage func()
|
OnShowPage func()
|
||||||
OnShowContextMenu func(fyne.Position)
|
OnShowContextMenu func(fyne.Position)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
playBtnSize = fyne.NewSize(60, 60)
|
||||||
|
playBtnHoveredSize = fyne.NewSize(65, 65)
|
||||||
|
)
|
||||||
|
|
||||||
func newCoverImage(placeholderResource fyne.Resource) *coverImage {
|
func newCoverImage(placeholderResource fyne.Resource) *coverImage {
|
||||||
c := &coverImage{}
|
c := &coverImage{}
|
||||||
c.Im = NewImagePlaceholder(placeholderResource, 200)
|
c.Im = NewImagePlaceholder(placeholderResource, 200)
|
||||||
@@ -35,7 +41,7 @@ func newCoverImage(placeholderResource fyne.Resource) *coverImage {
|
|||||||
c.Im.OnTappedSecondary = c.TappedSecondary
|
c.Im.OnTappedSecondary = c.TappedSecondary
|
||||||
c.Im.ScaleMode = canvas.ImageScaleFastest
|
c.Im.ScaleMode = canvas.ImageScaleFastest
|
||||||
c.playbtn = &canvas.Image{FillMode: canvas.ImageFillContain, Resource: res.ResPlaybuttonPng}
|
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.playbtn.Hidden = true
|
||||||
c.ExtendBaseWidget(c)
|
c.ExtendBaseWidget(c)
|
||||||
return c
|
return c
|
||||||
@@ -75,17 +81,25 @@ func (a *coverImage) MouseIn(*desktop.MouseEvent) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *coverImage) MouseOut() {
|
func (a *coverImage) MouseOut() {
|
||||||
|
a.mouseInsideBtn = false
|
||||||
a.playbtn.Hidden = true
|
a.playbtn.Hidden = true
|
||||||
a.Refresh()
|
a.Refresh()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *coverImage) MouseMoved(e *desktop.MouseEvent) {
|
func (a *coverImage) MouseMoved(e *desktop.MouseEvent) {
|
||||||
if isInside(a.center(), a.playbtn.MinSize().Height/2, e.Position) {
|
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 {
|
} 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 {
|
func (a *coverImage) center() fyne.Position {
|
||||||
@@ -96,6 +110,12 @@ func (a *coverImage) SetImage(im image.Image) {
|
|||||||
a.Im.SetImage(im, true)
|
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 {
|
func isInside(origin fyne.Position, radius float32, point fyne.Position) bool {
|
||||||
x, y := (point.X - origin.X), (point.Y - origin.Y)
|
x, y := (point.X - origin.X), (point.Y - origin.Y)
|
||||||
return x*x+y*y <= radius*radius
|
return x*x+y*y <= radius*radius
|
||||||
@@ -188,7 +208,7 @@ func (g *GridViewItem) Update(model GridViewItemModel) {
|
|||||||
g.secondaryText.SetText(model.Secondary)
|
g.secondaryText.SetText(model.Secondary)
|
||||||
g.secondaryText.Disabled = model.SecondaryID == ""
|
g.secondaryText.Disabled = model.SecondaryID == ""
|
||||||
g.secondaryText.Refresh()
|
g.secondaryText.Refresh()
|
||||||
g.Cover.playbtn.Hidden = true
|
g.Cover.ResetPlayButton()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GridViewItem) ItemID() string {
|
func (g *GridViewItem) ItemID() string {
|
||||||
|
|||||||
Reference in New Issue
Block a user