From 662ebc209c2d584bf4a682737b00d6d053afdcf2 Mon Sep 17 00:00:00 2001 From: Stu Leak Date: Wed, 17 Dec 2025 06:06:49 -0500 Subject: [PATCH] Place convert action bar in tinted footer --- main.go | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/main.go b/main.go index 58ef08c..7c6d074 100644 --- a/main.go +++ b/main.go @@ -114,9 +114,16 @@ func statusStrip(bar *ui.ConversionStatsBar) fyne.CanvasObject { return container.NewMax(bg, content) } -// moduleFooter renders only the dark status strip for consistency across modules. -func moduleFooter(_ color.Color, _ fyne.CanvasObject, bar *ui.ConversionStatsBar) fyne.CanvasObject { - return statusStrip(bar) +// moduleFooter stacks a dark status strip above a tinted action/footer band. +// If content is nil, a spacer is used for consistent height/color. +func moduleFooter(tint color.Color, content fyne.CanvasObject, bar *ui.ConversionStatsBar) fyne.CanvasObject { + if content == nil { + content = layout.NewSpacer() + } + bg := canvas.NewRectangle(tint) + bg.SetMinSize(fyne.NewSize(0, 44)) + tinted := container.NewMax(bg, container.NewPadded(content)) + return container.NewVBox(statusStrip(bar), tinted) } // resolveTargetAspect resolves an aspect ratio value or source aspect @@ -5914,7 +5921,7 @@ func buildConvertView(state *appState, src *videoSource) fyne.CanvasObject { centerStatus := container.NewHBox(activity, statusLabel) rightControls := container.NewHBox(cancelBtn, cancelQueueBtn, viewLogBtn, addQueueBtn, convertBtn) actionInner := container.NewBorder(nil, nil, leftControls, rightControls, centerStatus) - actionBar := ui.TintedBar(convertColor, actionInner) + actionBar := container.NewHBox(actionInner.Objects...) // Start a UI refresh ticker to update widgets from state while conversion is active // This ensures progress updates even when navigating between modules @@ -5993,16 +6000,17 @@ func buildConvertView(state *appState, src *videoSource) fyne.CanvasObject { scrollableMain := container.NewVScroll(mainContent) - footerContent := container.NewVBox( - snippetConfigRow, - snippetRow, - widget.NewSeparator(), - actionBar, + mainWithFooter := container.NewBorder( + nil, + container.NewVBox( + snippetConfigRow, + snippetRow, + widget.NewSeparator(), + ), + nil, nil, + container.NewMax(scrollableMain), ) - - // Actions/snippets stay above; footer is a single dark status strip - mainWithFooter := container.NewBorder(nil, footerContent, nil, nil, container.NewMax(scrollableMain)) - return container.NewBorder(backBar, statusStrip(state.statsBar), nil, nil, mainWithFooter) + return container.NewBorder(backBar, moduleFooter(convertColor, actionBar, state.statsBar), nil, nil, mainWithFooter) }