Make UI more flexible by reducing rigid minimum sizes
Fixed window resizing issues for better cross-platform behavior: Convert module video pane: - Reduced video pane minimum from 460x260 to 320x180 - Removed rigid MinSize on outer container (commented out) - Removed rigid MinSize on image element - Set stage minimum to 200x113 (reasonable 16:9 minimum) - Video pane now scales down allowing smaller windows Compare module: - Reduced thumbnail minimum from 320x180 to 240x135 - Reduced metadata scroll minimum from 300x200 to 250x150 - More compact layout allows better window resizing Benefits: - Window can now shrink to fit smaller screens - Better behavior on tiling window managers - More flexible for cross-platform (Windows, macOS, Linux) - Content scales intelligently instead of forcing window size Note: Double-click titlebar maximize is a Fyne framework limitation. Maximize via window controls or OS shortcuts (F11, Super+Up) works.
This commit is contained in:
parent
9a63c62deb
commit
d3ced0456a
32
main.go
32
main.go
|
|
@ -1783,7 +1783,9 @@ func buildConvertView(state *appState, src *videoSource) fyne.CanvasObject {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make panel sizes responsive with modest minimums to avoid forcing the window beyond the screen
|
// Make panel sizes responsive with modest minimums to avoid forcing the window beyond the screen
|
||||||
videoPanel := buildVideoPane(state, fyne.NewSize(460, 260), src, updateCover)
|
// Use a smaller minimum size to allow window to be more flexible
|
||||||
|
// The video pane will scale to fit available space
|
||||||
|
videoPanel := buildVideoPane(state, fyne.NewSize(320, 180), src, updateCover)
|
||||||
metaPanel, metaCoverUpdate := buildMetadataPanel(state, src, fyne.NewSize(0, 200))
|
metaPanel, metaCoverUpdate := buildMetadataPanel(state, src, fyne.NewSize(0, 200))
|
||||||
updateMetaCover = metaCoverUpdate
|
updateMetaCover = metaCoverUpdate
|
||||||
|
|
||||||
|
|
@ -2860,7 +2862,8 @@ func buildVideoPane(state *appState, min fyne.Size, src *videoSource, onCover fu
|
||||||
targetWidth := float32(baseWidth)
|
targetWidth := float32(baseWidth)
|
||||||
_ = defaultAspect
|
_ = defaultAspect
|
||||||
targetHeight := float32(min.Height)
|
targetHeight := float32(min.Height)
|
||||||
outer.SetMinSize(fyne.NewSize(targetWidth, targetHeight))
|
// Don't set rigid MinSize - let the outer container be flexible
|
||||||
|
// outer.SetMinSize(fyne.NewSize(targetWidth, targetHeight))
|
||||||
|
|
||||||
if src == nil {
|
if src == nil {
|
||||||
icon := canvas.NewText("▶", utils.MustHex("#4CE870"))
|
icon := canvas.NewText("▶", utils.MustHex("#4CE870"))
|
||||||
|
|
@ -2939,11 +2942,12 @@ func buildVideoPane(state *appState, min fyne.Size, src *videoSource, onCover fu
|
||||||
img = canvas.NewImageFromResource(nil)
|
img = canvas.NewImageFromResource(nil)
|
||||||
}
|
}
|
||||||
img.FillMode = canvas.ImageFillContain
|
img.FillMode = canvas.ImageFillContain
|
||||||
// Let the image grow with the available stage size
|
// Don't set rigid MinSize on image - it will scale to container
|
||||||
img.SetMinSize(fyne.NewSize(targetWidth, targetHeight))
|
// img.SetMinSize(fyne.NewSize(targetWidth, targetHeight))
|
||||||
stage := canvas.NewRectangle(utils.MustHex("#0F1529"))
|
stage := canvas.NewRectangle(utils.MustHex("#0F1529"))
|
||||||
stage.CornerRadius = 6
|
stage.CornerRadius = 6
|
||||||
stage.SetMinSize(fyne.NewSize(targetWidth, targetHeight))
|
// Set a reasonable minimum but allow scaling down
|
||||||
|
stage.SetMinSize(fyne.NewSize(200, 113)) // 16:9 aspect at reasonable minimum
|
||||||
// Overlay the image directly so it fills the stage while preserving aspect.
|
// Overlay the image directly so it fills the stage while preserving aspect.
|
||||||
videoStage := container.NewMax(stage, img)
|
videoStage := container.NewMax(stage, img)
|
||||||
|
|
||||||
|
|
@ -5352,21 +5356,21 @@ func buildCompareView(state *appState) fyne.CanvasObject {
|
||||||
file2Label := widget.NewLabel("File 2: Not loaded")
|
file2Label := widget.NewLabel("File 2: Not loaded")
|
||||||
file2Label.TextStyle = fyne.TextStyle{Bold: true}
|
file2Label.TextStyle = fyne.TextStyle{Bold: true}
|
||||||
|
|
||||||
// Thumbnail images
|
// Thumbnail images - use smaller minimum for better flexibility
|
||||||
file1Thumbnail := canvas.NewImageFromImage(nil)
|
file1Thumbnail := canvas.NewImageFromImage(nil)
|
||||||
file1Thumbnail.FillMode = canvas.ImageFillContain
|
file1Thumbnail.FillMode = canvas.ImageFillContain
|
||||||
file1Thumbnail.SetMinSize(fyne.NewSize(320, 180))
|
file1Thumbnail.SetMinSize(fyne.NewSize(240, 135))
|
||||||
|
|
||||||
file2Thumbnail := canvas.NewImageFromImage(nil)
|
file2Thumbnail := canvas.NewImageFromImage(nil)
|
||||||
file2Thumbnail.FillMode = canvas.ImageFillContain
|
file2Thumbnail.FillMode = canvas.ImageFillContain
|
||||||
file2Thumbnail.SetMinSize(fyne.NewSize(320, 180))
|
file2Thumbnail.SetMinSize(fyne.NewSize(240, 135))
|
||||||
|
|
||||||
// Placeholder backgrounds
|
// Placeholder backgrounds
|
||||||
file1ThumbBg := canvas.NewRectangle(utils.MustHex("#0F1529"))
|
file1ThumbBg := canvas.NewRectangle(utils.MustHex("#0F1529"))
|
||||||
file1ThumbBg.SetMinSize(fyne.NewSize(320, 180))
|
file1ThumbBg.SetMinSize(fyne.NewSize(240, 135))
|
||||||
|
|
||||||
file2ThumbBg := canvas.NewRectangle(utils.MustHex("#0F1529"))
|
file2ThumbBg := canvas.NewRectangle(utils.MustHex("#0F1529"))
|
||||||
file2ThumbBg.SetMinSize(fyne.NewSize(320, 180))
|
file2ThumbBg.SetMinSize(fyne.NewSize(240, 135))
|
||||||
|
|
||||||
// Info labels
|
// Info labels
|
||||||
file1Info := widget.NewLabel("No file loaded")
|
file1Info := widget.NewLabel("No file loaded")
|
||||||
|
|
@ -5559,13 +5563,13 @@ func buildCompareView(state *appState) fyne.CanvasObject {
|
||||||
file2SelectBtn,
|
file2SelectBtn,
|
||||||
)
|
)
|
||||||
|
|
||||||
// Scrollable metadata area for file 1
|
// Scrollable metadata area for file 1 - use smaller minimum
|
||||||
file1InfoScroll := container.NewVScroll(file1Info)
|
file1InfoScroll := container.NewVScroll(file1Info)
|
||||||
file1InfoScroll.SetMinSize(fyne.NewSize(300, 200))
|
file1InfoScroll.SetMinSize(fyne.NewSize(250, 150))
|
||||||
|
|
||||||
// Scrollable metadata area for file 2
|
// Scrollable metadata area for file 2 - use smaller minimum
|
||||||
file2InfoScroll := container.NewVScroll(file2Info)
|
file2InfoScroll := container.NewVScroll(file2Info)
|
||||||
file2InfoScroll.SetMinSize(fyne.NewSize(300, 200))
|
file2InfoScroll.SetMinSize(fyne.NewSize(250, 150))
|
||||||
|
|
||||||
// File 1 column: header, thumb, metadata (using Border to make metadata expand)
|
// File 1 column: header, thumb, metadata (using Border to make metadata expand)
|
||||||
file1Column := container.NewBorder(
|
file1Column := container.NewBorder(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user