ThemeService.cs
1 // Copyright (c) Microsoft Corporation 2 // The Microsoft Corporation licenses this file to you under the MIT license. 3 // See the LICENSE file in the project root for more information. 4 5 using System; 6 7 using Microsoft.PowerToys.Settings.UI.Library; 8 using Microsoft.PowerToys.Settings.UI.Library.Interfaces; 9 using Microsoft.UI.Xaml; 10 11 namespace Microsoft.PowerToys.Settings.UI.Services 12 { 13 public class ThemeService 14 { 15 private readonly ISettingsRepository<GeneralSettings> _generalSettingsRepository; 16 17 public event EventHandler<ElementTheme> ThemeChanged; 18 19 public ElementTheme Theme { get; private set; } = ElementTheme.Default; 20 21 public ThemeService(ISettingsRepository<GeneralSettings> generalSettingsRepository) 22 { 23 _generalSettingsRepository = generalSettingsRepository; 24 Theme = GetTheme(); 25 } 26 27 public void ApplyTheme() 28 { 29 Theme = GetTheme(); 30 ThemeChanged?.Invoke(null, Theme); 31 } 32 33 private ElementTheme GetTheme() 34 { 35 switch (_generalSettingsRepository.SettingsConfig.Theme.ToUpperInvariant()) 36 { 37 case "LIGHT": 38 return ElementTheme.Light; 39 case "DARK": 40 return ElementTheme.Dark; 41 case "SYSTEM": 42 return ElementTheme.Default; 43 default: 44 ManagedCommon.Logger.LogError($"Unexpected theme name: {_generalSettingsRepository.SettingsConfig.Theme}"); 45 return ElementTheme.Default; 46 } 47 } 48 } 49 }