mirror of
https://github.com/Blinue/Magpie.git
synced 2026-06-24 02:04:10 +00:00
支持分别设置全屏和窗口模式缩放的工具栏初始状态 (#1205)
This commit is contained in:
parent
c16e3fb574
commit
f882504df6
12 changed files with 151 additions and 34 deletions
|
|
@ -133,8 +133,10 @@ ScalingError Renderer::Initialize(HWND hwndAttach, OverlayOptions& overlayOption
|
|||
return ScalingError::ScalingFailedGeneral;
|
||||
}
|
||||
|
||||
if (!ScalingWindow::Get().Options().Is3DGameMode()) {
|
||||
_overlayDrawer.ToolbarState(ScalingWindow::Get().Options().initialToolbarState);
|
||||
const ScalingOptions& options = ScalingWindow::Get().Options();
|
||||
if (!options.Is3DGameMode()) {
|
||||
_overlayDrawer.ToolbarState(options.IsWindowedMode() ?
|
||||
options.windowedInitialToolbarState : options.fullscreenInitialToolbarState);
|
||||
}
|
||||
|
||||
_hKeyboardHook.reset(SetWindowsHookEx(WH_KEYBOARD_LL, _LowLevelKeyboardHook, NULL, 0));
|
||||
|
|
|
|||
|
|
@ -107,7 +107,8 @@ void ScalingOptions::Log() const noexcept {
|
|||
multiMonitorUsage: {}
|
||||
cursorInterpolationMode: {}
|
||||
duplicateFrameDetectionMode: {}
|
||||
initialToolbarState: {}
|
||||
fullscreenInitialToolbarState: {}
|
||||
windowedInitialToolbarState: {}
|
||||
screenshotsDir: {}
|
||||
effects: {})",
|
||||
IsWindowedMode(),
|
||||
|
|
@ -138,7 +139,8 @@ void ScalingOptions::Log() const noexcept {
|
|||
(int)multiMonitorUsage,
|
||||
(int)cursorInterpolationMode,
|
||||
(int)duplicateFrameDetectionMode,
|
||||
(int)initialToolbarState,
|
||||
(int)fullscreenInitialToolbarState,
|
||||
(int)windowedInitialToolbarState,
|
||||
StrHelper::UTF16ToUTF8(screenshotsDir.native()),
|
||||
LogEffects(effects)
|
||||
));
|
||||
|
|
|
|||
|
|
@ -186,7 +186,8 @@ struct ScalingOptions {
|
|||
MultiMonitorUsage multiMonitorUsage = MultiMonitorUsage::Closest;
|
||||
CursorInterpolationMode cursorInterpolationMode = CursorInterpolationMode::NearestNeighbor;
|
||||
DuplicateFrameDetectionMode duplicateFrameDetectionMode = DuplicateFrameDetectionMode::Dynamic;
|
||||
ToolbarState initialToolbarState = ToolbarState::AutoHide;
|
||||
ToolbarState fullscreenInitialToolbarState = ToolbarState::AutoHide;
|
||||
ToolbarState windowedInitialToolbarState = ToolbarState::AutoHide;
|
||||
float initialWindowedScaleFactor = 0.0f;
|
||||
std::filesystem::path screenshotsDir;
|
||||
|
||||
|
|
|
|||
|
|
@ -621,8 +621,10 @@ bool AppSettings::_Save(const _AppSettingsData& data) noexcept {
|
|||
|
||||
writer.Key("overlay");
|
||||
writer.StartObject();
|
||||
writer.Key("initialToolbarState");
|
||||
writer.Uint((uint32_t)_initialToolbarState);
|
||||
writer.Key("fullscreenInitialToolbarState");
|
||||
writer.Uint((uint32_t)_fullscreenInitialToolbarState);
|
||||
writer.Key("windowedInitialToolbarState");
|
||||
writer.Uint((uint32_t)_windowedInitialToolbarState);
|
||||
writer.Key("screenshotsDir");
|
||||
writer.String(StrHelper::UTF16ToUTF8(_screenshotsDir.native()).c_str());
|
||||
writer.Key("windows");
|
||||
|
|
@ -847,11 +849,27 @@ void AppSettings::_LoadSettings(const rapidjson::GenericObject<true, rapidjson::
|
|||
auto overlayObj = overlayNode->value.GetObj();
|
||||
|
||||
uint32_t initialToolbarState = (uint32_t)ToolbarState::AutoHide;
|
||||
JsonHelper::ReadUInt(overlayObj, "initialToolbarState", initialToolbarState);
|
||||
if (initialToolbarState >= (uint32_t)ToolbarState::COUNT) {
|
||||
if (JsonHelper::ReadUInt(overlayObj, "fullscreenInitialToolbarState", initialToolbarState, true)) {
|
||||
if (initialToolbarState >= (uint32_t)ToolbarState::COUNT) {
|
||||
initialToolbarState = (uint32_t)ToolbarState::AutoHide;
|
||||
}
|
||||
_fullscreenInitialToolbarState = (ToolbarState)initialToolbarState;
|
||||
|
||||
initialToolbarState = (uint32_t)ToolbarState::AutoHide;
|
||||
JsonHelper::ReadUInt(overlayObj, "windowedInitialToolbarState", initialToolbarState);
|
||||
if (initialToolbarState >= (uint32_t)ToolbarState::COUNT) {
|
||||
initialToolbarState = (uint32_t)ToolbarState::AutoHide;
|
||||
}
|
||||
_windowedInitialToolbarState = (ToolbarState)initialToolbarState;
|
||||
} else {
|
||||
// v0.12.0-preview1 中工具栏初始状态不区分全屏和窗口模式缩放
|
||||
JsonHelper::ReadUInt(overlayObj, "initialToolbarState", initialToolbarState);
|
||||
if (initialToolbarState >= (uint32_t)ToolbarState::COUNT) {
|
||||
initialToolbarState = (uint32_t)ToolbarState::AutoHide;
|
||||
}
|
||||
_fullscreenInitialToolbarState = (ToolbarState)initialToolbarState;
|
||||
_windowedInitialToolbarState = (ToolbarState)initialToolbarState;
|
||||
}
|
||||
_initialToolbarState = (ToolbarState)initialToolbarState;
|
||||
|
||||
{
|
||||
std::wstring value;
|
||||
|
|
|
|||
|
|
@ -50,7 +50,8 @@ struct _AppSettingsData {
|
|||
|
||||
float _minFrameRate = 10.0f;
|
||||
|
||||
ToolbarState _initialToolbarState = ToolbarState::AutoHide;
|
||||
ToolbarState _fullscreenInitialToolbarState = ToolbarState::AutoHide;
|
||||
ToolbarState _windowedInitialToolbarState = ToolbarState::AutoHide;
|
||||
// 为空表示 FOLDERID_Screenshots,支持绝对路径和相对路径
|
||||
std::filesystem::path _screenshotsDir;
|
||||
|
||||
|
|
@ -310,12 +311,21 @@ public:
|
|||
SaveAsync();
|
||||
}
|
||||
|
||||
ToolbarState InitialToolbarState() const noexcept {
|
||||
return _initialToolbarState;
|
||||
ToolbarState FullscreenInitialToolbarState() const noexcept {
|
||||
return _fullscreenInitialToolbarState;
|
||||
}
|
||||
|
||||
void InitialToolbarState(ToolbarState value) noexcept {
|
||||
_initialToolbarState = value;
|
||||
void FullscreenInitialToolbarState(ToolbarState value) noexcept {
|
||||
_fullscreenInitialToolbarState = value;
|
||||
SaveAsync();
|
||||
}
|
||||
|
||||
ToolbarState WindowedInitialToolbarState() const noexcept {
|
||||
return _windowedInitialToolbarState;
|
||||
}
|
||||
|
||||
void WindowedInitialToolbarState(ToolbarState value) noexcept {
|
||||
_windowedInitialToolbarState = value;
|
||||
SaveAsync();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -107,16 +107,33 @@
|
|||
</local:ShortcutControl.Action>
|
||||
</local:ShortcutControl>
|
||||
</local:SettingsCard>
|
||||
<local:SettingsCard x:Uid="Home_Toolbar_InitialState">
|
||||
<local:SettingsCard.HeaderIcon>
|
||||
<local:SettingsExpander x:Uid="Home_Toolbar_InitialState">
|
||||
<local:SettingsExpander.HeaderIcon>
|
||||
<FontIcon Glyph="" />
|
||||
</local:SettingsCard.HeaderIcon>
|
||||
<ComboBox SelectedIndex="{x:Bind ViewModel.InitialToolbarState, Mode=TwoWay}">
|
||||
<ComboBoxItem x:Uid="Home_Toolbar_InitialState_Off" />
|
||||
<ComboBoxItem x:Uid="Home_Toolbar_InitialState_AlwaysShow" />
|
||||
<ComboBoxItem x:Uid="Home_Toolbar_InitialState_AutoHide" />
|
||||
</ComboBox>
|
||||
</local:SettingsCard>
|
||||
</local:SettingsExpander.HeaderIcon>
|
||||
<local:SettingsExpander.Content>
|
||||
<TextBlock Foreground="{ThemeResource TextFillColorSecondaryBrush}"
|
||||
Text="{x:Bind ViewModel.InitialToolbarStateDescription, Mode=OneWay}" />
|
||||
</local:SettingsExpander.Content>
|
||||
<local:SettingsExpander.Items>
|
||||
<local:SettingsCard x:Uid="Home_Toolbar_InitialState_Fullscreen">
|
||||
<ComboBox DropDownOpened="ComboBox_DropDownOpened"
|
||||
SelectedIndex="{x:Bind ViewModel.FullscreenInitialToolbarState, Mode=TwoWay}">
|
||||
<ComboBoxItem x:Uid="Home_Toolbar_InitialState_Off" />
|
||||
<ComboBoxItem x:Uid="Home_Toolbar_InitialState_AlwaysShow" />
|
||||
<ComboBoxItem x:Uid="Home_Toolbar_InitialState_AutoHide" />
|
||||
</ComboBox>
|
||||
</local:SettingsCard>
|
||||
<local:SettingsCard x:Uid="Home_Toolbar_InitialState_Windowed">
|
||||
<ComboBox DropDownOpened="ComboBox_DropDownOpened"
|
||||
SelectedIndex="{x:Bind ViewModel.WindowedInitialToolbarState, Mode=TwoWay}">
|
||||
<ComboBoxItem x:Uid="Home_Toolbar_InitialState_Off" />
|
||||
<ComboBoxItem x:Uid="Home_Toolbar_InitialState_AlwaysShow" />
|
||||
<ComboBoxItem x:Uid="Home_Toolbar_InitialState_AutoHide" />
|
||||
</ComboBox>
|
||||
</local:SettingsCard>
|
||||
</local:SettingsExpander.Items>
|
||||
</local:SettingsExpander>
|
||||
<local:SettingsCard x:Uid="Home_Toolbar_ScreenshotSaveDirectory"
|
||||
Click="{x:Bind ViewModel.OpenScreenshotSaveDirectory}"
|
||||
Description="{x:Bind ViewModel.ScreenshotSaveDirectory, Mode=OneWay}"
|
||||
|
|
|
|||
|
|
@ -141,11 +141,36 @@ void HomeViewModel::RemindMeLater() {
|
|||
ShowUpdateCard(false);
|
||||
}
|
||||
|
||||
int HomeViewModel::InitialToolbarState() const noexcept {
|
||||
return (int)AppSettings::Get().InitialToolbarState();
|
||||
hstring HomeViewModel::InitialToolbarStateDescription() const noexcept {
|
||||
static constexpr std::array STATE_STRING_IDS = {
|
||||
L"Home_Toolbar_InitialState_Off/Content",
|
||||
L"Home_Toolbar_InitialState_AlwaysShow/Content",
|
||||
L"Home_Toolbar_InitialState_AutoHide/Content"
|
||||
};
|
||||
|
||||
const ToolbarState fullscreenInitialState =
|
||||
AppSettings::Get().FullscreenInitialToolbarState();
|
||||
const ToolbarState windowedInitialState =
|
||||
AppSettings::Get().WindowedInitialToolbarState();
|
||||
|
||||
const ResourceLoader resourceLoader =
|
||||
ResourceLoader::GetForCurrentView(CommonSharedConstants::APP_RESOURCE_MAP_ID);
|
||||
if (fullscreenInitialState == windowedInitialState) {
|
||||
return resourceLoader.GetString(STATE_STRING_IDS[(uint32_t)fullscreenInitialState]);
|
||||
} else {
|
||||
return hstring(StrHelper::Concat(
|
||||
resourceLoader.GetString(STATE_STRING_IDS[(uint32_t)fullscreenInitialState]),
|
||||
L" | ",
|
||||
resourceLoader.GetString(STATE_STRING_IDS[(uint32_t)windowedInitialState]))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void HomeViewModel::InitialToolbarState(int value) {
|
||||
int HomeViewModel::FullscreenInitialToolbarState() const noexcept {
|
||||
return (int)AppSettings::Get().FullscreenInitialToolbarState();
|
||||
}
|
||||
|
||||
void HomeViewModel::FullscreenInitialToolbarState(int value) {
|
||||
if (value < 0) {
|
||||
return;
|
||||
}
|
||||
|
|
@ -153,12 +178,34 @@ void HomeViewModel::InitialToolbarState(int value) {
|
|||
const ToolbarState state = (ToolbarState)value;
|
||||
|
||||
AppSettings& settings = AppSettings::Get();
|
||||
if (settings.InitialToolbarState() == state) {
|
||||
if (settings.FullscreenInitialToolbarState() == state) {
|
||||
return;
|
||||
}
|
||||
|
||||
settings.InitialToolbarState(state);
|
||||
RaisePropertyChanged(L"InitialToolbarState");
|
||||
settings.FullscreenInitialToolbarState(state);
|
||||
RaisePropertyChanged(L"FullscreenInitialToolbarState");
|
||||
RaisePropertyChanged(L"InitialToolbarStateDescription");
|
||||
}
|
||||
|
||||
int HomeViewModel::WindowedInitialToolbarState() const noexcept {
|
||||
return (int)AppSettings::Get().WindowedInitialToolbarState();
|
||||
}
|
||||
|
||||
void HomeViewModel::WindowedInitialToolbarState(int value) {
|
||||
if (value < 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
const ToolbarState state = (ToolbarState)value;
|
||||
|
||||
AppSettings& settings = AppSettings::Get();
|
||||
if (settings.WindowedInitialToolbarState() == state) {
|
||||
return;
|
||||
}
|
||||
|
||||
settings.WindowedInitialToolbarState(state);
|
||||
RaisePropertyChanged(L"WindowedInitialToolbarState");
|
||||
RaisePropertyChanged(L"InitialToolbarStateDescription");
|
||||
}
|
||||
|
||||
hstring HomeViewModel::ScreenshotSaveDirectory() const noexcept {
|
||||
|
|
|
|||
|
|
@ -39,8 +39,13 @@ struct HomeViewModel : HomeViewModelT<HomeViewModel>, wil::notify_property_chang
|
|||
|
||||
void RemindMeLater();
|
||||
|
||||
int InitialToolbarState() const noexcept;
|
||||
void InitialToolbarState(int value);
|
||||
hstring InitialToolbarStateDescription() const noexcept;
|
||||
|
||||
int FullscreenInitialToolbarState() const noexcept;
|
||||
void FullscreenInitialToolbarState(int value);
|
||||
|
||||
int WindowedInitialToolbarState() const noexcept;
|
||||
void WindowedInitialToolbarState(int value);
|
||||
|
||||
hstring ScreenshotSaveDirectory() const noexcept;
|
||||
|
||||
|
|
|
|||
|
|
@ -16,7 +16,9 @@ namespace Magpie {
|
|||
|
||||
void ToggleTimer();
|
||||
|
||||
Int32 InitialToolbarState;
|
||||
String InitialToolbarStateDescription { get; };
|
||||
Int32 FullscreenInitialToolbarState;
|
||||
Int32 WindowedInitialToolbarState;
|
||||
String ScreenshotSaveDirectory { get; };
|
||||
void OpenScreenshotSaveDirectory();
|
||||
void ChangeScreenshotSaveDirectory();
|
||||
|
|
|
|||
|
|
@ -994,4 +994,10 @@
|
|||
<data name="Overlay_Toolbar_SwitchToWindowed" xml:space="preserve">
|
||||
<value>Switch to Windowed Scaling</value>
|
||||
</data>
|
||||
<data name="Home_Toolbar_InitialState_Fullscreen.Header" xml:space="preserve">
|
||||
<value>Fullscreen scaling</value>
|
||||
</data>
|
||||
<data name="Home_Toolbar_InitialState_Windowed.Header" xml:space="preserve">
|
||||
<value>Windowed scaling</value>
|
||||
</data>
|
||||
</root>
|
||||
|
|
@ -994,4 +994,10 @@
|
|||
<data name="Overlay_Toolbar_SwitchToWindowed" xml:space="preserve">
|
||||
<value>切换到窗口模式缩放</value>
|
||||
</data>
|
||||
<data name="Home_Toolbar_InitialState_Fullscreen.Header" xml:space="preserve">
|
||||
<value>全屏模式缩放</value>
|
||||
</data>
|
||||
<data name="Home_Toolbar_InitialState_Windowed.Header" xml:space="preserve">
|
||||
<value>窗口模式缩放</value>
|
||||
</data>
|
||||
</root>
|
||||
|
|
@ -425,7 +425,8 @@ ScalingError ScalingService::_StartScaleImpl(HWND hWnd, const Profile& profile,
|
|||
options.minFrameRate = settings.MinFrameRate();
|
||||
}
|
||||
|
||||
options.initialToolbarState = settings.InitialToolbarState();
|
||||
options.fullscreenInitialToolbarState = settings.FullscreenInitialToolbarState();
|
||||
options.windowedInitialToolbarState = settings.WindowedInitialToolbarState();
|
||||
options.screenshotsDir = settings.ScreenshotsDir();
|
||||
if (options.screenshotsDir.empty()) {
|
||||
// 回落到使用当前目录
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue