using System.Text.Json.Serialization; using System.Windows.Media; using CommunityToolkit.Mvvm.ComponentModel; namespace CursorLang.Models; /// /// Настройки приложения. Все изменения применяются на лету: подсказка и окно /// настроек привязаны к этим свойствам, а SettingsService сохраняет их на диск. /// public sealed partial class AppSettings : ObservableObject { /// Язык интерфейса в виде кода культуры: «ru», «en». [ObservableProperty] private string _language = "en"; [ObservableProperty] private PopupPlacementMode _placementMode = PopupPlacementMode.AtCursor; [ObservableProperty] private CursorCorner _cursorCorner = CursorCorner.BottomRight; /// Отступ от курсора в единицах WPF. [ObservableProperty] private double _cursorOffset = 16; [ObservableProperty] private ScreenPosition _screenPosition = ScreenPosition.BottomRight; /// Отступ от края монитора в единицах WPF. [ObservableProperty] private double _screenMargin = 24; [ObservableProperty] private double _fontSize = 20; /// Непрозрачность подсказки: 1.0 — полностью непрозрачная. [ObservableProperty] private double _opacity = 0.9; /// Сколько подсказка держится на экране, в миллисекундах. [ObservableProperty] private double _durationMilliseconds = 500; [ObservableProperty] private Color _backgroundColor = Color.FromRgb(0x20, 0x20, 0x20); [JsonIgnore] public TimeSpan Duration => TimeSpan.FromMilliseconds(DurationMilliseconds); }