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
|
||||
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))
|
||||
updateMetaCover = metaCoverUpdate
|
||||
|
||||
|
|
@ -2860,7 +2862,8 @@ func buildVideoPane(state *appState, min fyne.Size, src *videoSource, onCover fu
|
|||
targetWidth := float32(baseWidth)
|
||||
_ = defaultAspect
|
||||
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 {
|
||||
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.FillMode = canvas.ImageFillContain
|
||||
// Let the image grow with the available stage size
|
||||
img.SetMinSize(fyne.NewSize(targetWidth, targetHeight))
|
||||
// Don't set rigid MinSize on image - it will scale to container
|
||||
// img.SetMinSize(fyne.NewSize(targetWidth, targetHeight))
|
||||
stage := canvas.NewRectangle(utils.MustHex("#0F1529"))
|
||||
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.
|
||||
videoStage := container.NewMax(stage, img)
|
||||
|
||||
|
|
@ -5352,21 +5356,21 @@ func buildCompareView(state *appState) fyne.CanvasObject {
|
|||
file2Label := widget.NewLabel("File 2: Not loaded")
|
||||
file2Label.TextStyle = fyne.TextStyle{Bold: true}
|
||||
|
||||
// Thumbnail images
|
||||
// Thumbnail images - use smaller minimum for better flexibility
|
||||
file1Thumbnail := canvas.NewImageFromImage(nil)
|
||||
file1Thumbnail.FillMode = canvas.ImageFillContain
|
||||
file1Thumbnail.SetMinSize(fyne.NewSize(320, 180))
|
||||
file1Thumbnail.SetMinSize(fyne.NewSize(240, 135))
|
||||
|
||||
file2Thumbnail := canvas.NewImageFromImage(nil)
|
||||
file2Thumbnail.FillMode = canvas.ImageFillContain
|
||||
file2Thumbnail.SetMinSize(fyne.NewSize(320, 180))
|
||||
file2Thumbnail.SetMinSize(fyne.NewSize(240, 135))
|
||||
|
||||
// Placeholder backgrounds
|
||||
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.SetMinSize(fyne.NewSize(320, 180))
|
||||
file2ThumbBg.SetMinSize(fyne.NewSize(240, 135))
|
||||
|
||||
// Info labels
|
||||
file1Info := widget.NewLabel("No file loaded")
|
||||
|
|
@ -5559,13 +5563,13 @@ func buildCompareView(state *appState) fyne.CanvasObject {
|
|||
file2SelectBtn,
|
||||
)
|
||||
|
||||
// Scrollable metadata area for file 1
|
||||
// Scrollable metadata area for file 1 - use smaller minimum
|
||||
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.SetMinSize(fyne.NewSize(300, 200))
|
||||
file2InfoScroll.SetMinSize(fyne.NewSize(250, 150))
|
||||
|
||||
// File 1 column: header, thumb, metadata (using Border to make metadata expand)
|
||||
file1Column := container.NewBorder(
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user