Fix #625: Allow customization of grid card size

This commit is contained in:
Drew Weymouth
2025-05-28 09:21:24 -07:00
parent af1ae4641e
commit 0fd8b4621b
7 changed files with 49 additions and 4 deletions
+11
View File
@@ -519,6 +519,16 @@ func (s *SettingsDialog) createAppearanceTab(window fyne.Window) *container.TabI
})
disableDPI.Checked = s.config.Application.DisableDPIDetection
gridCardSize := widget.NewSlider(150, 350)
gridCardSize.SetValue(float64(s.config.GridView.CardSize))
gridCardSize.Step = 10
gridCardSize.OnChanged = func(f float64) {
s.config.GridView.CardSize = float32(f)
if s.OnPageNeedsRefresh != nil {
s.OnPageNeedsRefresh()
}
}
return container.NewTabItem(lang.L("Appearance"), container.NewVBox(
util.NewHSpace(0), // insert a theme.Padding amount of space at top
container.NewBorder(nil, nil, widget.NewLabel(lang.L("Theme")), /*left*/
@@ -527,6 +537,7 @@ func (s *SettingsDialog) createAppearanceTab(window fyne.Window) *container.TabI
),
widget.NewRichText(&widget.TextSegment{Text: lang.L("UI Scaling"), Style: util.BoldRichTextStyle}),
uiScaleRadio,
container.NewBorder(nil, nil, widget.NewLabel(lang.L("Grid card size")), nil, gridCardSize),
disableDPI,
s.newSectionSeparator(),
widget.NewRichText(&widget.TextSegment{Text: lang.L("Application font"), Style: util.BoldRichTextStyle}),
+3
View File
@@ -9,6 +9,7 @@ import (
"fyne.io/fyne/v2/lang"
"github.com/dweymouth/supersonic/backend"
"github.com/dweymouth/supersonic/backend/mediaprovider"
"github.com/dweymouth/supersonic/sharedutil"
myTheme "github.com/dweymouth/supersonic/ui/theme"
@@ -282,6 +283,7 @@ func (g *GridView) createGridWrap() {
// update func
func(itemID widget.GridWrapItemID, obj fyne.CanvasObject) {
ac := obj.(*GridViewItem)
ac.SetSize(backend.AppInstance().Config.GridView.CardSize)
g.doUpdateItemCard(int(itemID), ac)
},
)
@@ -289,6 +291,7 @@ func (g *GridView) createGridWrap() {
func (g *GridView) createNewItemCard() fyne.CanvasObject {
card := NewGridViewItem(g.Placeholder)
card.SetSize(backend.AppInstance().Config.GridView.CardSize)
card.ItemIndex = -1
card.ImgLoader = util.NewThumbnailLoader(g.imageFetcher, card.Cover.SetImage)
card.ImgLoader.OnBeforeLoad = func() { card.Cover.SetImage(nil) }
+5
View File
@@ -517,6 +517,10 @@ func (g *GridViewItem) Update(model *GridViewItemModel) {
}
}
func (g *GridViewItem) SetSize(sideDim float32) {
g.Cover.Im.SetMinSize(fyne.NewSquareSize(sideDim))
}
func (g *GridViewItem) Refresh() {
if g.focused {
g.focusRect.Show()
@@ -531,6 +535,7 @@ func (g *GridViewItem) Refresh() {
g.secondaryText.Suffix = ""
g.secondaryText.Refresh()
}
canvas.Refresh(g)
}
func (g *GridViewItem) ItemID() string {
+14 -4
View File
@@ -24,18 +24,18 @@ type ImagePlaceholder struct {
image image.Image
iconImage *canvas.Image
border *myTheme.ThemedRectangle
minSize float32
minSize fyne.Size
OnTapped func(*fyne.PointEvent)
OnTappedSecondary func(*fyne.PointEvent)
}
func NewImagePlaceholder(centerIcon fyne.Resource, minSize float32) *ImagePlaceholder {
i := &ImagePlaceholder{minSize: minSize, PlaceholderIcon: centerIcon}
i := &ImagePlaceholder{minSize: fyne.NewSquareSize(minSize), PlaceholderIcon: centerIcon}
i.ExtendBaseWidget(i)
i.iconImage = canvas.NewImageFromResource(centerIcon)
i.iconImage.FillMode = canvas.ImageFillContain
i.iconImage.SetMinSize(fyne.NewSize(minSize/4, minSize/4))
i.iconImage.SetMinSize(fyne.NewSquareSize(minSize / 4))
i.imageDisp = NewTappableImage(i.onTapped)
i.imageDisp.OnTappedSecondary = i.onTappedSecondary
i.imageDisp.FillMode = canvas.ImageFillContain
@@ -88,8 +88,18 @@ func (i *ImagePlaceholder) onTappedSecondary(e *fyne.PointEvent) {
}
}
func (i *ImagePlaceholder) SetMinSize(size fyne.Size) {
if i.minSize == size {
return
}
i.minSize = size
d := fyne.Min(i.minSize.Width, i.minSize.Height)
i.iconImage.SetMinSize(fyne.NewSquareSize(d / 4))
}
func (i *ImagePlaceholder) MinSize() fyne.Size {
return fyne.NewSize(i.minSize, i.minSize)
return i.minSize
}
func (i *ImagePlaceholder) Refresh() {