beginning of work on fullscreen page

This commit is contained in:
Drew Weymouth
2024-03-01 16:59:04 -08:00
parent 1914821283
commit e719782437
6 changed files with 206 additions and 12 deletions
+115
View File
@@ -0,0 +1,115 @@
package widgets
import (
"image"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/widget"
"github.com/dweymouth/supersonic/ui/theme"
)
// Shows the current album art, track name, artist name, and album name
// for the currently playing track. Placed into the left side of the BottomPanel.
type LargeNowPlayingCard struct {
widget.BaseWidget
DisableRating bool
trackName *widget.Hyperlink
artistName *MultiHyperlink
albumName *widget.Hyperlink
cover *ImagePlaceholder
OnTrackNameTapped func()
OnArtistNameTapped func(artistID string)
OnAlbumNameTapped func()
OnShowCoverImage func()
OnSetRating func(rating int)
OnSetFavorite func(favorite bool)
OnAddToPlaylist func()
}
func NewLargeNowPlayingCard() *LargeNowPlayingCard {
n := &LargeNowPlayingCard{
trackName: widget.NewHyperlink("", nil),
artistName: NewMultiHyperlink(),
albumName: widget.NewHyperlink("", nil),
}
n.ExtendBaseWidget(n)
n.cover = NewImagePlaceholder(theme.TracksIcon, 300)
n.trackName.Hidden = true
n.albumName.Hidden = true
n.albumName.Truncation = fyne.TextTruncateEllipsis
n.trackName.Truncation = fyne.TextTruncateEllipsis
n.trackName.TextStyle.Bold = true
n.albumName.OnTapped = n.onAlbumNameTapped
n.artistName.OnTapped = n.onArtistNameTapped
n.trackName.OnTapped = n.onTrackNameTapped
return n
}
func (n *LargeNowPlayingCard) MinSize() fyne.Size {
// prop up height for when cover image is hidden
return fyne.NewSize(n.BaseWidget.MinSize().Width, 85)
}
func (n *LargeNowPlayingCard) onAlbumNameTapped() {
if n.OnAlbumNameTapped != nil {
n.OnAlbumNameTapped()
}
}
func (n *LargeNowPlayingCard) onArtistNameTapped(artistID string) {
if n.OnArtistNameTapped != nil {
n.OnArtistNameTapped(artistID)
}
}
func (n *LargeNowPlayingCard) onTrackNameTapped() {
if n.OnTrackNameTapped != nil {
n.OnTrackNameTapped()
}
}
func (n *LargeNowPlayingCard) onShowCoverImage(*fyne.PointEvent) {
if n.OnShowCoverImage != nil {
n.OnShowCoverImage()
}
}
func (n *LargeNowPlayingCard) onSetFavorite(fav bool) {
if n.OnSetFavorite != nil {
n.OnSetFavorite(fav)
}
}
func (n *LargeNowPlayingCard) onSetRating(rating int) {
if n.OnSetRating != nil {
n.OnSetRating(rating)
}
}
func (n *LargeNowPlayingCard) CreateRenderer() fyne.WidgetRenderer {
vbox := container.NewVBox(
n.trackName,
n.albumName,
n.artistName,
)
c := container.NewBorder(nil, vbox, nil, nil, n.cover)
return widget.NewSimpleRenderer(c)
}
func (n *LargeNowPlayingCard) Update(track string, artists, artistIDs []string, album string) {
n.trackName.SetText(track)
n.trackName.Hidden = track == ""
n.artistName.BuildSegments(artists, artistIDs)
n.albumName.SetText(album)
n.albumName.Hidden = album == ""
n.Refresh()
}
func (n *LargeNowPlayingCard) SetCoverImage(im image.Image) {
n.cover.SetImage(im, false)
}
+3 -3
View File
@@ -30,7 +30,7 @@ type NowPlayingCard struct {
OnTrackNameTapped func()
OnArtistNameTapped func(artistID string)
OnAlbumNameTapped func()
OnShowCoverImage func()
OnCoverTapped func()
OnSetRating func(rating int)
OnSetFavorite func(favorite bool)
OnAddToPlaylist func()
@@ -84,8 +84,8 @@ func (n *NowPlayingCard) onTrackNameTapped() {
}
func (n *NowPlayingCard) onShowCoverImage(*fyne.PointEvent) {
if n.OnShowCoverImage != nil {
n.OnShowCoverImage()
if n.OnCoverTapped != nil {
n.OnCoverTapped()
}
}