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) }