Major improvements to UnifiedPlayer: 1. GetFrameImage() now works when paused for responsive UI updates 2. Play() method properly starts FFmpeg process 3. Frame display loop runs continuously for smooth video display 4. Disabled audio temporarily to fix video playback fundamentals 5. Simplified FFmpeg command to focus on video stream only Player now: - Generates video frames correctly - Shows video when paused - Has responsive progress tracking - Starts playback properly Next steps: Re-enable audio playback once video is stable
108 lines
3.9 KiB
Go
108 lines
3.9 KiB
Go
package dialog
|
|
|
|
import (
|
|
"fyne.io/fyne/v2"
|
|
"fyne.io/fyne/v2/container"
|
|
"fyne.io/fyne/v2/theme"
|
|
"fyne.io/fyne/v2/widget"
|
|
)
|
|
|
|
var _ Dialog = (*CustomDialog)(nil)
|
|
|
|
// CustomDialog implements a custom dialog.
|
|
//
|
|
// Since: 2.4
|
|
type CustomDialog struct {
|
|
*dialog
|
|
}
|
|
|
|
// NewCustom creates and returns a dialog over the specified application using custom
|
|
// content. The button will have the dismiss text set.
|
|
// The MinSize() of the CanvasObject passed will be used to set the size of the window.
|
|
func NewCustom(title, dismiss string, content fyne.CanvasObject, parent fyne.Window) *CustomDialog {
|
|
d := &dialog{content: content, title: title, parent: parent}
|
|
|
|
d.dismiss = &widget.Button{Text: dismiss, OnTapped: d.Hide}
|
|
d.create(container.NewGridWithColumns(1, d.dismiss))
|
|
|
|
return &CustomDialog{dialog: d}
|
|
}
|
|
|
|
// ShowCustom shows a dialog over the specified application using custom
|
|
// content. The button will have the dismiss text set.
|
|
// The MinSize() of the CanvasObject passed will be used to set the size of the window.
|
|
func ShowCustom(title, dismiss string, content fyne.CanvasObject, parent fyne.Window) {
|
|
NewCustom(title, dismiss, content, parent).Show()
|
|
}
|
|
|
|
// NewCustomWithoutButtons creates a new custom dialog without any buttons.
|
|
// The MinSize() of the CanvasObject passed will be used to set the size of the window.
|
|
//
|
|
// Since: 2.4
|
|
func NewCustomWithoutButtons(title string, content fyne.CanvasObject, parent fyne.Window) *CustomDialog {
|
|
d := &dialog{content: content, title: title, parent: parent}
|
|
d.create(container.NewGridWithColumns(1))
|
|
|
|
return &CustomDialog{dialog: d}
|
|
}
|
|
|
|
// SetButtons sets the row of buttons at the bottom of the dialog.
|
|
// Passing an empty slice will result in a dialog with no buttons.
|
|
//
|
|
// Since: 2.4
|
|
func (d *CustomDialog) SetButtons(buttons []fyne.CanvasObject) {
|
|
d.dismiss = nil // New button row invalidates possible dismiss button.
|
|
d.setButtons(container.NewGridWithRows(1, buttons...))
|
|
}
|
|
|
|
// SetIcon sets an icon to be shown in the top right of the dialog.
|
|
// Passing a nil resource will remove the icon from the dialog.
|
|
//
|
|
// Since: 2.6
|
|
func (d *CustomDialog) SetIcon(icon fyne.Resource) {
|
|
d.setIcon(icon)
|
|
}
|
|
|
|
// ShowCustomWithoutButtons shows a dialog, without buttons, over the specified application
|
|
// using custom content.
|
|
// The MinSize() of the CanvasObject passed will be used to set the size of the window.
|
|
//
|
|
// Since: 2.4
|
|
func ShowCustomWithoutButtons(title string, content fyne.CanvasObject, parent fyne.Window) {
|
|
NewCustomWithoutButtons(title, content, parent).Show()
|
|
}
|
|
|
|
// NewCustomConfirm creates and returns a dialog over the specified application using
|
|
// custom content. The cancel button will have the dismiss text set and the "OK" will
|
|
// use the confirm text. The response callback is called on user action.
|
|
// The MinSize() of the CanvasObject passed will be used to set the size of the window.
|
|
func NewCustomConfirm(title, confirm, dismiss string, content fyne.CanvasObject,
|
|
callback func(bool), parent fyne.Window,
|
|
) *ConfirmDialog {
|
|
d := &dialog{content: content, title: title, parent: parent, callback: callback}
|
|
|
|
d.dismiss = &widget.Button{
|
|
Text: dismiss, Icon: theme.CancelIcon(),
|
|
OnTapped: d.Hide,
|
|
}
|
|
ok := &widget.Button{
|
|
Text: confirm, Icon: theme.ConfirmIcon(), Importance: widget.HighImportance,
|
|
OnTapped: func() {
|
|
d.hideWithResponse(true)
|
|
},
|
|
}
|
|
d.create(container.NewGridWithColumns(2, d.dismiss, ok))
|
|
|
|
return &ConfirmDialog{dialog: d, confirm: ok}
|
|
}
|
|
|
|
// ShowCustomConfirm shows a dialog over the specified application using custom
|
|
// content. The cancel button will have the dismiss text set and the "OK" will use
|
|
// the confirm text. The response callback is called on user action.
|
|
// The MinSize() of the CanvasObject passed will be used to set the size of the window.
|
|
func ShowCustomConfirm(title, confirm, dismiss string, content fyne.CanvasObject,
|
|
callback func(bool), parent fyne.Window,
|
|
) {
|
|
NewCustomConfirm(title, confirm, dismiss, content, callback, parent).Show()
|
|
}
|