mirror of
https://github.com/Blinue/Magpie.git
synced 2026-06-24 02:04:10 +00:00
feat: 实现定时器功能
This commit is contained in:
parent
802236c523
commit
3674afa6d1
5 changed files with 33 additions and 30 deletions
|
|
@ -82,22 +82,22 @@
|
|||
VerticalAlignment="Center"
|
||||
Text="{x:Bind ViewModel.TimerLabelText, Mode=OneWay}" />
|
||||
</Grid>
|
||||
<Button Click="{x:Bind ViewModel.ToggleTimer}"
|
||||
<Button Click="{x:Bind ViewModel.ToggleTimerFullscreen}"
|
||||
IsEnabled="{x:Bind ViewModel.IsNotRunning, Mode=OneWay}">
|
||||
<local:SimpleStackPanel Orientation="Horizontal"
|
||||
Spacing="8">
|
||||
<FontIcon FontSize="{StaticResource StandardIconSize}"
|
||||
Glyph="" />
|
||||
<TextBlock Text="{x:Bind ViewModel.TimerFullscreenButtonText, Mode=OneWay}" />
|
||||
<TextBlock Text="{x:Bind ViewModel.TimerButtonText(x:False), Mode=OneWay}" />
|
||||
</local:SimpleStackPanel>
|
||||
</Button>
|
||||
<Button Click="{x:Bind ViewModel.ToggleTimer}"
|
||||
<Button Click="{x:Bind ViewModel.ToggleTimerWindowed}"
|
||||
IsEnabled="{x:Bind ViewModel.IsNotRunning, Mode=OneWay}">
|
||||
<local:SimpleStackPanel Orientation="Horizontal"
|
||||
Spacing="8">
|
||||
<FontIcon FontSize="{StaticResource StandardIconSize}"
|
||||
Glyph="" />
|
||||
<TextBlock Text="{x:Bind ViewModel.TimerWindowedButtonText, Mode=OneWay}" />
|
||||
<TextBlock Text="{x:Bind ViewModel.TimerButtonText(x:True), Mode=OneWay}" />
|
||||
</local:SimpleStackPanel>
|
||||
</Button>
|
||||
</local:SimpleStackPanel>
|
||||
|
|
|
|||
|
|
@ -66,20 +66,10 @@ hstring HomeViewModel::TimerLabelText() const noexcept {
|
|||
return to_hstring((int)std::ceil(ScalingService.SecondsLeft()));
|
||||
}
|
||||
|
||||
hstring HomeViewModel::TimerFullscreenButtonText() const noexcept {
|
||||
hstring HomeViewModel::TimerButtonText(bool windowedMode) const noexcept {
|
||||
ResourceLoader resourceLoader =
|
||||
ResourceLoader::GetForCurrentView(CommonSharedConstants::APP_RESOURCE_MAP_ID);
|
||||
if (ScalingService::Get().IsTimerOn(false)) {
|
||||
return resourceLoader.GetString(L"Home_Activation_Timer_Cancel");
|
||||
} else {
|
||||
return resourceLoader.GetString(L"Home_Activation_Timer_Start");
|
||||
}
|
||||
}
|
||||
|
||||
hstring HomeViewModel::TimerWindowedButtonText() const noexcept {
|
||||
ResourceLoader resourceLoader =
|
||||
ResourceLoader::GetForCurrentView(CommonSharedConstants::APP_RESOURCE_MAP_ID);
|
||||
if (ScalingService::Get().IsTimerOn(true)) {
|
||||
if (ScalingService::Get().IsTimerOn(windowedMode)) {
|
||||
return resourceLoader.GetString(L"Home_Activation_Timer_Cancel");
|
||||
} else {
|
||||
return resourceLoader.GetString(L"Home_Activation_Timer_Start");
|
||||
|
|
@ -90,13 +80,12 @@ bool HomeViewModel::IsNotRunning() const noexcept {
|
|||
return !ScalingService::Get().IsScaling();
|
||||
}
|
||||
|
||||
void HomeViewModel::ToggleTimer() const noexcept {
|
||||
ScalingService& scalingService = ScalingService::Get();
|
||||
if (scalingService.IsTimerOn()) {
|
||||
scalingService.StopTimer();
|
||||
} else {
|
||||
scalingService.StartTimer(false);
|
||||
}
|
||||
void HomeViewModel::ToggleTimerFullscreen() const noexcept {
|
||||
_ToggleTimer(false);
|
||||
}
|
||||
|
||||
void HomeViewModel::ToggleTimerWindowed() const noexcept {
|
||||
_ToggleTimer(true);
|
||||
}
|
||||
|
||||
uint32_t HomeViewModel::Delay() const noexcept {
|
||||
|
|
@ -633,8 +622,7 @@ void HomeViewModel::_ScalingService_IsTimerOnChanged(bool value, bool) {
|
|||
|
||||
RaisePropertyChanged(L"TimerProgressRingValue");
|
||||
RaisePropertyChanged(L"TimerLabelText");
|
||||
RaisePropertyChanged(L"TimerWindowedButtonText");
|
||||
RaisePropertyChanged(L"TimerFullscreenButtonText");
|
||||
RaisePropertyChanged(L"TimerButtonText");
|
||||
RaisePropertyChanged(L"IsTimerOn");
|
||||
}
|
||||
|
||||
|
|
@ -647,4 +635,13 @@ void HomeViewModel::_ScalingService_IsScalingChanged(bool) {
|
|||
RaisePropertyChanged(L"IsNotRunning");
|
||||
}
|
||||
|
||||
void HomeViewModel::_ToggleTimer(bool windowedMode) const noexcept {
|
||||
ScalingService& scalingService = ScalingService::Get();
|
||||
if (scalingService.IsTimerOn(windowedMode)) {
|
||||
scalingService.StopTimer();
|
||||
} else {
|
||||
scalingService.StartTimer(windowedMode);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,13 +15,17 @@ struct HomeViewModel : HomeViewModelT<HomeViewModel>, wil::notify_property_chang
|
|||
|
||||
hstring TimerLabelText() const noexcept;
|
||||
|
||||
hstring TimerButtonText(bool windowedMode) const noexcept;
|
||||
|
||||
hstring TimerFullscreenButtonText() const noexcept;
|
||||
|
||||
hstring TimerWindowedButtonText() const noexcept;
|
||||
|
||||
bool IsNotRunning() const noexcept;
|
||||
|
||||
void ToggleTimer() const noexcept;
|
||||
void ToggleTimerFullscreen() const noexcept;
|
||||
|
||||
void ToggleTimerWindowed() const noexcept;
|
||||
|
||||
uint32_t Delay() const noexcept;
|
||||
void Delay(uint32_t value);
|
||||
|
|
@ -124,6 +128,8 @@ private:
|
|||
|
||||
void _ScalingService_IsScalingChanged(bool);
|
||||
|
||||
void _ToggleTimer(bool windowedMode) const noexcept;
|
||||
|
||||
::Magpie::Event<bool, bool>::EventRevoker _isTimerOnRevoker;
|
||||
::Magpie::Event<double>::EventRevoker _timerTickRevoker;
|
||||
::Magpie::Event<bool>::EventRevoker _isScalingChangedRevoker;
|
||||
|
|
|
|||
|
|
@ -11,12 +11,12 @@ namespace Magpie {
|
|||
Boolean IsTimerOn { get; };
|
||||
Double TimerProgressRingValue { get; };
|
||||
String TimerLabelText { get; };
|
||||
String TimerFullscreenButtonText { get; };
|
||||
String TimerWindowedButtonText { get; };
|
||||
Boolean IsNotRunning { get; };
|
||||
UInt32 Delay;
|
||||
|
||||
void ToggleTimer();
|
||||
String TimerButtonText(Boolean windowedMode);
|
||||
void ToggleTimerFullscreen();
|
||||
void ToggleTimerWindowed();
|
||||
|
||||
String InitialToolbarStateDescription { get; };
|
||||
Int32 FullscreenInitialToolbarState;
|
||||
|
|
|
|||
|
|
@ -142,7 +142,7 @@ void ScalingService::_CountDownTimer_Tick(winrt::IInspectable const&, winrt::IIn
|
|||
// 剩余时间在 10 ms 以内计时结束
|
||||
if (timeLeft < 0.01) {
|
||||
StopTimer();
|
||||
_ScaleForegroundWindow(false);
|
||||
_ScaleForegroundWindow(_isCurCountdownWindowedMode);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue