fix tap events for gridview

This commit is contained in:
Drew Weymouth
2023-05-23 19:03:44 -07:00
parent 90936c086d
commit c5b8e0e3f7
6 changed files with 26 additions and 18 deletions
+1 -1
View File
@@ -147,7 +147,7 @@ type AlbumPageHeader struct {
func NewAlbumPageHeader(page *AlbumPage) *AlbumPageHeader { func NewAlbumPageHeader(page *AlbumPage) *AlbumPageHeader {
a := &AlbumPageHeader{page: page} a := &AlbumPageHeader{page: page}
a.ExtendBaseWidget(a) a.ExtendBaseWidget(a)
a.cover = widgets.NewTappableImage(func() { go a.showPopUpCover() }) a.cover = widgets.NewTappableImage(func(*fyne.PointEvent) { go a.showPopUpCover() })
a.cover.FillMode = canvas.ImageFillContain a.cover.FillMode = canvas.ImageFillContain
a.cover.SetMinSize(fyne.NewSize(225, 225)) a.cover.SetMinSize(fyne.NewSize(225, 225))
+1 -1
View File
@@ -251,7 +251,7 @@ func NewArtistPageHeader(page *ArtistPage) *ArtistPageHeader {
SizeName: theme.SizeNameHeadingText, SizeName: theme.SizeNameHeadingText,
} }
a.artistImage = widgets.NewImagePlaceholder(myTheme.ArtistIcon, 225) a.artistImage = widgets.NewImagePlaceholder(myTheme.ArtistIcon, 225)
a.artistImage.OnTapped = func() { a.artistImage.OnTapped = func(*fyne.PointEvent) {
if im := a.artistImage.Image(); im != nil { if im := a.artistImage.Image(); im != nil {
a.artistPage.contr.ShowPopUpImage(im) a.artistPage.contr.ShowPopUpImage(im)
} }
+4 -4
View File
@@ -17,8 +17,6 @@ import (
var _ fyne.Widget = (*GridViewItem)(nil) var _ fyne.Widget = (*GridViewItem)(nil)
var _ fyne.Widget = (*coverImage)(nil) var _ fyne.Widget = (*coverImage)(nil)
var _ fyne.Tappable = (*coverImage)(nil)
var _ fyne.SecondaryTappable = (*coverImage)(nil)
type coverImage struct { type coverImage struct {
widget.BaseWidget widget.BaseWidget
@@ -32,12 +30,14 @@ type coverImage struct {
func newCoverImage(placeholderResource fyne.Resource) *coverImage { func newCoverImage(placeholderResource fyne.Resource) *coverImage {
c := &coverImage{} c := &coverImage{}
c.ExtendBaseWidget(c)
c.Im = NewImagePlaceholder(placeholderResource, 200) c.Im = NewImagePlaceholder(placeholderResource, 200)
c.Im.OnTapped = c.Tapped
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(fyne.NewSize(60, 60))
c.playbtn.Hidden = true c.playbtn.Hidden = true
c.ExtendBaseWidget(c)
return c return c
} }
@@ -93,7 +93,7 @@ func (a *coverImage) center() fyne.Position {
} }
func (a *coverImage) SetImage(im image.Image) { func (a *coverImage) SetImage(im image.Image) {
a.Im.SetImage(im, false) a.Im.SetImage(im, true)
} }
func isInside(origin fyne.Position, radius float32, point fyne.Position) bool { func isInside(origin fyne.Position, radius float32, point fyne.Position) bool {
+11 -3
View File
@@ -25,7 +25,8 @@ type ImagePlaceholder struct {
border *myTheme.ThemedRectangle border *myTheme.ThemedRectangle
minSize float32 minSize float32
OnTapped func() OnTapped func(*fyne.PointEvent)
OnTappedSecondary func(*fyne.PointEvent)
} }
func NewImagePlaceholder(centerIcon fyne.Resource, minSize float32) *ImagePlaceholder { func NewImagePlaceholder(centerIcon fyne.Resource, minSize float32) *ImagePlaceholder {
@@ -35,6 +36,7 @@ func NewImagePlaceholder(centerIcon fyne.Resource, minSize float32) *ImagePlaceh
i.iconImage.FillMode = canvas.ImageFillContain i.iconImage.FillMode = canvas.ImageFillContain
i.iconImage.SetMinSize(fyne.NewSize(minSize/4, minSize/4)) i.iconImage.SetMinSize(fyne.NewSize(minSize/4, minSize/4))
i.imageDisp = NewTappableImage(i.onTapped) i.imageDisp = NewTappableImage(i.onTapped)
i.imageDisp.OnTappedSecondary = i.onTappedSecondary
i.imageDisp.FillMode = canvas.ImageFillContain i.imageDisp.FillMode = canvas.ImageFillContain
i.imageDisp.Hidden = true i.imageDisp.Hidden = true
i.border = myTheme.NewThemedRectangle(theme.ColorNameBackground) i.border = myTheme.NewThemedRectangle(theme.ColorNameBackground)
@@ -66,9 +68,15 @@ func (i *ImagePlaceholder) Image() image.Image {
return i.image return i.image
} }
func (i *ImagePlaceholder) onTapped() { func (i *ImagePlaceholder) onTapped(e *fyne.PointEvent) {
if i.OnTapped != nil { if i.OnTapped != nil {
i.OnTapped() i.OnTapped(e)
}
}
func (i *ImagePlaceholder) onTappedSecondary(e *fyne.PointEvent) {
if i.OnTappedSecondary != nil {
i.OnTappedSecondary(e)
} }
} }
+3 -3
View File
@@ -55,7 +55,7 @@ func NewNowPlayingCard() *NowPlayingCard {
return n return n
} }
func (n *NowPlayingCard) onShowCoverImage() { func (n *NowPlayingCard) onShowCoverImage(*fyne.PointEvent) {
if n.OnShowCoverImage != nil { if n.OnShowCoverImage != nil {
n.OnShowCoverImage() n.OnShowCoverImage()
} }
@@ -107,7 +107,7 @@ func (n *NowPlayingCard) OnTrackNameTapped(f func()) {
n.trackName.OnTapped = f n.trackName.OnTapped = f
} }
func (n *NowPlayingCard) showMenu(pos fyne.Position) { func (n *NowPlayingCard) showMenu(e *fyne.PointEvent) {
if n.menu == nil { if n.menu == nil {
ratingMenu := util.NewRatingSubmenu(n.onSetRating) ratingMenu := util.NewRatingSubmenu(n.onSetRating)
m := fyne.NewMenu("", m := fyne.NewMenu("",
@@ -117,5 +117,5 @@ func (n *NowPlayingCard) showMenu(pos fyne.Position) {
fyne.NewMenuItem("Add to playlist...", func() { n.onAddToPlaylist() })) fyne.NewMenuItem("Add to playlist...", func() { n.onAddToPlaylist() }))
n.menu = widget.NewPopUpMenu(m, fyne.CurrentApp().Driver().CanvasForObject(n)) n.menu = widget.NewPopUpMenu(m, fyne.CurrentApp().Driver().CanvasForObject(n))
} }
n.menu.ShowAtPosition(pos) n.menu.ShowAtPosition(e.AbsolutePosition)
} }
+6 -6
View File
@@ -55,11 +55,11 @@ type TappableImage struct {
canvas.Image canvas.Image
DisableTapping bool DisableTapping bool
OnTapped func() OnTapped func(*fyne.PointEvent)
OnTappedSecondary func(pos fyne.Position) OnTappedSecondary func(*fyne.PointEvent)
} }
func NewTappableImage(onTapped func()) *TappableImage { func NewTappableImage(onTapped func(*fyne.PointEvent)) *TappableImage {
t := &TappableImage{OnTapped: onTapped} t := &TappableImage{OnTapped: onTapped}
t.ExtendBaseWidget(t) t.ExtendBaseWidget(t)
return t return t
@@ -92,15 +92,15 @@ func (t *TappableImage) Cursor() desktop.Cursor {
return desktop.DefaultCursor return desktop.DefaultCursor
} }
func (t *TappableImage) Tapped(_ *fyne.PointEvent) { func (t *TappableImage) Tapped(e *fyne.PointEvent) {
if !t.DisableTapping && t.haveImage() && t.OnTapped != nil { if !t.DisableTapping && t.haveImage() && t.OnTapped != nil {
t.OnTapped() t.OnTapped(e)
} }
} }
func (t *TappableImage) TappedSecondary(e *fyne.PointEvent) { func (t *TappableImage) TappedSecondary(e *fyne.PointEvent) {
if !t.DisableTapping && t.haveImage() && t.OnTappedSecondary != nil { if !t.DisableTapping && t.haveImage() && t.OnTappedSecondary != nil {
t.OnTappedSecondary(e.AbsolutePosition) t.OnTappedSecondary(e)
} }
} }