added multilang and settings
This commit is contained in:
@@ -5,18 +5,6 @@ using CursorLang.Views;
|
||||
|
||||
namespace CursorLang.Services;
|
||||
|
||||
/// <summary>
|
||||
/// Настройки подсказки у курсора.
|
||||
/// </summary>
|
||||
public sealed class PopupOptions
|
||||
{
|
||||
/// <summary>Сколько подсказка держится на экране после последнего переключения.</summary>
|
||||
public TimeSpan Duration { get; init; } = TimeSpan.FromMilliseconds(500);
|
||||
|
||||
/// <summary>Отступ от курсора в единицах WPF, чтобы подсказка не оказалась под ним.</summary>
|
||||
public double CursorOffset { get; init; } = 16;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Управляет временем жизни подсказки: окно отвечает только за показ,
|
||||
/// а решение «когда показать и когда убрать» принимается здесь.
|
||||
@@ -25,24 +13,27 @@ public sealed class LayoutPopupService : ILayoutPopupService, IDisposable
|
||||
{
|
||||
private readonly LayoutPopupWindow _window;
|
||||
private readonly LayoutPopupViewModel _viewModel;
|
||||
private readonly DispatcherTimer _hideTimer;
|
||||
private readonly AppSettings _settings;
|
||||
private readonly DispatcherTimer _hideTimer = new();
|
||||
|
||||
public LayoutPopupService(LayoutPopupWindow window, LayoutPopupViewModel viewModel, PopupOptions options)
|
||||
public LayoutPopupService(LayoutPopupWindow window, LayoutPopupViewModel viewModel, AppSettings settings)
|
||||
{
|
||||
_window = window;
|
||||
_viewModel = viewModel;
|
||||
_settings = settings;
|
||||
|
||||
_hideTimer = new DispatcherTimer { Interval = options.Duration };
|
||||
_hideTimer.Tick += OnHideTimerTick;
|
||||
}
|
||||
|
||||
public void Show(KeyboardLayout layout)
|
||||
{
|
||||
_viewModel.ShortName = layout.ShortName;
|
||||
_window.ShowAtCursor();
|
||||
_window.ShowPopup();
|
||||
|
||||
// Перезапускаем таймер, чтобы быстрые переключения продлевали показ
|
||||
// Длительность читаем при каждом показе: её меняют в настройках на лету.
|
||||
// Перезапуск таймера заодно продлевает показ при быстрых переключениях
|
||||
_hideTimer.Stop();
|
||||
_hideTimer.Interval = _settings.Duration;
|
||||
_hideTimer.Start();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user