Rework about dialog layout to match mockup

This commit is contained in:
Stu Leak 2026-01-04 02:59:04 -05:00
parent 3761d48d46
commit 329be6e968

69
main.go
View File

@ -13,7 +13,6 @@ import (
"image/png" "image/png"
"io" "io"
"math" "math"
"net/url"
"os" "os"
"os/exec" "os/exec"
"path/filepath" "path/filepath"
@ -506,55 +505,69 @@ func (s *appState) showAbout() {
dev := "Leak Technologies" dev := "Leak Technologies"
logsPath := getLogsDir() logsPath := getLogsDir()
title := canvas.NewText("About / Support", textColor)
title.TextSize = 20
versionText := widget.NewLabel(version) versionText := widget.NewLabel(version)
devText := widget.NewLabel(fmt.Sprintf("Developer: %s", dev)) devText := widget.NewLabel(fmt.Sprintf("Developer: %s", dev))
var ltLogo fyne.CanvasObject loadLogo := func(name string, size float32) fyne.CanvasObject {
logoCandidates := []string{filepath.Join("assets", "logo", "LT_Logo-26.png")} candidates := []string{filepath.Join("assets", "logo", name)}
if exe, err := os.Executable(); err == nil { if exe, err := os.Executable(); err == nil {
dir := filepath.Dir(exe) dir := filepath.Dir(exe)
logoCandidates = append(logoCandidates, filepath.Join(dir, "assets", "logo", "LT_Logo-26.png")) candidates = append(candidates, filepath.Join(dir, "assets", "logo", name))
}
for _, p := range logoCandidates {
if _, err := os.Stat(p); err == nil {
img := canvas.NewImageFromFile(p)
img.FillMode = canvas.ImageFillContain
img.SetMinSize(fyne.NewSize(96, 96))
ltLogo = img
break
} }
for _, p := range candidates {
if _, err := os.Stat(p); err == nil {
img := canvas.NewImageFromFile(p)
img.FillMode = canvas.ImageFillContain
img.SetMinSize(fyne.NewSize(size, size))
return img
}
}
return nil
} }
logsLink := widget.NewButton("Open Logs Folder", func() { vtLogo := loadLogo("VT_Icon.png", 72)
ltLogo := loadLogo("LT_Logo-26.png", 96)
logsLink := widget.NewButton("Logs Folder", func() {
if err := openFolder(logsPath); err != nil { if err := openFolder(logsPath); err != nil {
dialog.ShowError(fmt.Errorf("failed to open logs folder: %w", err), s.window) dialog.ShowError(fmt.Errorf("failed to open logs folder: %w", err), s.window)
} }
}) })
logsLink.Importance = widget.LowImportance logsLink.Importance = widget.LowImportance
donateURL, _ := url.Parse("https://leaktechnologies.dev/support")
donateLink := widget.NewHyperlink("Support development", donateURL)
feedbackLabel := widget.NewLabel("Feedback: use the Logs button on the main menu to view logs; send issues with attached logs.") feedbackLabel := widget.NewLabel("Feedback: use the Logs button on the main menu to view logs; send issues with attached logs.")
feedbackLabel.Wrapping = fyne.TextWrapWord feedbackLabel.Wrapping = fyne.TextWrapWord
mainContent := container.NewVBox( mainContent := container.NewVBox(
versionText, versionText,
devText, devText,
logsLink, widget.NewLabel(""),
donateLink, widget.NewLabel("Support Development"),
feedbackLabel, feedbackLabel,
) )
scrollContent := container.NewVScroll(mainContent)
scrollContent.SetMinSize(fyne.NewSize(420, 220))
var body fyne.CanvasObject logoColumn := container.NewVBox()
if ltLogo != nil { if vtLogo != nil {
topRow := container.NewHBox(layout.NewSpacer(), ltLogo) logoColumn.Add(vtLogo)
body = container.NewBorder(topRow, nil, nil, nil, scrollContent)
} else {
body = scrollContent
} }
if ltLogo != nil {
logoColumn.Add(ltLogo)
}
logoColumn.Add(layout.NewSpacer())
logoColumn.Add(logsLink)
body := container.NewBorder(
container.NewHBox(title),
nil,
nil,
logoColumn,
mainContent,
)
body = container.NewPadded(body)
body.SetMinSize(fyne.NewSize(560, 280))
dialog.ShowCustom("About & Support", "Close", body, s.window) dialog.ShowCustom("About & Support", "Close", body, s.window)
} }