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