From 86198574256936d59ef3a5e13f71612830a6e9f0 Mon Sep 17 00:00:00 2001 From: Drew Weymouth Date: Thu, 17 Apr 2025 08:49:10 -0700 Subject: [PATCH] lengthen Now Playing gradient animation + standardize anim durations --- ui/browsing/nowplayingpage.go | 3 +-- ui/browsing/playlistpage.go | 5 ++--- ui/theme/theme.go | 6 ++++++ ui/toastoverlay.go | 3 ++- ui/widgets/gridviewitem.go | 9 ++++----- ui/widgets/imagepopup.go | 3 ++- 6 files changed, 17 insertions(+), 12 deletions(-) diff --git a/ui/browsing/nowplayingpage.go b/ui/browsing/nowplayingpage.go index d74b1e6..10f4f89 100644 --- a/ui/browsing/nowplayingpage.go +++ b/ui/browsing/nowplayingpage.go @@ -9,7 +9,6 @@ import ( "net/url" "slices" "strings" - "time" "github.com/cenkalti/dominantcolor" "github.com/dweymouth/supersonic/backend" @@ -321,7 +320,7 @@ func (a *NowPlayingPage) onImageLoaded(img image.Image, err error) { // despite not being marked as such // TODO: if this changes, use fyne.Do anim := canvas.NewColorRGBAAnimation( - a.background.StartColor, c, 75*time.Millisecond, func(c color.Color) { + a.background.StartColor, c, myTheme.AnimationDurationMedium, func(c color.Color) { a.background.StartColor = c a.background.Refresh() }) diff --git a/ui/browsing/playlistpage.go b/ui/browsing/playlistpage.go index 699418d..4c82c3e 100644 --- a/ui/browsing/playlistpage.go +++ b/ui/browsing/playlistpage.go @@ -16,7 +16,6 @@ import ( "github.com/dweymouth/supersonic/ui/widgets" "fyne.io/fyne/v2" - "fyne.io/fyne/v2/canvas" "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/lang" "fyne.io/fyne/v2/layout" @@ -359,7 +358,7 @@ func NewPlaylistPageHeader(page *PlaylistPage) *PlaylistPageHeader { // dismissal animation searchEntry.Scroll = container.ScrollNone searchEntry.SetPlaceHolder("") - fyne.NewAnimation(canvas.DurationShort, func(f float32) { + fyne.NewAnimation(myTheme.AnimationDurationShort, func(f float32) { f = 1 - f w := (200-minW)*f + minW searchEntry.SetMinWidth(w) @@ -375,7 +374,7 @@ func NewPlaylistPageHeader(page *PlaylistPage) *PlaylistPageHeader { buttonRow.Objects[3] = searchEntry searchEntry.SetMinWidth(minW) fyne.CurrentApp().Driver().CanvasForObject(a).Focus(searchEntry) - fyne.NewAnimation(canvas.DurationShort, func(f float32) { + fyne.NewAnimation(myTheme.AnimationDurationShort, func(f float32) { w := (200-minW)*f + minW searchEntry.SetMinWidth(w) // re-layout container (without unneeded full refresh) diff --git a/ui/theme/theme.go b/ui/theme/theme.go index 5df2935..6482491 100644 --- a/ui/theme/theme.go +++ b/ui/theme/theme.go @@ -10,11 +10,13 @@ import ( "path/filepath" "slices" "strings" + "time" "github.com/dweymouth/supersonic/backend" "github.com/dweymouth/supersonic/res" "fyne.io/fyne/v2" + "fyne.io/fyne/v2/canvas" "fyne.io/fyne/v2/theme" ) @@ -30,6 +32,10 @@ const ( SizeNameSubSubHeadingText fyne.ThemeSizeName = "subSubHeadingText" // in between Text and SubHeadingText SizeNameSubText fyne.ThemeSizeName = "subText" // in between Text and Caption SizeNameSuffixText fyne.ThemeSizeName = "suffixText" // a tiny bit smaller than subText + + AnimationDurationShort = canvas.DurationShort + AnimationDurationMedium = 225 * time.Millisecond + AnimationDurationLong = canvas.DurationStandard ) var ( diff --git a/ui/toastoverlay.go b/ui/toastoverlay.go index b71235e..4faea5a 100644 --- a/ui/toastoverlay.go +++ b/ui/toastoverlay.go @@ -12,13 +12,14 @@ import ( "fyne.io/fyne/v2/layout" "fyne.io/fyne/v2/theme" "fyne.io/fyne/v2/widget" + myTheme "github.com/dweymouth/supersonic/ui/theme" "github.com/dweymouth/supersonic/ui/util" "github.com/dweymouth/supersonic/ui/widgets" ) const ( toastAutoDismissalTime = 3 * time.Second - toastAnimationDuration = 100 * time.Millisecond + toastAnimationDuration = myTheme.AnimationDurationShort ) type ToastOverlay struct { diff --git a/ui/widgets/gridviewitem.go b/ui/widgets/gridviewitem.go index 73bac69..77e9e3a 100644 --- a/ui/widgets/gridviewitem.go +++ b/ui/widgets/gridviewitem.go @@ -6,7 +6,6 @@ import ( "image/color" "image/png" "slices" - "time" "fyne.io/fyne/v2" "fyne.io/fyne/v2/canvas" @@ -200,7 +199,7 @@ func (a *coverImage) MouseIn(*desktop.MouseEvent) { a.updateFavoriteIcon(false) firstTick := true - a.mouseInAnim = fyne.NewAnimation(225*time.Millisecond, func(f float32) { + a.mouseInAnim = fyne.NewAnimation(myTheme.AnimationDurationMedium, func(f float32) { a.playbtn.Hidden = false a.favoriteButton.Hidden = !a.EnableFavorite a.bottomPanel.Hidden = false @@ -235,7 +234,7 @@ func (a *coverImage) MouseOut() { a.mouseInAnim.Stop() a.mouseInAnim = nil } - gridViewMouseOutAnim = fyne.NewAnimation(canvas.DurationShort, func(f float32) { + gridViewMouseOutAnim = fyne.NewAnimation(myTheme.AnimationDurationShort, func(f float32) { t := 1 - f setPlayBtnTranslucency(t * float32(playBtnOpacity)) a.moreButton.Translucency = float64(f) @@ -265,7 +264,7 @@ func (a *coverImage) MouseMoved(e *desktop.MouseEvent) { return } if in { - fyne.NewAnimation(canvas.DurationShort, func(f float32) { + fyne.NewAnimation(myTheme.AnimationDurationShort, func(f float32) { t := (1-playBtnOpacity)*f + playBtnOpacity setPlayBtnTranslucency(t) delta := playBtnHoveredSize.Subtract(playBtnSize) @@ -273,7 +272,7 @@ func (a *coverImage) MouseMoved(e *desktop.MouseEvent) { a.playbtn.Refresh() }).Start() } else { - fyne.NewAnimation(canvas.DurationShort, func(f float32) { + fyne.NewAnimation(myTheme.AnimationDurationShort, func(f float32) { t := 1 - (1-playBtnOpacity)*f setPlayBtnTranslucency(t) delta := playBtnHoveredSize.Subtract(playBtnSize) diff --git a/ui/widgets/imagepopup.go b/ui/widgets/imagepopup.go index 31e8d79..8f95bec 100644 --- a/ui/widgets/imagepopup.go +++ b/ui/widgets/imagepopup.go @@ -6,6 +6,7 @@ import ( "fyne.io/fyne/v2" "fyne.io/fyne/v2/canvas" "fyne.io/fyne/v2/widget" + myTheme "github.com/dweymouth/supersonic/ui/theme" ) const ( @@ -41,7 +42,7 @@ func (i *ImagePopUp) Show() { canvSize.Width/2, canvSize.Height/2, )) - anim := fyne.NewAnimation(canvas.DurationShort, func(f float32) { + anim := fyne.NewAnimation(myTheme.AnimationDurationShort, func(f float32) { if f == 1 { i.Content.(*canvas.Image).ScaleMode = canvas.ImageScaleSmooth }