52 lines
1.6 KiB
Go
52 lines
1.6 KiB
Go
package app
|
|
|
|
import (
|
|
"fyne.io/fyne/v2"
|
|
"fyne.io/fyne/v2/internal/cache"
|
|
)
|
|
|
|
// ApplyThemeTo ensures that the specified canvasobject and all widgets and themeable objects will
|
|
// be updated for the current theme.
|
|
func ApplyThemeTo(content fyne.CanvasObject, canv fyne.Canvas) {
|
|
if content == nil {
|
|
return
|
|
}
|
|
|
|
switch o := content.(type) {
|
|
case fyne.Widget:
|
|
for _, co := range cache.Renderer(o).Objects() {
|
|
ApplyThemeTo(co, canv)
|
|
}
|
|
cache.Renderer(o).Layout(content.Size()) // theme can cause sizing changes
|
|
case *fyne.Container:
|
|
for _, co := range o.Objects {
|
|
ApplyThemeTo(co, canv)
|
|
}
|
|
if l := o.Layout; l != nil {
|
|
l.Layout(o.Objects, o.Size()) // theme can cause sizing changes
|
|
}
|
|
}
|
|
content.Refresh()
|
|
}
|
|
|
|
// ApplySettings ensures that all widgets and themeable objects in an application will be updated for the current theme.
|
|
// It also checks that scale changes are reflected if required
|
|
func ApplySettings(set fyne.Settings, app fyne.App) {
|
|
ApplySettingsWithCallback(set, app, nil)
|
|
}
|
|
|
|
// ApplySettingsWithCallback ensures that all widgets and themeable objects in an application will be updated for the current theme.
|
|
// It also checks that scale changes are reflected if required. Also it will call `onEveryWindow` on every window
|
|
// interaction
|
|
func ApplySettingsWithCallback(set fyne.Settings, app fyne.App, onEveryWindow func(w fyne.Window)) {
|
|
for _, window := range app.Driver().AllWindows() {
|
|
ApplyThemeTo(window.Content(), window.Canvas())
|
|
for _, overlay := range window.Canvas().Overlays().List() {
|
|
ApplyThemeTo(overlay, window.Canvas())
|
|
}
|
|
if onEveryWindow != nil {
|
|
onEveryWindow(window)
|
|
}
|
|
}
|
|
}
|