mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-09 04:37:30 +02:00
This pull request refactors the LightSwitch module to introduce a new shared static library, `LightSwitchLib`, which centralizes theme management logic and enables code sharing between the service and module interface. The changes move theme-related code from the service and module interface into this new library, update project references, and clean up now-redundant files and includes. **LightSwitchLib introduction and code deduplication:** - Added a new static library project, `LightSwitchLib`, containing all theme management logic (`SetSystemTheme`, `SetAppsTheme`, `GetCurrentSystemTheme`, `GetCurrentAppsTheme`, `IsNightLightEnabled`) and related files (`ThemeHelper.cpp`, `ThemeHelper.h`, `pch.h`, `pch.cpp`). This code was previously duplicated in both the service and module interface. (`src/modules/LightSwitch/LightSwitchLib/LightSwitchLib.vcxproj` [[1]](diffhunk://#diff-c38e95060ad294c9ed5c2bb769616bb52032a4330af7e268ad63d81a99dc1cadR1-R123) `LightSwitchLib.vcxproj.filters` [[2]](diffhunk://#diff-fcfc49f1628c274cd9a40aca385e03a1937f9e42958298f36155ad16a267ba9aR1-R33) `ThemeHelper.cpp` [[3]](diffhunk://#diff-f5ab83c022406172501172ee88e21294c7aba2a87fb30334d7c4d4fc9d736a56L1-R3) `ThemeHelper.h` [[4]](diffhunk://#diff-6609a7fc7abc61d4d0029f0fb605a9f4732511642af6e12851e86c234108169aR1-R10) `pch.h` [[5]](diffhunk://#diff-57e4d6ddad1d356a24555bce4d6cbb0d6a93386515254abf95573324454c94c2R1-R5) `pch.cpp` [[6]](diffhunk://#diff-87fbf215a559e7833ec06ff32aa7f8109fdf86d92b360fe44302fc16f1784d52R1) - Updated the solution file and relevant project files to add and reference `LightSwitchLib` from both `LightSwitchService` and `LightSwitchModuleInterface`, ensuring both components use the shared implementation. (`PowerToys.slnx` [[1]](diffhunk://#diff-40c552fef4118125c3ccd6b156db518acec74b11150b193b31f18a2cc17a531eR668) `LightSwitchService.vcxproj` [[2]](diffhunk://#diff-51f54bd015aa96b38ddf4e96134ea542fac4b648566a23c2c86fe91a2b5a6bdaR58) [[3]](diffhunk://#diff-51f54bd015aa96b38ddf4e96134ea542fac4b648566a23c2c86fe91a2b5a6bdaR113-R115) `LightSwitchModuleInterface.vcxproj` [[4]](diffhunk://#diff-72e859ee44b3f0087018e55708e850fb5040c5b8f72449d1cac30e8efb28e2c2R205-R207) [[5]](diffhunk://#diff-72e859ee44b3f0087018e55708e850fb5040c5b8f72449d1cac30e8efb28e2c2L169-R179) **Cleanup and removal of redundant code:** - Removed old theme management code and headers from `LightSwitchService` and `LightSwitchModuleInterface` now that logic resides in `LightSwitchLib`. (`ThemeHelper.cpp` [[1]](diffhunk://#diff-3e2766504c1cf989390508c613b2177cd5de14fb9de46df3b416f95f955338bfL1-L106) `ThemeHelper.h` [[2]](diffhunk://#diff-0e8540cace398ec3eebca416ca38d81262b689eca76a004584e686a605b7a242L1-L5) `LightSwitchService.vcxproj` [[3]](diffhunk://#diff-51f54bd015aa96b38ddf4e96134ea542fac4b648566a23c2c86fe91a2b5a6bdaL81) [[4]](diffhunk://#diff-51f54bd015aa96b38ddf4e96134ea542fac4b648566a23c2c86fe91a2b5a6bdaL96) `LightSwitchModuleInterface.vcxproj` [[5]](diffhunk://#diff-72e859ee44b3f0087018e55708e850fb5040c5b8f72449d1cac30e8efb28e2c2L190) - Removed duplicated registry path constants from `SettingsConstants.h`, as they are now defined in the shared header. (`SettingsConstants.h` [src/modules/LightSwitch/LightSwitchService/SettingsConstants.hL15-L17](diffhunk://#diff-e74db005ffb8b881a08c4dae1c1ead9dc732928a69cafb4c9e0bae8b86d4e24aL15-L17)) **Module interface improvements:** - Added `ExportedFunctions.cpp` to the module interface, exposing theme management functions as exports and using the shared library implementation. (`ExportedFunctions.cpp` [[1]](diffhunk://#diff-48acf3b77a8b6ac6fd1129afe1a677b34447ce39454e86ea04f1a1181a23b546R1-R22) `LightSwitchModuleInterface.vcxproj` [[2]](diffhunk://#diff-72e859ee44b3f0087018e55708e850fb5040c5b8f72449d1cac30e8efb28e2c2L169-R179) **Minor test and logging adjustments:** - Fixed a UI test to use the correct toggle name for the Hosts File Editor. (`HostsSettingTests.cs` [src/modules/Hosts/Hosts.UITests/HostsSettingTests.csL116-R116](diffhunk://#diff-3782109c99cd66a2c1b870a83d1f9d9807422479c89e03799b311ef5f13a2098L116-R116)) - Updated a log message to refer to `LightSwitchLib` instead of `LightSwitchService` for clarity. (`ThemeHelper.cpp` [src/modules/LightSwitch/LightSwitchLib/ThemeHelper.cppL66-R63](diffhunk://#diff-f5ab83c022406172501172ee88e21294c7aba2a87fb30334d7c4d4fc9d736a56L66-R63))
450 lines
34 KiB
XML
450 lines
34 KiB
XML
<local:NavigablePage
|
|
x:Class="Microsoft.PowerToys.Settings.UI.Views.MouseUtilsPage"
|
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
xmlns:controls="using:Microsoft.PowerToys.Settings.UI.Controls"
|
|
xmlns:converters="using:Microsoft.PowerToys.Settings.UI.Converters"
|
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
|
xmlns:local="using:Microsoft.PowerToys.Settings.UI.Helpers"
|
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
|
xmlns:panels="using:Microsoft.PowerToys.Settings.UI.Panels"
|
|
xmlns:tkcontrols="using:CommunityToolkit.WinUI.Controls"
|
|
xmlns:tkconverters="using:CommunityToolkit.WinUI.Converters"
|
|
xmlns:ui="using:CommunityToolkit.WinUI"
|
|
AutomationProperties.LandmarkType="Main"
|
|
mc:Ignorable="d">
|
|
<local:NavigablePage.Resources>
|
|
<converters:IndexBitFieldToVisibilityConverter x:Key="IndexBitFieldToVisibilityConverter" />
|
|
<tkconverters:BoolToVisibilityConverter
|
|
x:Key="BoolToInvertedVisibilityConverter"
|
|
FalseValue="Visible"
|
|
TrueValue="Collapsed" />
|
|
</local:NavigablePage.Resources>
|
|
<controls:SettingsPageControl x:Uid="MouseUtils" ModuleImageSource="ms-appx:///Assets/Settings/Modules/MouseUtils.png">
|
|
<controls:SettingsPageControl.ModuleContent>
|
|
<StackPanel ChildrenTransitions="{StaticResource SettingsCardsAnimations}" Orientation="Vertical">
|
|
<controls:SettingsGroup x:Uid="MouseUtils_CursorWrap" AutomationProperties.AutomationId="MouseUtils_CursorWrapTestId">
|
|
<controls:GPOInfoControl ShowWarning="{x:Bind ViewModel.IsCursorWrapEnabledGpoConfigured, Mode=OneWay}">
|
|
<tkcontrols:SettingsCard
|
|
Name="MouseUtilsEnableCursorWrap"
|
|
x:Uid="MouseUtils_Enable_CursorWrap"
|
|
HeaderIcon="{ui:BitmapIcon Source=/Assets/Settings/Icons/CursorWrap.png}"
|
|
IsEnabled="{x:Bind ViewModel.IsCursorWrapEnabledGpoConfigured, Mode=OneWay, Converter={StaticResource BoolNegationConverter}}">
|
|
<ToggleSwitch x:Uid="ToggleSwitch" IsOn="{x:Bind ViewModel.IsCursorWrapEnabled, Mode=TwoWay}" />
|
|
</tkcontrols:SettingsCard>
|
|
</controls:GPOInfoControl>
|
|
|
|
<tkcontrols:SettingsExpander
|
|
Name="MouseUtilsCursorWrapSettingsExpander"
|
|
x:Uid="MouseUtils_CursorWrap_ActivationShortcut"
|
|
HeaderIcon="{ui:FontIcon Glyph=}"
|
|
IsEnabled="{x:Bind ViewModel.IsCursorWrapEnabled, Mode=OneWay}">
|
|
<controls:ShortcutControl MinWidth="{StaticResource SettingActionControlMinWidth}" HotkeySettings="{x:Bind Path=ViewModel.CursorWrapActivationShortcut, Mode=TwoWay}" />
|
|
<tkcontrols:SettingsExpander.Items>
|
|
<tkcontrols:SettingsCard ContentAlignment="Left">
|
|
<CheckBox x:Uid="MouseUtils_AutoActivate" IsChecked="{x:Bind ViewModel.CursorWrapAutoActivate, Mode=TwoWay}" />
|
|
</tkcontrols:SettingsCard>
|
|
<tkcontrols:SettingsCard ContentAlignment="Left" IsEnabled="{x:Bind ViewModel.IsCursorWrapEnabled, Mode=OneWay}">
|
|
<CheckBox x:Uid="MouseUtils_CursorWrap_DisableWrapDuringDrag" IsChecked="{x:Bind ViewModel.CursorWrapDisableWrapDuringDrag, Mode=TwoWay}" />
|
|
</tkcontrols:SettingsCard>
|
|
</tkcontrols:SettingsExpander.Items>
|
|
</tkcontrols:SettingsExpander>
|
|
</controls:SettingsGroup>
|
|
|
|
<controls:SettingsGroup x:Uid="MouseUtils_FindMyMouse" AutomationProperties.AutomationId="MouseUtils_FindMyMouseTestId">
|
|
<controls:GPOInfoControl ShowWarning="{x:Bind ViewModel.IsFindMyMouseEnabledGpoConfigured, Mode=OneWay}">
|
|
<tkcontrols:SettingsCard
|
|
Name="MouseUtilsEnableFindMyMouse"
|
|
x:Uid="MouseUtils_Enable_FindMyMouse"
|
|
HeaderIcon="{ui:BitmapIcon Source=/Assets/Settings/Icons/FindMyMouse.png}">
|
|
<ToggleSwitch
|
|
x:Uid="ToggleSwitch"
|
|
AutomationProperties.AutomationId="MouseUtils_FindMyMouseToggleId"
|
|
IsOn="{x:Bind ViewModel.IsFindMyMouseEnabled, Mode=TwoWay}" />
|
|
</tkcontrols:SettingsCard>
|
|
</controls:GPOInfoControl>
|
|
<tkcontrols:SettingsExpander
|
|
Name="MouseUtilsFindMyMouseActivationMethod"
|
|
x:Uid="MouseUtils_FindMyMouse_ActivationMethod"
|
|
AutomationProperties.AutomationId="MouseUtils_FindMyMouseActivationMethodId"
|
|
HeaderIcon="{ui:FontIcon Glyph=}"
|
|
IsEnabled="{x:Bind ViewModel.IsFindMyMouseEnabled, Mode=OneWay}">
|
|
<ComboBox MinWidth="{StaticResource SettingActionControlMinWidth}" SelectedIndex="{x:Bind Path=ViewModel.FindMyMouseActivationMethod, Mode=TwoWay}">
|
|
<ComboBoxItem x:Uid="MouseUtils_FindMyMouse_ActivationDoubleControlPress" />
|
|
<ComboBoxItem x:Uid="MouseUtils_FindMyMouse_ActivationDoubleRightControlPress" />
|
|
<ComboBoxItem x:Uid="MouseUtils_FindMyMouse_ActivationShakeMouse" />
|
|
<ComboBoxItem x:Uid="MouseUtils_FindMyMouse_ActivationCustomizedShortcut" />
|
|
</ComboBox>
|
|
<tkcontrols:SettingsExpander.Items>
|
|
<tkcontrols:SettingsCard ContentAlignment="Left" Visibility="{x:Bind ViewModel.FindMyMouseActivationMethod, Converter={StaticResource IndexBitFieldToVisibilityConverter}, Mode=OneWay, ConverterParameter=0x3}">
|
|
<!-- Visible for both Press Left Control twice and Press Right Control twice activation methods -->
|
|
<CheckBox x:Uid="MouseUtils_Include_Win_Key" IsChecked="{x:Bind ViewModel.FindMyMouseIncludeWinKey, Mode=TwoWay}" />
|
|
</tkcontrols:SettingsCard>
|
|
<tkcontrols:SettingsCard
|
|
Name="MouseUtilsFindMyMouseShakingMinimumDistance"
|
|
x:Uid="MouseUtils_FindMyMouse_ShakingMinimumDistance"
|
|
Visibility="{x:Bind ViewModel.FindMyMouseActivationMethod, Converter={StaticResource IndexBitFieldToVisibilityConverter}, Mode=OneWay, ConverterParameter=0x4}">
|
|
<!-- Visible for the Shake Mouse activation method -->
|
|
<NumberBox
|
|
MinWidth="{StaticResource SettingActionControlMinWidth}"
|
|
LargeChange="1000"
|
|
Maximum="1000000"
|
|
Minimum="0"
|
|
SmallChange="100"
|
|
SpinButtonPlacementMode="Compact"
|
|
Value="{x:Bind ViewModel.FindMyMouseShakingMinimumDistance, Mode=TwoWay}" />
|
|
</tkcontrols:SettingsCard>
|
|
<tkcontrols:SettingsCard
|
|
Name="MouseUtilsFindMyMouseShakingIntervalMs"
|
|
x:Uid="MouseUtils_FindMyMouse_ShakingIntervalMs"
|
|
Visibility="{x:Bind ViewModel.FindMyMouseActivationMethod, Converter={StaticResource IndexBitFieldToVisibilityConverter}, Mode=OneWay, ConverterParameter=0x4}">
|
|
<!-- Visible for the Shake Mouse activation method -->
|
|
<NumberBox
|
|
MinWidth="{StaticResource SettingActionControlMinWidth}"
|
|
LargeChange="1000"
|
|
Maximum="10000"
|
|
Minimum="100"
|
|
SmallChange="100"
|
|
SpinButtonPlacementMode="Compact"
|
|
Value="{x:Bind ViewModel.FindMyMouseShakingIntervalMs, Mode=TwoWay}" />
|
|
</tkcontrols:SettingsCard>
|
|
<tkcontrols:SettingsCard
|
|
Name="MouseUtilsFindMyMouseShakingFactor"
|
|
x:Uid="MouseUtils_FindMyMouse_ShakingFactor"
|
|
Visibility="{x:Bind ViewModel.FindMyMouseActivationMethod, Converter={StaticResource IndexBitFieldToVisibilityConverter}, Mode=OneWay, ConverterParameter=0x4}">
|
|
<!-- Visible for the Shake Mouse activation method -->
|
|
<NumberBox
|
|
MinWidth="{StaticResource SettingActionControlMinWidth}"
|
|
LargeChange="100"
|
|
Maximum="10000"
|
|
Minimum="150"
|
|
SmallChange="10"
|
|
SpinButtonPlacementMode="Compact"
|
|
Value="{x:Bind ViewModel.FindMyMouseShakingFactor, Mode=TwoWay}" />
|
|
</tkcontrols:SettingsCard>
|
|
<tkcontrols:SettingsCard
|
|
Name="MouseUtilsFindMyMouseActivationShortcut"
|
|
x:Uid="MouseUtils_FindMyMouse_ActivationShortcut"
|
|
HeaderIcon="{ui:FontIcon Glyph=}"
|
|
Visibility="{x:Bind ViewModel.FindMyMouseActivationMethod, Converter={StaticResource IndexBitFieldToVisibilityConverter}, Mode=OneWay, ConverterParameter=0x8}">
|
|
<!-- Visible for the Shortcut activation method -->
|
|
<controls:ShortcutControl MinWidth="{StaticResource SettingActionControlMinWidth}" HotkeySettings="{x:Bind Path=ViewModel.FindMyMouseActivationShortcut, Mode=TwoWay}" />
|
|
</tkcontrols:SettingsCard>
|
|
<tkcontrols:SettingsCard ContentAlignment="Left">
|
|
<CheckBox x:Uid="MouseUtils_Prevent_Activation_On_Game_Mode" IsChecked="{x:Bind ViewModel.FindMyMouseDoNotActivateOnGameMode, Mode=TwoWay}" />
|
|
</tkcontrols:SettingsCard>
|
|
</tkcontrols:SettingsExpander.Items>
|
|
</tkcontrols:SettingsExpander>
|
|
|
|
<tkcontrols:SettingsExpander
|
|
Name="FindMyMouseAppearanceBehavior"
|
|
x:Uid="Appearance_Behavior"
|
|
AutomationProperties.AutomationId="MouseUtils_FindMyMouseAppearanceBehaviorId"
|
|
HeaderIcon="{ui:FontIcon Glyph=}"
|
|
IsEnabled="{x:Bind ViewModel.IsFindMyMouseEnabled, Mode=OneWay}">
|
|
<tkcontrols:SettingsExpander.Items>
|
|
<!-- Overlay opacity removed; alpha now encoded in colors -->
|
|
<tkcontrols:SettingsCard Name="MouseUtilsFindMyMouseBackgroundColor" x:Uid="MouseUtils_FindMyMouse_BackgroundColor">
|
|
<controls:ColorPickerButton
|
|
AutomationProperties.AutomationId="MouseUtils_FindMyMouseBackgroundColorId"
|
|
IsAlphaEnabled="True"
|
|
SelectedColor="{x:Bind Path=ViewModel.FindMyMouseBackgroundColor, Mode=TwoWay}" />
|
|
</tkcontrols:SettingsCard>
|
|
<tkcontrols:SettingsCard Name="MouseUtilsFindMyMouseSpotlightColor" x:Uid="MouseUtils_FindMyMouse_SpotlightColor">
|
|
<controls:ColorPickerButton
|
|
AutomationProperties.AutomationId="MouseUtils_FindMyMouseSpotlightColorId"
|
|
IsAlphaEnabled="True"
|
|
SelectedColor="{x:Bind Path=ViewModel.FindMyMouseSpotlightColor, Mode=TwoWay}" />
|
|
</tkcontrols:SettingsCard>
|
|
<tkcontrols:SettingsCard Name="MouseUtilsFindMyMouseSpotlightRadius" x:Uid="MouseUtils_FindMyMouse_SpotlightRadius">
|
|
<NumberBox
|
|
MinWidth="{StaticResource SettingActionControlMinWidth}"
|
|
AutomationProperties.AutomationId="MouseUtils_FindMyMouseSpotlightRadiusId"
|
|
LargeChange="10"
|
|
Minimum="5"
|
|
SmallChange="1"
|
|
SpinButtonPlacementMode="Compact"
|
|
Value="{x:Bind ViewModel.FindMyMouseSpotlightRadius, Mode=TwoWay}" />
|
|
</tkcontrols:SettingsCard>
|
|
<tkcontrols:SettingsCard Name="MouseUtilsFindMyMouseSpotlightInitialZoom" x:Uid="MouseUtils_FindMyMouse_SpotlightInitialZoom">
|
|
<Slider
|
|
MinWidth="{StaticResource SettingActionControlMinWidth}"
|
|
AutomationProperties.AutomationId="MouseUtils_FindMyMouseSpotlightZoomId"
|
|
Maximum="40"
|
|
Minimum="1"
|
|
Value="{x:Bind ViewModel.FindMyMouseSpotlightInitialZoom, Mode=TwoWay}" />
|
|
</tkcontrols:SettingsCard>
|
|
<tkcontrols:SettingsCard Name="MouseUtilsFindMyMouseAnimationDurationMs" x:Uid="MouseUtils_FindMyMouse_AnimationDurationMs">
|
|
<NumberBox
|
|
MinWidth="{StaticResource SettingActionControlMinWidth}"
|
|
AutomationProperties.AutomationId="MouseUtils_FindMyMouseAnimationDurationId"
|
|
IsEnabled="{x:Bind ViewModel.IsAnimationEnabledBySystem, Mode=OneWay}"
|
|
LargeChange="100"
|
|
Minimum="0"
|
|
SmallChange="10"
|
|
SpinButtonPlacementMode="Compact"
|
|
Value="{x:Bind ViewModel.FindMyMouseAnimationDurationMs, Mode=TwoWay}" />
|
|
</tkcontrols:SettingsCard>
|
|
</tkcontrols:SettingsExpander.Items>
|
|
</tkcontrols:SettingsExpander>
|
|
<InfoBar
|
|
x:Uid="MouseUtils_FindMyMouse_AnimationDurationMs_Disabled"
|
|
IsClosable="False"
|
|
IsOpen="True"
|
|
Severity="Informational"
|
|
Visibility="{x:Bind ViewModel.IsAnimationEnabledBySystem, Mode=OneWay, Converter={StaticResource ReverseBoolToVisibilityConverter}}">
|
|
<InfoBar.ActionButton>
|
|
<HyperlinkButton x:Uid="OpenAnimationsSettings" Click="OpenAnimationsSettings_Click" />
|
|
</InfoBar.ActionButton>
|
|
</InfoBar>
|
|
<tkcontrols:SettingsExpander
|
|
Name="MouseUtilsFindMyMouseExcludedApps"
|
|
x:Uid="MouseUtils_FindMyMouse_ExcludedApps"
|
|
AutomationProperties.AutomationId="MouseUtils_FindMyMouseExcludedAppsId"
|
|
HeaderIcon="{ui:FontIcon Glyph=}"
|
|
IsEnabled="{x:Bind ViewModel.IsFindMyMouseEnabled, Mode=OneWay}">
|
|
<tkcontrols:SettingsExpander.Items>
|
|
<tkcontrols:SettingsCard HorizontalContentAlignment="Stretch" ContentAlignment="Vertical">
|
|
<TextBox
|
|
x:Uid="MouseUtils_FindMyMouse_ExcludedApps_TextBoxControl"
|
|
MinWidth="240"
|
|
MinHeight="160"
|
|
AcceptsReturn="True"
|
|
IsEnabled="{x:Bind ViewModel.IsFindMyMouseEnabled, Mode=OneWay}"
|
|
ScrollViewer.IsVerticalRailEnabled="True"
|
|
ScrollViewer.VerticalScrollBarVisibility="Visible"
|
|
ScrollViewer.VerticalScrollMode="Enabled"
|
|
Text="{x:Bind ViewModel.FindMyMouseExcludedApps, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
|
|
TextWrapping="Wrap" />
|
|
</tkcontrols:SettingsCard>
|
|
</tkcontrols:SettingsExpander.Items>
|
|
</tkcontrols:SettingsExpander>
|
|
</controls:SettingsGroup>
|
|
|
|
<controls:SettingsGroup x:Uid="MouseUtils_MouseHighlighter" AutomationProperties.AutomationId="MouseUtils_MouseHighlighterTestId">
|
|
<controls:GPOInfoControl ShowWarning="{x:Bind ViewModel.IsHighlighterEnabledGpoConfigured, Mode=OneWay}">
|
|
<tkcontrols:SettingsCard
|
|
Name="MouseUtilsEnableMouseHighlighter"
|
|
x:Uid="MouseUtils_Enable_MouseHighlighter"
|
|
HeaderIcon="{ui:BitmapIcon Source=/Assets/Settings/Icons/MouseHighlighter.png}">
|
|
<ToggleSwitch
|
|
x:Uid="ToggleSwitch"
|
|
AutomationProperties.AutomationId="MouseUtils_MouseHighlighterToggleId"
|
|
IsOn="{x:Bind ViewModel.IsMouseHighlighterEnabled, Mode=TwoWay}" />
|
|
</tkcontrols:SettingsCard>
|
|
</controls:GPOInfoControl>
|
|
<tkcontrols:SettingsExpander
|
|
Name="MouseUtilsMouseHighlighterActivationShortcut"
|
|
x:Uid="MouseUtils_MouseHighlighter_ActivationShortcut"
|
|
AutomationProperties.AutomationId="MouseUtils_MouseHighlighterActivationShortcutId"
|
|
HeaderIcon="{ui:FontIcon Glyph=}"
|
|
IsEnabled="{x:Bind ViewModel.IsMouseHighlighterEnabled, Mode=OneWay}">
|
|
<controls:ShortcutControl MinWidth="{StaticResource SettingActionControlMinWidth}" HotkeySettings="{x:Bind Path=ViewModel.MouseHighlighterActivationShortcut, Mode=TwoWay}" />
|
|
<tkcontrols:SettingsExpander.Items>
|
|
<tkcontrols:SettingsCard ContentAlignment="Left">
|
|
<CheckBox x:Uid="MouseUtils_AutoActivate" IsChecked="{x:Bind ViewModel.MouseHighlighterAutoActivate, Mode=TwoWay}" />
|
|
</tkcontrols:SettingsCard>
|
|
</tkcontrols:SettingsExpander.Items>
|
|
</tkcontrols:SettingsExpander>
|
|
<tkcontrols:SettingsExpander
|
|
Name="MouseHighlighterAppearanceBehavior"
|
|
x:Uid="Appearance_Behavior"
|
|
AutomationProperties.AutomationId="MouseUtils_MouseHighlighterAppearanceBehaviorId"
|
|
HeaderIcon="{ui:FontIcon Glyph=}"
|
|
IsEnabled="{x:Bind ViewModel.IsMouseHighlighterEnabled, Mode=OneWay}">
|
|
<tkcontrols:SettingsExpander.Items>
|
|
<tkcontrols:SettingsCard x:Uid="MouseUtils_MouseHighlighter_PrimaryButtonClickColor" IsEnabled="{x:Bind ViewModel.IsSpotlightModeEnabled, Mode=OneWay, Converter={StaticResource BoolNegationConverter}}">
|
|
<controls:ColorPickerButton IsAlphaEnabled="True" SelectedColor="{x:Bind Path=ViewModel.MouseHighlighterLeftButtonClickColor, Mode=TwoWay}" />
|
|
</tkcontrols:SettingsCard>
|
|
<tkcontrols:SettingsCard x:Uid="MouseUtils_MouseHighlighter_SecondaryButtonClickColor" IsEnabled="{x:Bind ViewModel.IsSpotlightModeEnabled, Mode=OneWay, Converter={StaticResource BoolNegationConverter}}">
|
|
<controls:ColorPickerButton IsAlphaEnabled="True" SelectedColor="{x:Bind Path=ViewModel.MouseHighlighterRightButtonClickColor, Mode=TwoWay}" />
|
|
</tkcontrols:SettingsCard>
|
|
<tkcontrols:SettingsCard Name="MouseUtilsMouseHighlighterAlwaysColor" x:Uid="MouseUtils_MouseHighlighter_AlwaysColor">
|
|
<controls:ColorPickerButton IsAlphaEnabled="True" SelectedColor="{x:Bind Path=ViewModel.MouseHighlighterAlwaysColor, Mode=TwoWay}" />
|
|
</tkcontrols:SettingsCard>
|
|
<tkcontrols:SettingsCard x:Uid="HighlightMode">
|
|
<ComboBox
|
|
x:Uid="MouseUtils_MouseHighlighter_SpotlightModeType"
|
|
MinWidth="{StaticResource SettingActionControlMinWidth}"
|
|
SelectedIndex="{x:Bind ViewModel.IsSpotlightModeEnabled, Converter={StaticResource ReverseBoolToComboBoxIndexConverter}, Mode=TwoWay}">
|
|
<ComboBoxItem x:Uid="HighlightMode_Spotlight_Mode" />
|
|
<ComboBoxItem x:Uid="HighlightMode_Circle_Highlight_Mode" />
|
|
</ComboBox>
|
|
</tkcontrols:SettingsCard>
|
|
<tkcontrols:SettingsCard x:Uid="MouseUtils_MouseHighlighter_HighlightRadius">
|
|
<NumberBox
|
|
MinWidth="{StaticResource SettingActionControlMinWidth}"
|
|
LargeChange="10"
|
|
Minimum="5"
|
|
SmallChange="1"
|
|
SpinButtonPlacementMode="Compact"
|
|
Value="{x:Bind ViewModel.MouseHighlighterRadius, Mode=TwoWay}" />
|
|
</tkcontrols:SettingsCard>
|
|
<tkcontrols:SettingsCard Name="MouseUtilsMouseHighlighterFadeDelayMs" x:Uid="MouseUtils_MouseHighlighter_FadeDelayMs">
|
|
<NumberBox
|
|
MinWidth="{StaticResource SettingActionControlMinWidth}"
|
|
LargeChange="100"
|
|
Minimum="0"
|
|
SmallChange="10"
|
|
SpinButtonPlacementMode="Compact"
|
|
Value="{x:Bind ViewModel.MouseHighlighterFadeDelayMs, Mode=TwoWay}" />
|
|
</tkcontrols:SettingsCard>
|
|
<tkcontrols:SettingsCard Name="MouseUtilsMouseHighlighterFadeDurationMs" x:Uid="MouseUtils_MouseHighlighter_FadeDurationMs">
|
|
<NumberBox
|
|
MinWidth="{StaticResource SettingActionControlMinWidth}"
|
|
LargeChange="100"
|
|
Minimum="0"
|
|
SmallChange="10"
|
|
SpinButtonPlacementMode="Compact"
|
|
Value="{x:Bind ViewModel.MouseHighlighterFadeDurationMs, Mode=TwoWay}" />
|
|
</tkcontrols:SettingsCard>
|
|
</tkcontrols:SettingsExpander.Items>
|
|
</tkcontrols:SettingsExpander>
|
|
</controls:SettingsGroup>
|
|
|
|
<panels:MouseJumpPanel x:Name="MouseUtils_MouseJump_Panel" x:Uid="MouseUtils_MouseJump_Panel" />
|
|
|
|
<controls:SettingsGroup x:Uid="MouseUtils_MousePointerCrosshairs" AutomationProperties.AutomationId="MouseUtils_MousePointerCrosshairsTestId">
|
|
<controls:GPOInfoControl ShowWarning="{x:Bind ViewModel.IsMousePointerCrosshairsEnabledGpoConfigured, Mode=OneWay}">
|
|
<tkcontrols:SettingsCard
|
|
Name="MouseUtilsEnableMousePointerCrosshairs"
|
|
x:Uid="MouseUtils_Enable_MousePointerCrosshairs"
|
|
HeaderIcon="{ui:BitmapIcon Source=/Assets/Settings/Icons/MouseCrosshairs.png}">
|
|
<ToggleSwitch
|
|
x:Uid="ToggleSwitch"
|
|
AutomationProperties.AutomationId="MouseUtils_MousePointerCrosshairsToggleId"
|
|
IsOn="{x:Bind ViewModel.IsMousePointerCrosshairsEnabled, Mode=TwoWay}" />
|
|
</tkcontrols:SettingsCard>
|
|
</controls:GPOInfoControl>
|
|
<tkcontrols:SettingsExpander
|
|
Name="MouseUtilsMousePointerCrosshairsActivationShortcut"
|
|
x:Uid="MouseUtils_MousePointerCrosshairs_ActivationShortcut"
|
|
HeaderIcon="{ui:FontIcon Glyph=}"
|
|
IsEnabled="{x:Bind ViewModel.IsMousePointerCrosshairsEnabled, Mode=OneWay}">
|
|
<controls:ShortcutControl MinWidth="{StaticResource SettingActionControlMinWidth}" HotkeySettings="{x:Bind Path=ViewModel.MousePointerCrosshairsActivationShortcut, Mode=TwoWay}" />
|
|
<tkcontrols:SettingsExpander.Items>
|
|
<tkcontrols:SettingsCard ContentAlignment="Left">
|
|
<CheckBox x:Uid="MouseUtils_AutoActivate" IsChecked="{x:Bind ViewModel.MousePointerCrosshairsAutoActivate, Mode=TwoWay}" />
|
|
</tkcontrols:SettingsCard>
|
|
</tkcontrols:SettingsExpander.Items>
|
|
</tkcontrols:SettingsExpander>
|
|
|
|
<tkcontrols:SettingsExpander
|
|
Name="MousePointerCrosshairsAppearanceBehavior"
|
|
x:Uid="Appearance_Behavior"
|
|
AutomationProperties.AutomationId="MouseUtils_MousePointerCrosshairsAppearanceBehaviorId"
|
|
HeaderIcon="{ui:FontIcon Glyph=}"
|
|
IsEnabled="{x:Bind ViewModel.IsMousePointerCrosshairsEnabled, Mode=OneWay}">
|
|
<tkcontrols:SettingsExpander.Items>
|
|
<tkcontrols:SettingsCard Name="MouseUtilsMousePointerCrosshairsCrosshairsColor" x:Uid="MouseUtils_MousePointerCrosshairs_CrosshairsColor">
|
|
<controls:ColorPickerButton SelectedColor="{x:Bind Path=ViewModel.MousePointerCrosshairsColor, Mode=TwoWay}" />
|
|
</tkcontrols:SettingsCard>
|
|
<tkcontrols:SettingsCard Name="MouseUtilsMousePointerCrosshairsCrosshairsOpacity" x:Uid="MouseUtils_MousePointerCrosshairs_CrosshairsOpacity">
|
|
<Slider
|
|
MinWidth="{StaticResource SettingActionControlMinWidth}"
|
|
Maximum="100"
|
|
Minimum="1"
|
|
Value="{x:Bind ViewModel.MousePointerCrosshairsOpacity, Mode=TwoWay}" />
|
|
</tkcontrols:SettingsCard>
|
|
|
|
<tkcontrols:SettingsCard Name="MouseUtilsMousePointerCrosshairsCrosshairsRadius" x:Uid="MouseUtils_MousePointerCrosshairs_CrosshairsRadius">
|
|
<NumberBox
|
|
MinWidth="{StaticResource SettingActionControlMinWidth}"
|
|
LargeChange="10"
|
|
Maximum="500"
|
|
Minimum="0"
|
|
SmallChange="1"
|
|
SpinButtonPlacementMode="Compact"
|
|
Value="{x:Bind ViewModel.MousePointerCrosshairsRadius, Mode=TwoWay}" />
|
|
</tkcontrols:SettingsCard>
|
|
|
|
<tkcontrols:SettingsCard Name="MouseUtilsMousePointerCrosshairsCrosshairsThickness" x:Uid="MouseUtils_MousePointerCrosshairs_CrosshairsThickness">
|
|
<NumberBox
|
|
MinWidth="{StaticResource SettingActionControlMinWidth}"
|
|
LargeChange="10"
|
|
Maximum="50"
|
|
Minimum="1"
|
|
SmallChange="1"
|
|
SpinButtonPlacementMode="Compact"
|
|
Value="{x:Bind ViewModel.MousePointerCrosshairsThickness, Mode=TwoWay}" />
|
|
</tkcontrols:SettingsCard>
|
|
|
|
<tkcontrols:SettingsCard Name="MouseUtilsMousePointerCrosshairsCrosshairsBorderColor" x:Uid="MouseUtils_MousePointerCrosshairs_CrosshairsBorderColor">
|
|
<controls:ColorPickerButton SelectedColor="{x:Bind Path=ViewModel.MousePointerCrosshairsBorderColor, Mode=TwoWay}" />
|
|
</tkcontrols:SettingsCard>
|
|
|
|
<tkcontrols:SettingsCard Name="MouseUtilsMousePointerCrosshairsCrosshairsBorderSize" x:Uid="MouseUtils_MousePointerCrosshairs_CrosshairsBorderSize">
|
|
<NumberBox
|
|
MinWidth="{StaticResource SettingActionControlMinWidth}"
|
|
LargeChange="2"
|
|
Maximum="50"
|
|
Minimum="0"
|
|
SmallChange="1"
|
|
SpinButtonPlacementMode="Compact"
|
|
Value="{x:Bind ViewModel.MousePointerCrosshairsBorderSize, Mode=TwoWay}" />
|
|
</tkcontrols:SettingsCard>
|
|
|
|
<tkcontrols:SettingsCard Name="MouseUtilsMousePointerCrosshairsCrosshairsOrientation" x:Uid="MouseUtils_MousePointerCrosshairs_CrosshairsOrientation">
|
|
<ComboBox MinWidth="{StaticResource SettingActionControlMinWidth}" SelectedIndex="{x:Bind Path=ViewModel.MousePointerCrosshairsOrientation, Mode=TwoWay}">
|
|
<ComboBoxItem x:Uid="MouseUtils_MousePointerCrosshairs_CrosshairsOrientation_Both" />
|
|
<ComboBoxItem x:Uid="MouseUtils_MousePointerCrosshairs_CrosshairsOrientation_Vertical" />
|
|
<ComboBoxItem x:Uid="MouseUtils_MousePointerCrosshairs_CrosshairsOrientation_Horizontal" />
|
|
</ComboBox>
|
|
</tkcontrols:SettingsCard>
|
|
|
|
<tkcontrols:SettingsCard ContentAlignment="Left">
|
|
<CheckBox x:Uid="MouseUtils_MousePointerCrosshairs_CrosshairsAutoHide" IsChecked="{x:Bind ViewModel.MousePointerCrosshairsAutoHide, Mode=TwoWay}" />
|
|
</tkcontrols:SettingsCard>
|
|
|
|
<tkcontrols:SettingsCard Name="MouseUtilsMousePointerCrosshairsIsCrosshairsFixedLengthEnabled" x:Uid="MouseUtils_MousePointerCrosshairs_IsCrosshairsFixedLengthEnabled">
|
|
<ToggleSwitch x:Uid="ToggleSwitch" IsOn="{x:Bind ViewModel.MousePointerCrosshairsIsFixedLengthEnabled, Mode=TwoWay}" />
|
|
</tkcontrols:SettingsCard>
|
|
|
|
<tkcontrols:SettingsCard
|
|
Name="MouseUtilsMousePointerCrosshairsCrosshairsFixedLength"
|
|
x:Uid="MouseUtils_MousePointerCrosshairs_CrosshairsFixedLength"
|
|
IsEnabled="{x:Bind ViewModel.MousePointerCrosshairsIsFixedLengthEnabled, Mode=OneWay}">
|
|
<NumberBox
|
|
MinWidth="{StaticResource SettingActionControlMinWidth}"
|
|
LargeChange="10"
|
|
Minimum="1"
|
|
SmallChange="1"
|
|
SpinButtonPlacementMode="Compact"
|
|
Value="{x:Bind ViewModel.MousePointerCrosshairsFixedLength, Mode=TwoWay}" />
|
|
</tkcontrols:SettingsCard>
|
|
</tkcontrols:SettingsExpander.Items>
|
|
</tkcontrols:SettingsExpander>
|
|
|
|
<tkcontrols:SettingsExpander
|
|
x:Uid="MouseUtils_GlidingCursor"
|
|
HeaderIcon="{ui:FontIcon Glyph=}"
|
|
IsEnabled="{x:Bind ViewModel.IsMousePointerCrosshairsEnabled, Mode=OneWay}">
|
|
<controls:ShortcutControl MinWidth="{StaticResource SettingActionControlMinWidth}" HotkeySettings="{x:Bind Path=ViewModel.GlidingCursorActivationShortcut, Mode=TwoWay}" />
|
|
<tkcontrols:SettingsExpander.Items>
|
|
<tkcontrols:SettingsCard x:Uid="MouseUtils_GlidingCursor_InitialSpeed">
|
|
<Slider
|
|
Maximum="60"
|
|
Minimum="5"
|
|
Value="{x:Bind ViewModel.GlidingCursorTravelSpeed, Mode=TwoWay}" />
|
|
</tkcontrols:SettingsCard>
|
|
<tkcontrols:SettingsCard x:Uid="MouseUtils_GlidingCursor_DelaySpeed">
|
|
<Slider
|
|
Maximum="60"
|
|
Minimum="5"
|
|
Value="{x:Bind ViewModel.GlidingCursorDelaySpeed, Mode=TwoWay}" />
|
|
</tkcontrols:SettingsCard>
|
|
</tkcontrols:SettingsExpander.Items>
|
|
</tkcontrols:SettingsExpander>
|
|
</controls:SettingsGroup>
|
|
</StackPanel>
|
|
</controls:SettingsPageControl.ModuleContent>
|
|
<controls:SettingsPageControl.PrimaryLinks>
|
|
<controls:PageLink x:Uid="LearnMore_MouseUtils" Link="https://aka.ms/PowerToysOverview_MouseUtilities" />
|
|
</controls:SettingsPageControl.PrimaryLinks>
|
|
<controls:SettingsPageControl.SecondaryLinks>
|
|
<controls:PageLink Link="https://devblogs.microsoft.com/oldnewthing/author/oldnewthing" Text="Raymond Chen's Find My Mouse" />
|
|
<controls:PageLink Link="https://michael-clayton.com/projects/fancymouse" Text="Michael Clayton's Mouse Jump (FancyMouse)" />
|
|
</controls:SettingsPageControl.SecondaryLinks>
|
|
</controls:SettingsPageControl>
|
|
</local:NavigablePage>
|