From 6792136ff7f18b4ca56749512addd7aab96336a7 Mon Sep 17 00:00:00 2001 From: "Weblate (bot)" Date: Fri, 5 Apr 2024 16:15:32 +0200 Subject: [PATCH 01/17] Translated using Weblate (Russian) (#879) Currently translated at 100.0% (235 of 235 strings) Translation: Magpie/UI Translate-URL: https://hosted.weblate.org/projects/magpie/ui/ru/ Co-authored-by: NightFox --- src/Magpie.App/Resources.language-ru.resw | 29 ++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/Magpie.App/Resources.language-ru.resw b/src/Magpie.App/Resources.language-ru.resw index 476244a33..d397f1d76 100644 --- a/src/Magpie.App/Resources.language-ru.resw +++ b/src/Magpie.App/Resources.language-ru.resw @@ -59,7 +59,7 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - + @@ -796,4 +796,31 @@ Включен режим разработчика. + + Обнаружение повторых кадров + + + Всегда + + + Динамически + + + Включить статистику для динамического обнаружения + + + Динамическое обнаружение + + + Ограничитель частоты кадров + + + Максимальная частота кадров + + + Никогда + + + Частота кадров + \ No newline at end of file From 18bf0e0cb0f14159fee1610114640362f770c7d6 Mon Sep 17 00:00:00 2001 From: Xu <34770031+Blinue@users.noreply.github.com> Date: Sat, 6 Apr 2024 18:25:09 +0800 Subject: [PATCH 02/17] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=AF=B9=E5=85=A8?= =?UTF-8?q?=E5=B1=8F=E7=AA=97=E5=8F=A3=E7=9A=84=E6=94=AF=E6=8C=81=20(#877)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: 修复对全屏窗口的支持 * chore: 重命名 * perf * chore: 添加注释 * chore --- src/Magpie.Core/FrameSourceBase.cpp | 9 +++++++-- src/Shared/Win32Utils.cpp | 8 +++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/Magpie.Core/FrameSourceBase.cpp b/src/Magpie.Core/FrameSourceBase.cpp index 80619344d..8669d2d11 100644 --- a/src/Magpie.Core/FrameSourceBase.cpp +++ b/src/Magpie.Core/FrameSourceBase.cpp @@ -357,7 +357,8 @@ bool FrameSourceBase::_CalcSrcRect() noexcept { } if (Win32Utils::GetWindowShowCmd(hwndSrc) == SW_SHOWMAXIMIZED) { - // 最大化的窗口可能有一部分客户区在屏幕外面 + // 最大化的窗口可能有一部分客户区在屏幕外,但只有屏幕内是有效区域, + // 因此裁剪到屏幕边界 HMONITOR hMon = MonitorFromWindow(hwndSrc, MONITOR_DEFAULTTONEAREST); MONITORINFO mi{ .cbSize = sizeof(mi) }; if (!GetMonitorInfo(hMon, &mi)) { @@ -365,7 +366,7 @@ bool FrameSourceBase::_CalcSrcRect() noexcept { return false; } - IntersectRect(&_srcRect, &_srcRect, &mi.rcWork); + IntersectRect(&_srcRect, &_srcRect, &mi.rcMonitor); } else { RECT windowRect; if (!GetWindowRect(hwndSrc, &windowRect)) { @@ -472,6 +473,10 @@ bool FrameSourceBase::_GetMapToOriginDPI(HWND hWnd, double& a, double& bx, doubl } bool FrameSourceBase::_CenterWindowIfNecessary(HWND hWnd, const RECT& rcWork) noexcept { + if (Win32Utils::GetWindowShowCmd(hWnd) == SW_SHOWMAXIMIZED) { + return true; + } + RECT srcRect; if (!Win32Utils::GetWindowFrameRect(hWnd, srcRect)) { Logger::Get().Error("GetWindowFrameRect 失败"); diff --git a/src/Shared/Win32Utils.cpp b/src/Shared/Win32Utils.cpp index 34a8df2e2..5feefbd8e 100644 --- a/src/Shared/Win32Utils.cpp +++ b/src/Shared/Win32Utils.cpp @@ -123,7 +123,13 @@ bool Win32Utils::GetWindowFrameRect(HWND hWnd, RECT& rect) noexcept { return false; } - IntersectRect(&rect, &rect, &mi.rcWork); + // 不能裁剪到工作区,因为窗口可以使用 SetWindowPos 以任意尺寸显示“最大化” + // 的窗口,缩放窗口就使用了这个技术以和 Wallpaper Engine 兼容。OS 虽然不 + // 会阻止跨越多个屏幕,但只在一个屏幕上有画面,因此可以认为最大化的窗口只在 + // 一个屏幕上。 + // 注意 Win11 中最大化窗口的 extended frame bounds 包含了下边框,但对我们 + // 没有影响,因为缩放时下边框始终会被裁剪掉。 + IntersectRect(&rect, &rect, &mi.rcMonitor); } // 对于使用 SetWindowRgn 自定义形状的窗口,裁剪到最小矩形边框 From 11ddc5250a1614292eb7f672e248ae6832b283bf Mon Sep 17 00:00:00 2001 From: Xu <34770031+Blinue@users.noreply.github.com> Date: Sat, 6 Apr 2024 23:32:30 +0800 Subject: [PATCH 03/17] =?UTF-8?q?=E7=BC=A9=E6=94=BE=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E4=B8=8D=E5=86=8D=E5=B1=95=E7=A4=BA=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0/=E5=88=A0=E9=99=A4=E5=8A=A8=E7=94=BB=20(#882)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: 修复缩放配置动画错误 * fix: 移除缩放模式效果的添加/删除动画 * UI: 添加动画 --- src/Magpie.App/ScalingConfigurationPage.xaml | 20 +++++++++++++++- .../ScalingConfigurationViewModel.cpp | 23 +------------------ .../ScalingConfigurationViewModel.h | 8 ------- .../ScalingConfigurationViewModel.idl | 1 - src/Magpie.App/SettingsExpander.Resource.xaml | 10 +++----- 5 files changed, 23 insertions(+), 39 deletions(-) diff --git a/src/Magpie.App/ScalingConfigurationPage.xaml b/src/Magpie.App/ScalingConfigurationPage.xaml index e6dce513e..f909d76a0 100644 --- a/src/Magpie.App/ScalingConfigurationPage.xaml +++ b/src/Magpie.App/ScalingConfigurationPage.xaml @@ -110,7 +110,6 @@ @@ -120,6 +119,12 @@ Spacing="2" /> + + + + + + - - - - - @@ -522,14 +522,15 @@ - + - - + + \ No newline at end of file diff --git a/src/Magpie.App/ScalingConfigurationViewModel.cpp b/src/Magpie.App/ScalingModesViewModel.cpp similarity index 81% rename from src/Magpie.App/ScalingConfigurationViewModel.cpp rename to src/Magpie.App/ScalingModesViewModel.cpp index 0ef1120b8..041745631 100644 --- a/src/Magpie.App/ScalingConfigurationViewModel.cpp +++ b/src/Magpie.App/ScalingModesViewModel.cpp @@ -1,7 +1,7 @@ #include "pch.h" -#include "ScalingConfigurationViewModel.h" -#if __has_include("ScalingConfigurationViewModel.g.cpp") -#include "ScalingConfigurationViewModel.g.cpp" +#include "ScalingModesViewModel.h" +#if __has_include("ScalingModesViewModel.g.cpp") +#include "ScalingModesViewModel.g.cpp" #endif #include "EffectsService.h" #include "AppSettings.h" @@ -17,15 +17,15 @@ using namespace ::Magpie::Core; namespace winrt::Magpie::App::implementation { -ScalingConfigurationViewModel::ScalingConfigurationViewModel() { +ScalingModesViewModel::ScalingModesViewModel() { _AddScalingModes(); _scalingModeAddedRevoker = ScalingModesService::Get().ScalingModeAdded( - auto_revoke, { this, &ScalingConfigurationViewModel::_ScalingModesService_Added }); + auto_revoke, { this, &ScalingModesViewModel::_ScalingModesService_Added }); _scalingModeMovedRevoker = ScalingModesService::Get().ScalingModeMoved( - auto_revoke, { this, &ScalingConfigurationViewModel::_ScalingModesService_Moved }); + auto_revoke, { this, &ScalingModesViewModel::_ScalingModesService_Moved }); _scalingModeRemovedRevoker = ScalingModesService::Get().ScalingModeRemoved( - auto_revoke, { this, &ScalingConfigurationViewModel::_ScalingModesService_Removed }); + auto_revoke, { this, &ScalingModesViewModel::_ScalingModesService_Removed }); } static std::optional OpenFileDialogForJson(IFileDialog* fileDialog) noexcept { @@ -40,7 +40,7 @@ static std::optional OpenFileDialogForJson(IFileDialog* fileDialog return FileDialogHelper::OpenFileDialog(fileDialog, FOS_STRICTFILETYPES); } -void ScalingConfigurationViewModel::Export() const noexcept { +void ScalingModesViewModel::Export() const noexcept { com_ptr fileDialog = try_create_instance(CLSID_FileSaveDialog); if (!fileDialog) { Logger::Get().Error("创建 FileSaveDialog 失败"); @@ -111,20 +111,20 @@ static bool ImportImpl(bool legacy) noexcept { return ScalingModesService::Get().Import(((const rapidjson::Document&)doc).GetObj(), false); } -void ScalingConfigurationViewModel::_Import(bool legacy) { +void ScalingModesViewModel::_Import(bool legacy) { ShowErrorMessage(false); if (!ImportImpl(legacy)) { ShowErrorMessage(true); } } -void ScalingConfigurationViewModel::PrepareForAdd() { +void ScalingModesViewModel::PrepareForAdd() { std::vector copyFromList; ResourceLoader resourceLoader = ResourceLoader::GetForCurrentView(CommonSharedConstants::APP_RESOURCE_MAP_ID); copyFromList.push_back(box_value(resourceLoader.GetString( - L"ScalingConfiguration_ScalingModes_NewScalingModeFlyout_CopyFrom_None"))); + L"ScalingModes_NewScalingModeFlyout_CopyFrom_None"))); for (const auto& scalingMode : AppSettings::Get().ScalingModes()) { copyFromList.push_back(box_value(scalingMode.name)); @@ -139,17 +139,17 @@ void ScalingConfigurationViewModel::PrepareForAdd() { RaisePropertyChanged(L"NewScalingModeCopyFrom"); } -void ScalingConfigurationViewModel::NewScalingModeName(const hstring& value) noexcept { +void ScalingModesViewModel::NewScalingModeName(const hstring& value) noexcept { _newScalingModeName = value; RaisePropertyChanged(L"NewScalingModeName"); RaisePropertyChanged(L"IsAddButtonEnabled"); } -void ScalingConfigurationViewModel::AddScalingMode() { +void ScalingModesViewModel::AddScalingMode() { ScalingModesService::Get().AddScalingMode(_newScalingModeName, _newScalingModeCopyFrom - 1); } -fire_and_forget ScalingConfigurationViewModel::_AddScalingModes(bool isInitialExpanded) { +fire_and_forget ScalingModesViewModel::_AddScalingModes(bool isInitialExpanded) { if (_addingScalingModes) { co_return; } @@ -200,11 +200,11 @@ fire_and_forget ScalingConfigurationViewModel::_AddScalingModes(bool isInitialEx _addingScalingModes = false; } -void ScalingConfigurationViewModel::_ScalingModesService_Added(EffectAddedWay way) { +void ScalingModesViewModel::_ScalingModesService_Added(EffectAddedWay way) { _AddScalingModes(way == EffectAddedWay::Add); } -void ScalingConfigurationViewModel::_ScalingModesService_Moved(uint32_t index, bool isMoveUp) { +void ScalingModesViewModel::_ScalingModesService_Moved(uint32_t index, bool isMoveUp) { const uint32_t targetIndex = isMoveUp ? index - 1 : index + 1; ScalingModeItem targetItem = _scalingModes.GetAt(targetIndex).as(); @@ -212,7 +212,7 @@ void ScalingConfigurationViewModel::_ScalingModesService_Moved(uint32_t index, b _scalingModes.InsertAt(index, targetItem); } -void ScalingConfigurationViewModel::_ScalingModesService_Removed(uint32_t index) { +void ScalingModesViewModel::_ScalingModesService_Removed(uint32_t index) { _scalingModes.RemoveAt(index); } diff --git a/src/Magpie.App/ScalingConfigurationViewModel.h b/src/Magpie.App/ScalingModesViewModel.h similarity index 81% rename from src/Magpie.App/ScalingConfigurationViewModel.h rename to src/Magpie.App/ScalingModesViewModel.h index e41976837..a8a4fbd58 100644 --- a/src/Magpie.App/ScalingConfigurationViewModel.h +++ b/src/Magpie.App/ScalingModesViewModel.h @@ -1,13 +1,13 @@ #pragma once -#include "ScalingConfigurationViewModel.g.h" +#include "ScalingModesViewModel.g.h" #include "WinRTUtils.h" #include "ScalingModesService.h" namespace winrt::Magpie::App::implementation { -struct ScalingConfigurationViewModel : ScalingConfigurationViewModelT, - wil::notify_property_changed_base { - ScalingConfigurationViewModel(); +struct ScalingModesViewModel : ScalingModesViewModelT, + wil::notify_property_changed_base { + ScalingModesViewModel(); void Export() const noexcept; @@ -88,7 +88,7 @@ struct ScalingConfigurationViewModel : ScalingConfigurationViewModelT { +struct ScalingModesViewModel : ScalingModesViewModelT { }; } diff --git a/src/Magpie.App/ScalingConfigurationViewModel.idl b/src/Magpie.App/ScalingModesViewModel.idl similarity index 77% rename from src/Magpie.App/ScalingConfigurationViewModel.idl rename to src/Magpie.App/ScalingModesViewModel.idl index 70ea714a4..608b03deb 100644 --- a/src/Magpie.App/ScalingConfigurationViewModel.idl +++ b/src/Magpie.App/ScalingModesViewModel.idl @@ -1,6 +1,6 @@ namespace Magpie.App { - runtimeclass ScalingConfigurationViewModel : Windows.UI.Xaml.Data.INotifyPropertyChanged { - ScalingConfigurationViewModel(); + runtimeclass ScalingModesViewModel : Windows.UI.Xaml.Data.INotifyPropertyChanged { + ScalingModesViewModel(); void Export(); void Import(); diff --git a/src/Magpie.App/ScalingService.cpp b/src/Magpie.App/ScalingService.cpp index f0ea01427..938bcabf2 100644 --- a/src/Magpie.App/ScalingService.cpp +++ b/src/Magpie.App/ScalingService.cpp @@ -9,6 +9,7 @@ #include "Logger.h" #include "EffectsService.h" #include +#include "TouchHelper.h" using namespace ::Magpie::Core; using namespace winrt; @@ -239,6 +240,13 @@ bool ScalingService::_StartScale(HWND hWnd, const Profile& profile) { } } } + + // 尝试启用触控支持 + bool isTouchSupportEnabled; + if (!TouchHelper::TryLaunchTouchHelper(isTouchSupportEnabled)) { + Logger::Get().Error("TryLaunchTouchHelper 失败"); + return false; + } options.graphicsCard = profile.graphicsCard; options.captureMethod = profile.captureMethod; @@ -249,6 +257,8 @@ bool ScalingService::_StartScale(HWND hWnd, const Profile& profile) { options.cursorInterpolationMode = profile.cursorInterpolationMode; options.flags = profile.scalingFlags; + options.IsTouchSupportEnabled(isTouchSupportEnabled); + if (profile.isCroppingEnabled) { options.cropping = profile.cropping; } diff --git a/src/Magpie.App/SettingsPage.cpp b/src/Magpie.App/SettingsPage.cpp index cf66101e2..19527a30f 100644 --- a/src/Magpie.App/SettingsPage.cpp +++ b/src/Magpie.App/SettingsPage.cpp @@ -19,7 +19,7 @@ void SettingsPage::InitializeComponent() { SettingsPageFrame().Title(versionStr); } -void SettingsPage::ComboBox_DropDownOpened(IInspectable const& sender, IInspectable const&) { +void SettingsPage::ComboBox_DropDownOpened(IInspectable const& sender, IInspectable const&) const { ComboBoxHelper::DropDownOpened(*this, sender); } diff --git a/src/Magpie.App/SettingsPage.h b/src/Magpie.App/SettingsPage.h index d12feba54..b8bbe0833 100644 --- a/src/Magpie.App/SettingsPage.h +++ b/src/Magpie.App/SettingsPage.h @@ -10,7 +10,7 @@ struct SettingsPage : SettingsPageT { return _viewModel; } - void ComboBox_DropDownOpened(IInspectable const& sender, IInspectable const&); + void ComboBox_DropDownOpened(IInspectable const& sender, IInspectable const&) const; private: Magpie::App::SettingsViewModel _viewModel; diff --git a/src/Magpie.App/SettingsPage.xaml b/src/Magpie.App/SettingsPage.xaml index 7f183786c..2d5af79c2 100644 --- a/src/Magpie.App/SettingsPage.xaml +++ b/src/Magpie.App/SettingsPage.xaml @@ -21,19 +21,16 @@ ItemsSource="{x:Bind ViewModel.Languages, Mode=OneTime}" SelectedIndex="{x:Bind ViewModel.Language, Mode=TwoWay}" /> - - - -