From 29471231dd4efdb4433163be135c839177287cdc Mon Sep 17 00:00:00 2001 From: Lucas Martins <64702398+APONTES19@users.noreply.github.com> Date: Wed, 12 Aug 2026 22:56:33 -0300 Subject: [PATCH] Add FancyZones monitor window rotation (#48772) # Summary Adds an opt-in FancyZones feature to rotate processable windows across connected monitors. The feature lets users hold the configured monitor rotation hotkey, preview the current monitor content order, and rotate windows left or right across monitor work areas using the arrow keys. The overlay keeps content numbers visually consistent while windows move between monitors. This change was prototyped and implemented with assistance from Codex. # Demo ![Monitor window rotation demo](https://raw.githubusercontent.com/APONTES19/PowerToys/feature/monitor-window-rotation/doc/images/fancyzones/monitor-window-rotation.gif) # Details - Adds FancyZones settings for monitor rotation and its activation hotkey. - Adds Settings UI controls under FancyZones > Windows. - Extends the FancyZones keyboard hook to forward keyup events. - Adds window snapshot, monitor mapping, and work-area-relative rotation logic. - Adds a dark visual overlay with monitor-content numbering and directional transition hints. - Updates FancyZones settings parsing coverage. # Validation - Built `FancyZonesLib.vcxproj` successfully. - Built `FancyZones.vcxproj` successfully. - Built Settings UI projects successfully. - Built Runner successfully. - Ran focused FancyZones settings parse tests successfully. - Manual validation performed on a multi-monitor setup. # Notes The feature is disabled by default and must be enabled from FancyZones settings. --------- Co-authored-by: Muyuan Li (from Dev Box) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2b3acca3-e49b-4936-8fb9-6f669bd449db --- .../fancyzones/monitor-window-rotation.gif | Bin 0 -> 203943 bytes .../fancyzones/FancyZones/FancyZonesApp.cpp | 8 +- .../fancyzones/FancyZones/FancyZonesApp.h | 2 +- .../fancyzones/FancyZonesLib/FancyZones.cpp | 456 +++++++++++++++++- .../fancyzones/FancyZonesLib/FancyZones.h | 64 +++ .../FancyZonesWinHookEventIDs.cpp | 6 + .../FancyZonesLib/FancyZonesWinHookEventIDs.h | 3 + .../fancyzones/FancyZonesLib/Settings.cpp | 13 + .../fancyzones/FancyZonesLib/Settings.h | 2 + .../FancyZonesLib/SettingsConstants.h | 4 +- .../fancyzones/FancyZonesLib/WorkArea.cpp | 26 +- .../fancyzones/FancyZonesLib/WorkArea.h | 4 + .../fancyzones/FancyZonesLib/ZonesOverlay.cpp | 315 +++++++++++- .../fancyzones/FancyZonesLib/ZonesOverlay.h | 16 + .../UnitTests/FancyZonesSettings.Spec.cpp | 84 ++++ .../Settings.UI.Library/FZConfigProperties.cs | 10 + .../SettingsXAML/Views/FancyZonesPage.xaml | 23 +- .../Settings.UI/Strings/en-us/Resources.resw | 14 +- .../ViewModels/FancyZonesViewModel.cs | 61 ++- 19 files changed, 1102 insertions(+), 9 deletions(-) create mode 100755 doc/images/fancyzones/monitor-window-rotation.gif diff --git a/doc/images/fancyzones/monitor-window-rotation.gif b/doc/images/fancyzones/monitor-window-rotation.gif new file mode 100755 index 0000000000000000000000000000000000000000..7e0987055d08307e0687fc5e60758b218068bd03 GIT binary patch literal 203943 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ഝn uo1k#Bk5;dwj#nM<4f5-~(NMmdSZ}#^$xK|7(Pu6Ae{%VMoACb)!2Sz5ctQpM literal 0 HcmV?d00001 diff --git a/src/modules/fancyzones/FancyZones/FancyZonesApp.cpp b/src/modules/fancyzones/FancyZones/FancyZonesApp.cpp index 42fad34a3d..97faaf8135 100644 --- a/src/modules/fancyzones/FancyZones/FancyZonesApp.cpp +++ b/src/modules/fancyzones/FancyZones/FancyZonesApp.cpp @@ -188,5 +188,11 @@ void FancyZonesApp::HandleWinHookEvent(WinHookEvent* data) noexcept intptr_t FancyZonesApp::HandleKeyboardHookEvent(LowlevelKeyboardEvent* data) noexcept { - return m_app.as()->OnKeyDown(data->lParam); + auto fzCallback = m_app.as(); + if (data->wParam == WM_KEYUP || data->wParam == WM_SYSKEYUP) + { + return fzCallback->OnKeyUp(data->lParam); + } + + return fzCallback->OnKeyDown(data->lParam); } diff --git a/src/modules/fancyzones/FancyZones/FancyZonesApp.h b/src/modules/fancyzones/FancyZones/FancyZonesApp.h index 44c6a306a9..a5f09801bc 100644 --- a/src/modules/fancyzones/FancyZones/FancyZonesApp.h +++ b/src/modules/fancyzones/FancyZones/FancyZonesApp.h @@ -34,7 +34,7 @@ private: static LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) { LowlevelKeyboardEvent event; - if (nCode == HC_ACTION && wParam == WM_KEYDOWN) + if (nCode == HC_ACTION && (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN || wParam == WM_KEYUP || wParam == WM_SYSKEYUP)) { event.lParam = reinterpret_cast(lParam); event.wParam = wParam; diff --git a/src/modules/fancyzones/FancyZonesLib/FancyZones.cpp b/src/modules/fancyzones/FancyZonesLib/FancyZones.cpp index af5cea003e..52483b16ec 100644 --- a/src/modules/fancyzones/FancyZonesLib/FancyZones.cpp +++ b/src/modules/fancyzones/FancyZonesLib/FancyZones.cpp @@ -66,11 +66,158 @@ namespace NonLocalizable const wchar_t FZEditorExecutablePath[] = L"PowerToys.FancyZonesEditor.exe"; } +namespace +{ + constexpr UINT_PTR MonitorRotationCommitTimerId = 0x4D525443; + constexpr UINT MonitorRotationCommitDelayMillis = 760; + + struct WindowRotationSnapshot + { + HWND window{}; + HMONITOR sourceMonitor{}; + RECT sourceRect{}; + }; + + std::optional FindMonitorIndex(HMONITOR monitor, const std::vector>& monitors) noexcept + { + const auto iter = std::find_if(monitors.begin(), monitors.end(), [monitor](const auto& entry) { + return entry.first == monitor; + }); + + if (iter == monitors.end()) + { + return std::nullopt; + } + + return static_cast(std::distance(monitors.begin(), iter)); + } + + std::vector CollectWindowRotationSnapshots() + { + std::vector windows; + EnumWindows( + [](HWND window, LPARAM param) -> BOOL { + if (!FancyZonesWindowProcessing::IsProcessableManually(window)) + { + return TRUE; + } + + RECT rect{}; + if (!GetWindowRect(window, &rect) || rect.left == rect.right || rect.top == rect.bottom) + { + return TRUE; + } + + auto sourceMonitor = MonitorFromWindow(window, MONITOR_DEFAULTTONULL); + if (!sourceMonitor) + { + return TRUE; + } + + auto& snapshots = *reinterpret_cast*>(param); + snapshots.push_back({ .window = window, .sourceMonitor = sourceMonitor, .sourceRect = rect }); + return TRUE; + }, + reinterpret_cast(&windows)); + + return windows; + } + + constexpr bool IsRotationPreviewReleaseKey(DWORD vkCode) noexcept + { + return vkCode == VK_LWIN || vkCode == VK_RWIN || vkCode == VK_CONTROL || vkCode == VK_LCONTROL || vkCode == VK_RCONTROL || vkCode == VK_MENU || vkCode == VK_LMENU || vkCode == VK_RMENU || vkCode == VK_SHIFT || vkCode == VK_LSHIFT || vkCode == VK_RSHIFT; + } + + constexpr bool IsWinKey(DWORD vkCode) noexcept + { + return vkCode == VK_LWIN || vkCode == VK_RWIN; + } + + constexpr bool IsCtrlKey(DWORD vkCode) noexcept + { + return vkCode == VK_CONTROL || vkCode == VK_LCONTROL || vkCode == VK_RCONTROL; + } + + constexpr bool IsAltKey(DWORD vkCode) noexcept + { + return vkCode == VK_MENU || vkCode == VK_LMENU || vkCode == VK_RMENU; + } + + constexpr bool IsShiftKey(DWORD vkCode) noexcept + { + return vkCode == VK_SHIFT || vkCode == VK_LSHIFT || vkCode == VK_RSHIFT; + } + + size_t GetMonitorDisplayNumber(HMONITOR monitor, size_t fallback) noexcept + { + MONITORINFOEX monitorInfo{}; + monitorInfo.cbSize = sizeof(MONITORINFOEX); + if (!GetMonitorInfoW(monitor, &monitorInfo)) + { + return fallback; + } + + std::wstring deviceName = monitorInfo.szDevice; + const auto digitStart = deviceName.find_last_not_of(L"0123456789"); + if (digitStart == std::wstring::npos || digitStart + 1 >= deviceName.size()) + { + return fallback; + } + + try + { + return static_cast(std::stoul(deviceName.substr(digitStart + 1))); + } + catch (...) + { + return fallback; + } + } +} + +namespace MonitorRotation +{ + LONG ScaleCoordinate(LONG value, LONG sourceStart, LONG sourceSize, LONG targetStart, LONG targetSize) noexcept + { + if (sourceSize == 0) + { + return targetStart; + } + + return targetStart + MulDiv(value - sourceStart, targetSize, sourceSize); + } + + RECT MapRectBetweenMonitorWorkAreas(const RECT& windowRect, const RECT& sourceWorkArea, const RECT& targetWorkArea) noexcept + { + const LONG sourceWidth = sourceWorkArea.right - sourceWorkArea.left; + const LONG sourceHeight = sourceWorkArea.bottom - sourceWorkArea.top; + const LONG targetWidth = targetWorkArea.right - targetWorkArea.left; + const LONG targetHeight = targetWorkArea.bottom - targetWorkArea.top; + + return RECT{ + .left = ScaleCoordinate(windowRect.left, sourceWorkArea.left, sourceWidth, targetWorkArea.left, targetWidth), + .top = ScaleCoordinate(windowRect.top, sourceWorkArea.top, sourceHeight, targetWorkArea.top, targetHeight), + .right = ScaleCoordinate(windowRect.right, sourceWorkArea.left, sourceWidth, targetWorkArea.left, targetWidth), + .bottom = ScaleCoordinate(windowRect.bottom, sourceWorkArea.top, sourceHeight, targetWorkArea.top, targetHeight), + }; + } + + size_t GetRotatedMonitorIndex(size_t sourceIndex, size_t monitorCount, bool reverse) noexcept + { + if (reverse) + { + return sourceIndex == 0 ? monitorCount - 1 : sourceIndex - 1; + } + + return (sourceIndex + 1) % monitorCount; + } +} + struct FancyZones : public winrt::implements, public SettingsObserver { public: FancyZones(HINSTANCE hinstance, std::function disableModuleCallbackFunction) noexcept : - SettingsObserver({ SettingId::EditorHotkey, SettingId::WindowSwitching, SettingId::PrevTabHotkey, SettingId::NextTabHotkey, SettingId::SpanZonesAcrossMonitors }), + SettingsObserver({ SettingId::EditorHotkey, SettingId::WindowSwitching, SettingId::PrevTabHotkey, SettingId::NextTabHotkey, SettingId::SpanZonesAcrossMonitors, SettingId::MonitorRotation, SettingId::MonitorRotationHotkey }), m_hinstance(hinstance), m_draggingState([this]() { PostMessageW(m_window, WM_PRIV_LOCATIONCHANGE, NULL, NULL); @@ -143,6 +290,8 @@ public: VirtualDesktopChanged() noexcept; IFACEMETHODIMP_(bool) OnKeyDown(PKBDLLHOOKSTRUCT info) noexcept; + IFACEMETHODIMP_(bool) + OnKeyUp(PKBDLLHOOKSTRUCT info) noexcept; void MoveSizeStart(HWND window, HMONITOR monitor); void MoveSizeUpdate(HMONITOR monitor, POINT const& ptScreen); @@ -163,6 +312,13 @@ private: void UpdateWorkAreas(bool updateWindowPositions) noexcept; bool ShouldWorkAreasBeRecreated(const std::vector& monitors, const GUID& virtualDesktop, const std::unordered_map>& workAreas) noexcept; void CycleWindows(bool reverse) noexcept; + void RotateWindowsAcrossMonitors(bool reverse) noexcept; + void ShowMonitorRotationPreview(std::optional reverse = std::nullopt, bool animateRotation = false) noexcept; + void HideMonitorRotationPreview() noexcept; + void EnsureMonitorRotationContentNumbers(const std::vector>& monitors) noexcept; + void RotateMonitorRotationContentNumbers(bool reverse) noexcept; + bool IsMonitorRotationActivatorKey(DWORD vkCode) const noexcept; + bool IsMonitorRotationChordDown() const noexcept; void SyncVirtualDesktops() noexcept; @@ -186,6 +342,10 @@ private: WindowKeyboardSnap m_windowKeyboardSnapper{}; WorkAreaConfiguration m_workAreaConfiguration; DraggingState m_draggingState; + bool m_monitorRotationPreviewActive = false; + MonitorRotation::KeyState m_monitorRotationKeyState; + std::optional m_pendingMonitorRotationReverse; + std::unordered_map m_monitorRotationContentNumbers; wil::unique_handle m_terminateEditorEvent; // Handle of FancyZonesEditor.exe we launch and wait on @@ -482,11 +642,50 @@ void FancyZones::WindowCreated(HWND window) noexcept IFACEMETHODIMP_(bool) FancyZones::OnKeyDown(PKBDLLHOOKSTRUCT info) noexcept { + m_monitorRotationKeyState.Update(info->vkCode, true); + // Return true to swallow the keyboard event bool const shift = GetAsyncKeyState(VK_SHIFT) & 0x8000; bool const win = GetAsyncKeyState(VK_LWIN) & 0x8000 || GetAsyncKeyState(VK_RWIN) & 0x8000; bool const alt = GetAsyncKeyState(VK_MENU) & 0x8000; bool const ctrl = GetAsyncKeyState(VK_CONTROL) & 0x8000; + if (IsMonitorRotationChordDown()) + { + if (!m_monitorRotationPreviewActive) + { + m_monitorRotationPreviewActive = true; + PostMessageW(m_window, WM_PRIV_MONITOR_ROTATION_PREVIEW_SHOW, 0, 0); + } + + if (info->vkCode == VK_LEFT || info->vkCode == VK_RIGHT) + { + if (!m_pendingMonitorRotationReverse.has_value()) + { + const bool reverse = info->vkCode == VK_LEFT; + PostMessageW(m_window, WM_PRIV_MONITOR_ROTATION_PREVIEW_ROTATE, static_cast(reverse), 0); + } + + m_monitorRotationKeyState.Consume(info->vkCode); + return true; + } + + if (IsMonitorRotationActivatorKey(info->vkCode)) + { + m_monitorRotationKeyState.Consume(info->vkCode); + return true; + } + + if (IsRotationPreviewReleaseKey(info->vkCode)) + { + return false; + } + } + else if (m_monitorRotationPreviewActive) + { + m_monitorRotationPreviewActive = false; + PostMessageW(m_window, WM_PRIV_MONITOR_ROTATION_PREVIEW_HIDE, 0, 0); + } + if ((win && !shift && !ctrl) || (win && ctrl && alt)) { if ((info->vkCode == VK_RIGHT) || (info->vkCode == VK_LEFT) || (info->vkCode == VK_UP) || (info->vkCode == VK_DOWN)) @@ -541,6 +740,48 @@ FancyZones::OnKeyDown(PKBDLLHOOKSTRUCT info) noexcept return false; } +IFACEMETHODIMP_(bool) +FancyZones::OnKeyUp(PKBDLLHOOKSTRUCT info) noexcept +{ + const bool wasMonitorRotationPreviewActive = m_monitorRotationPreviewActive; + const bool isActivatorKey = IsMonitorRotationActivatorKey(info->vkCode); + const bool wasConsumed = m_monitorRotationKeyState.ReleaseWasConsumed(info->vkCode); + m_monitorRotationKeyState.Update(info->vkCode, false); + + if (wasMonitorRotationPreviewActive && !IsMonitorRotationChordDown()) + { + m_monitorRotationPreviewActive = false; + PostMessageW(m_window, WM_PRIV_MONITOR_ROTATION_PREVIEW_HIDE, 0, 0); + return isActivatorKey || wasConsumed; + } + + return wasConsumed; +} + +bool FancyZones::IsMonitorRotationChordDown() const noexcept +{ + if (!FancyZonesSettings::settings().monitorRotation) + { + return false; + } + + const auto& hotkey = FancyZonesSettings::settings().monitorRotationHotkey; + const bool winDown = m_monitorRotationKeyState.IsAnyDown({ VK_LWIN, VK_RWIN }); + const bool ctrlDown = m_monitorRotationKeyState.IsAnyDown({ VK_CONTROL, VK_LCONTROL, VK_RCONTROL }); + const bool altDown = m_monitorRotationKeyState.IsAnyDown({ VK_MENU, VK_LMENU, VK_RMENU }); + const bool shiftDown = m_monitorRotationKeyState.IsAnyDown({ VK_SHIFT, VK_LSHIFT, VK_RSHIFT }); + return hotkey.win_pressed() == winDown && + hotkey.ctrl_pressed() == ctrlDown && + hotkey.alt_pressed() == altDown && + hotkey.shift_pressed() == shiftDown && + m_monitorRotationKeyState.IsDown(hotkey.get_code()); +} + +bool FancyZones::IsMonitorRotationActivatorKey(DWORD vkCode) const noexcept +{ + return vkCode == FancyZonesSettings::settings().monitorRotationHotkey.get_code(); +} + void FancyZones::ToggleEditor() noexcept { _TRACER_; @@ -766,6 +1007,41 @@ LRESULT FancyZones::WndProc(HWND window, UINT message, WPARAM wparam, LPARAM lpa { ApplyQuickLayout(static_cast(lparam)); } + else if (message == WM_PRIV_MONITOR_ROTATION_PREVIEW_SHOW) + { + ShowMonitorRotationPreview(); + } + else if (message == WM_PRIV_MONITOR_ROTATION_PREVIEW_HIDE) + { + HideMonitorRotationPreview(); + } + else if (message == WM_PRIV_MONITOR_ROTATION_PREVIEW_ROTATE) + { + const bool reverse = static_cast(wparam); + m_pendingMonitorRotationReverse = reverse; + ShowMonitorRotationPreview(reverse, true); + if (SetTimer(m_window, MonitorRotationCommitTimerId, MonitorRotationCommitDelayMillis, nullptr) == 0) + { + m_pendingMonitorRotationReverse.reset(); + ShowMonitorRotationPreview(); + } + } + else if (message == WM_TIMER && wparam == MonitorRotationCommitTimerId) + { + KillTimer(m_window, MonitorRotationCommitTimerId); + if (m_pendingMonitorRotationReverse.has_value()) + { + const bool reverse = *m_pendingMonitorRotationReverse; + const bool shouldShowCommitPreview = m_monitorRotationPreviewActive && IsMonitorRotationChordDown(); + m_pendingMonitorRotationReverse.reset(); + RotateWindowsAcrossMonitors(reverse); + RotateMonitorRotationContentNumbers(reverse); + if (shouldShowCommitPreview) + { + ShowMonitorRotationPreview(); + } + } + } else if (message == WM_PRIV_SETTINGS_CHANGED) { FancyZonesSettings::instance().LoadSettings(); @@ -1045,6 +1321,172 @@ void FancyZones::CycleWindows(bool reverse) noexcept } } +void FancyZones::ShowMonitorRotationPreview(std::optional reverse, bool animateRotation) noexcept +{ + auto windows = CollectWindowRotationSnapshots(); + std::unordered_map> windowRectsByMonitor; + for (const auto& window : windows) + { + windowRectsByMonitor[window.sourceMonitor].push_back(window.sourceRect); + } + + auto monitors = FancyZonesUtils::GetAllMonitorRects<&MONITORINFOEX::rcWork>(); + FancyZonesUtils::OrderMonitors(monitors); + EnsureMonitorRotationContentNumbers(monitors); + + if (FancyZonesSettings::settings().spanZonesAcrossMonitors) + { + auto workArea = m_workAreaConfiguration.GetWorkArea(nullptr); + if (workArea) + { + std::vector allWindowRects; + allWindowRects.reserve(windows.size()); + for (const auto& window : windows) + { + allWindowRects.push_back(window.sourceRect); + } + + workArea->ShowMonitorRotationPreview(allWindowRects, 1, reverse, animateRotation); + } + + m_monitorRotationPreviewActive = true; + return; + } + + for (const auto& [monitor, workArea] : m_workAreaConfiguration.GetAllWorkAreas()) + { + if (!workArea) + { + continue; + } + + const auto iter = windowRectsByMonitor.find(monitor); + const std::vector emptyRects; + const auto monitorNumberIter = m_monitorRotationContentNumbers.find(monitor); + const size_t monitorNumber = monitorNumberIter != m_monitorRotationContentNumbers.end() ? monitorNumberIter->second : GetMonitorDisplayNumber(monitor, 1); + workArea->ShowMonitorRotationPreview(iter != windowRectsByMonitor.end() ? iter->second : emptyRects, monitorNumber, reverse, animateRotation); + } + + m_monitorRotationPreviewActive = true; +} + +void FancyZones::EnsureMonitorRotationContentNumbers(const std::vector>& monitors) noexcept +{ + if (monitors.empty()) + { + m_monitorRotationContentNumbers.clear(); + return; + } + + bool shouldReinitialize = m_monitorRotationContentNumbers.size() != monitors.size(); + if (!shouldReinitialize) + { + for (const auto& [monitor, _] : monitors) + { + if (!m_monitorRotationContentNumbers.contains(monitor)) + { + shouldReinitialize = true; + break; + } + } + } + + if (!shouldReinitialize) + { + return; + } + + m_monitorRotationContentNumbers.clear(); + for (size_t monitorIndex = 0; monitorIndex < monitors.size(); monitorIndex++) + { + m_monitorRotationContentNumbers[monitors[monitorIndex].first] = GetMonitorDisplayNumber(monitors[monitorIndex].first, monitorIndex + 1); + } +} + +void FancyZones::RotateMonitorRotationContentNumbers(bool reverse) noexcept +{ + auto monitors = FancyZonesUtils::GetAllMonitorRects<&MONITORINFOEX::rcWork>(); + FancyZonesUtils::OrderMonitors(monitors); + EnsureMonitorRotationContentNumbers(monitors); + + if (monitors.size() < 2) + { + return; + } + + std::unordered_map rotatedContentNumbers; + for (size_t sourceIndex = 0; sourceIndex < monitors.size(); sourceIndex++) + { + const size_t targetIndex = MonitorRotation::GetRotatedMonitorIndex(sourceIndex, monitors.size(), reverse); + rotatedContentNumbers[monitors[targetIndex].first] = m_monitorRotationContentNumbers[monitors[sourceIndex].first]; + } + + m_monitorRotationContentNumbers = std::move(rotatedContentNumbers); +} + +void FancyZones::HideMonitorRotationPreview() noexcept +{ + for (const auto& [_, workArea] : m_workAreaConfiguration.GetAllWorkAreas()) + { + if (workArea) + { + workArea->HideZones(); + } + } + + m_monitorRotationPreviewActive = false; + if (!m_pendingMonitorRotationReverse.has_value()) + { + KillTimer(m_window, MonitorRotationCommitTimerId); + } +} + +void FancyZones::RotateWindowsAcrossMonitors(bool reverse) noexcept +{ + auto monitors = FancyZonesUtils::GetAllMonitorRects<&MONITORINFOEX::rcWork>(); + FancyZonesUtils::OrderMonitors(monitors); + if (monitors.size() < 2) + { + Logger::info(L"Monitor rotation skipped: fewer than two monitors are available"); + return; + } + + auto windows = CollectWindowRotationSnapshots(); + if (windows.empty()) + { + Logger::info(L"Monitor rotation skipped: no processable windows found"); + return; + } + + size_t movedWindows = 0; + for (const auto& window : windows) + { + const auto sourceIndex = FindMonitorIndex(window.sourceMonitor, monitors); + if (!sourceIndex.has_value()) + { + continue; + } + + const size_t targetIndex = MonitorRotation::GetRotatedMonitorIndex(*sourceIndex, monitors.size(), reverse); + const RECT targetRect = MonitorRotation::MapRectBetweenMonitorWorkAreas( + window.sourceRect, + monitors[*sourceIndex].second, + monitors[targetIndex].second); + if (!FancyZonesWindowProperties::RetrieveZoneIndexProperty(window.window).empty()) + { + if (auto workArea = m_workAreaConfiguration.GetWorkAreaFromWindow(window.window)) + { + workArea->Unsnap(window.window); + } + } + + FancyZonesWindowUtils::SizeWindowToRect(window.window, targetRect, false); + movedWindows++; + } + + Logger::info(L"Rotated {} windows across {} monitors", movedWindows, monitors.size()); +} + void FancyZones::SyncVirtualDesktops() noexcept { // Explorer persists current virtual desktop identifier to registry on a per session basis, @@ -1115,6 +1557,18 @@ void FancyZones::SettingsUpdate(SettingId id) UpdateHotkey(static_cast(HotkeyId::NextTab), FancyZonesSettings::settings().nextTabHotkey, FancyZonesSettings::settings().windowSwitching); } break; + case SettingId::MonitorRotation: + case SettingId::MonitorRotationHotkey: + { + m_pendingMonitorRotationReverse.reset(); + KillTimer(m_window, MonitorRotationCommitTimerId); + m_monitorRotationKeyState.Reset(); + if (m_monitorRotationPreviewActive && !IsMonitorRotationChordDown()) + { + HideMonitorRotationPreview(); + } + } + break; case SettingId::SpanZonesAcrossMonitors: { // See UpdateWorkAreas() — same WindowMouseSnap dangling-WorkArea* diff --git a/src/modules/fancyzones/FancyZonesLib/FancyZones.h b/src/modules/fancyzones/FancyZonesLib/FancyZones.h index 5cbcfd4df6..aac4e1e9b0 100644 --- a/src/modules/fancyzones/FancyZonesLib/FancyZones.h +++ b/src/modules/fancyzones/FancyZonesLib/FancyZones.h @@ -2,7 +2,10 @@ #include +#include #include +#include +#include struct WinHookEvent; @@ -46,6 +49,67 @@ interface __declspec(uuid("{2CB37E8F-87E6-4AEC-B4B2-E0FDC873343F}")) IFancyZones */ IFACEMETHOD_(bool, OnKeyDown) (PKBDLLHOOKSTRUCT info) = 0; + /** + * Process keyboard key-up event. + * + * @param info Information about low level keyboard event. + * @returns Boolean indicating if this event should be suppressed. + */ + IFACEMETHOD_(bool, OnKeyUp) + (PKBDLLHOOKSTRUCT info) = 0; }; +namespace MonitorRotation +{ + LONG ScaleCoordinate(LONG value, LONG sourceStart, LONG sourceSize, LONG targetStart, LONG targetSize) noexcept; + RECT MapRectBetweenMonitorWorkAreas(const RECT& windowRect, const RECT& sourceWorkArea, const RECT& targetWorkArea) noexcept; + size_t GetRotatedMonitorIndex(size_t sourceIndex, size_t monitorCount, bool reverse) noexcept; + + class KeyState + { + public: + void Update(DWORD vkCode, bool isDown) + { + if (isDown) + { + m_pressedKeys.insert(vkCode); + } + else + { + m_pressedKeys.erase(vkCode); + } + } + + bool IsDown(DWORD vkCode) const noexcept + { + return m_pressedKeys.contains(vkCode); + } + + bool IsAnyDown(std::initializer_list keys) const noexcept + { + return std::ranges::any_of(keys, [this](DWORD key) { return IsDown(key); }); + } + + bool Consume(DWORD vkCode) + { + return m_consumedKeys.insert(vkCode).second; + } + + bool ReleaseWasConsumed(DWORD vkCode) + { + return m_consumedKeys.erase(vkCode) != 0; + } + + void Reset() noexcept + { + m_pressedKeys.clear(); + m_consumedKeys.clear(); + } + + private: + std::unordered_set m_pressedKeys; + std::unordered_set m_consumedKeys; + }; +} + winrt::com_ptr MakeFancyZones(HINSTANCE hinstance, std::function disableCallback) noexcept; diff --git a/src/modules/fancyzones/FancyZonesLib/FancyZonesWinHookEventIDs.cpp b/src/modules/fancyzones/FancyZonesLib/FancyZonesWinHookEventIDs.cpp index 3add3d0099..24850ce8e3 100644 --- a/src/modules/fancyzones/FancyZonesLib/FancyZonesWinHookEventIDs.cpp +++ b/src/modules/fancyzones/FancyZonesLib/FancyZonesWinHookEventIDs.cpp @@ -20,6 +20,9 @@ UINT WM_PRIV_SNAP_HOTKEY; UINT WM_PRIV_QUICK_LAYOUT_KEY; UINT WM_PRIV_SETTINGS_CHANGED; UINT WM_PRIV_SAVE_EDITOR_PARAMETERS; +UINT WM_PRIV_MONITOR_ROTATION_PREVIEW_SHOW; +UINT WM_PRIV_MONITOR_ROTATION_PREVIEW_HIDE; +UINT WM_PRIV_MONITOR_ROTATION_PREVIEW_ROTATE; std::once_flag init_flag; @@ -44,5 +47,8 @@ void InitializeWinhookEventIds() WM_PRIV_QUICK_LAYOUT_KEY = RegisterWindowMessage(L"{15baab3d-c67b-4a15-aFF0-13610e05e947}"); WM_PRIV_SETTINGS_CHANGED = RegisterWindowMessage(L"{89ca3Daa-bf2d-4e73-9f3f-c60716364e27}"); WM_PRIV_SAVE_EDITOR_PARAMETERS = RegisterWindowMessage(L"{d8f9c0e3-5d77-4e83-8a4f-7c704c2bfb4a}"); + WM_PRIV_MONITOR_ROTATION_PREVIEW_SHOW = RegisterWindowMessage(L"{98426d34-6138-4613-ad61-34ad0294ff15}"); + WM_PRIV_MONITOR_ROTATION_PREVIEW_HIDE = RegisterWindowMessage(L"{0598cbfd-908c-4c72-802a-03da9bdff7c8}"); + WM_PRIV_MONITOR_ROTATION_PREVIEW_ROTATE = RegisterWindowMessage(L"{ea0e8fc6-161a-49fd-bbe4-441fd956236a}"); }); } diff --git a/src/modules/fancyzones/FancyZonesLib/FancyZonesWinHookEventIDs.h b/src/modules/fancyzones/FancyZonesLib/FancyZonesWinHookEventIDs.h index 7489f68481..38565186ac 100644 --- a/src/modules/fancyzones/FancyZonesLib/FancyZonesWinHookEventIDs.h +++ b/src/modules/fancyzones/FancyZonesLib/FancyZonesWinHookEventIDs.h @@ -18,5 +18,8 @@ extern UINT WM_PRIV_SNAP_HOTKEY; // Scheduled when we receive a snap hotkey key extern UINT WM_PRIV_QUICK_LAYOUT_KEY; // Scheduled when we receive a key down press to quickly apply a layout extern UINT WM_PRIV_SETTINGS_CHANGED; // Scheduled when a watched settings file is updated extern UINT WM_PRIV_SAVE_EDITOR_PARAMETERS; // Scheduled to request saving editor-parameters.json +extern UINT WM_PRIV_MONITOR_ROTATION_PREVIEW_SHOW; // Scheduled when the monitor rotation preview should be shown +extern UINT WM_PRIV_MONITOR_ROTATION_PREVIEW_HIDE; // Scheduled when the monitor rotation preview should be hidden +extern UINT WM_PRIV_MONITOR_ROTATION_PREVIEW_ROTATE; // Scheduled when monitor rotation preview should rotate windows void InitializeWinhookEventIds(); diff --git a/src/modules/fancyzones/FancyZonesLib/Settings.cpp b/src/modules/fancyzones/FancyZonesLib/Settings.cpp index 9cc886fe5c..275d06178b 100644 --- a/src/modules/fancyzones/FancyZonesLib/Settings.cpp +++ b/src/modules/fancyzones/FancyZonesLib/Settings.cpp @@ -45,6 +45,8 @@ namespace NonLocalizable const wchar_t WindowSwitchingToggleID[] = L"fancyzones_windowSwitching"; const wchar_t NextTabHotkeyID[] = L"fancyzones_nextTab_hotkey"; const wchar_t PrevTabHotkeyID[] = L"fancyzones_prevTab_hotkey"; + const wchar_t MonitorRotationID[] = L"fancyzones_monitorRotation"; + const wchar_t MonitorRotationHotkeyID[] = L"fancyzones_monitorRotation_hotkey"; const wchar_t ExcludedAppsID[] = L"fancyzones_excluded_apps"; const wchar_t ZoneHighlightOpacityID[] = L"fancyzones_highlight_opacity"; const wchar_t ShowZoneNumberID[] = L"fancyzones_showZoneNumber"; @@ -124,6 +126,7 @@ void FancyZonesSettings::LoadSettings() SetBoolFlag(values, NonLocalizable::SpanZonesAcrossMonitorsID, SettingId::SpanZonesAcrossMonitors, m_settings.spanZonesAcrossMonitors); SetBoolFlag(values, NonLocalizable::MakeDraggedWindowTransparentID, SettingId::MakeDraggedWindowsTransparent, m_settings.makeDraggedWindowTransparent); SetBoolFlag(values, NonLocalizable::WindowSwitchingToggleID, SettingId::WindowSwitching, m_settings.windowSwitching); + SetBoolFlag(values, NonLocalizable::MonitorRotationID, SettingId::MonitorRotation, m_settings.monitorRotation); SetBoolFlag(values, NonLocalizable::SystemThemeID, SettingId::SystemTheme, m_settings.systemTheme); SetBoolFlag(values, NonLocalizable::ShowZoneNumberID, SettingId::ShowZoneNumber, m_settings.showZoneNumber); SetBoolFlag(values, NonLocalizable::AllowChildWindowSnapID, SettingId::AllowSnapChildWindows, m_settings.allowSnapChildWindows); @@ -206,6 +209,16 @@ void FancyZonesSettings::LoadSettings() } } + if (const auto val = values.get_json(NonLocalizable::MonitorRotationHotkeyID)) + { + auto hotkey = PowerToysSettings::HotkeyObject::from_json(*val); + if (m_settings.monitorRotationHotkey.get_modifiers() != hotkey.get_modifiers() || m_settings.monitorRotationHotkey.get_key() != hotkey.get_key() || m_settings.monitorRotationHotkey.get_code() != hotkey.get_code()) + { + m_settings.monitorRotationHotkey = PowerToysSettings::HotkeyObject::from_json(*val); + NotifyObservers(SettingId::MonitorRotationHotkey); + } + } + // excluded apps if (auto val = values.get_string_value(NonLocalizable::ExcludedAppsID)) { diff --git a/src/modules/fancyzones/FancyZonesLib/Settings.h b/src/modules/fancyzones/FancyZonesLib/Settings.h index a9bcbeaa17..871b0bb9cf 100644 --- a/src/modules/fancyzones/FancyZonesLib/Settings.h +++ b/src/modules/fancyzones/FancyZonesLib/Settings.h @@ -56,6 +56,8 @@ struct Settings bool windowSwitching = true; PowerToysSettings::HotkeyObject nextTabHotkey = PowerToysSettings::HotkeyObject::from_settings(true, false, false, false, VK_NEXT); PowerToysSettings::HotkeyObject prevTabHotkey = PowerToysSettings::HotkeyObject::from_settings(true, false, false, false, VK_PRIOR); + bool monitorRotation = false; + PowerToysSettings::HotkeyObject monitorRotationHotkey = PowerToysSettings::HotkeyObject::from_settings(false, false, true, false, 'X'); std::wstring excludedApps = L""; std::vector excludedAppsArray; }; diff --git a/src/modules/fancyzones/FancyZonesLib/SettingsConstants.h b/src/modules/fancyzones/FancyZonesLib/SettingsConstants.h index a789d86484..e4267c881e 100644 --- a/src/modules/fancyzones/FancyZonesLib/SettingsConstants.h +++ b/src/modules/fancyzones/FancyZonesLib/SettingsConstants.h @@ -31,7 +31,9 @@ enum class SettingId WindowSwitching, NextTabHotkey, PrevTabHotkey, + MonitorRotation, + MonitorRotationHotkey, ExcludedApps, AllowSnapChildWindows, DisableRoundCornersOnSnapping, -}; \ No newline at end of file +}; diff --git a/src/modules/fancyzones/FancyZonesLib/WorkArea.cpp b/src/modules/fancyzones/FancyZonesLib/WorkArea.cpp index ef112c5b4f..ab14bedef9 100644 --- a/src/modules/fancyzones/FancyZonesLib/WorkArea.cpp +++ b/src/modules/fancyzones/FancyZonesLib/WorkArea.cpp @@ -205,6 +205,30 @@ void WorkArea::FlashZones() } } +void WorkArea::ShowMonitorRotationPreview(const std::vector& windowRects, size_t monitorNumber, std::optional reverse, bool animateRotation) +{ + if (!m_zonesOverlay) + { + return; + } + + std::vector localWindowRects; + localWindowRects.reserve(windowRects.size()); + for (const auto& rect : windowRects) + { + localWindowRects.push_back(RECT{ + .left = rect.left - m_workAreaRect.left(), + .top = rect.top - m_workAreaRect.top(), + .right = rect.right - m_workAreaRect.left(), + .bottom = rect.bottom - m_workAreaRect.top(), + }); + } + + SetWorkAreaWindowAsTopmost(nullptr); + m_zonesOverlay->DrawMonitorRotationPreview(localWindowRects, monitorNumber, reverse, animateRotation); + m_zonesOverlay->Show(); +} + void WorkArea::InitLayout() { InitLayout({}); @@ -379,4 +403,4 @@ LRESULT CALLBACK WorkArea::s_WndProc(HWND window, UINT message, WPARAM wparam, L return (thisRef != nullptr) ? thisRef->WndProc(message, wparam, lparam) : DefWindowProc(window, message, wparam, lparam); -} \ No newline at end of file +} diff --git a/src/modules/fancyzones/FancyZonesLib/WorkArea.h b/src/modules/fancyzones/FancyZonesLib/WorkArea.h index ecd97fd849..092a6ea5c2 100644 --- a/src/modules/fancyzones/FancyZonesLib/WorkArea.h +++ b/src/modules/fancyzones/FancyZonesLib/WorkArea.h @@ -1,5 +1,8 @@ #pragma once +#include +#include + #include #include @@ -53,6 +56,7 @@ public: void ShowZones(const ZoneIndexSet& highlight, HWND draggedWindow = nullptr); void HideZones(); void FlashZones(); + void ShowMonitorRotationPreview(const std::vector& windowRects, size_t monitorNumber, std::optional reverse, bool animateRotation); void CycleWindows(HWND window, bool reverse); diff --git a/src/modules/fancyzones/FancyZonesLib/ZonesOverlay.cpp b/src/modules/fancyzones/FancyZonesLib/ZonesOverlay.cpp index f40b01fd6f..b50129b11c 100644 --- a/src/modules/fancyzones/FancyZonesLib/ZonesOverlay.cpp +++ b/src/modules/fancyzones/FancyZonesLib/ZonesOverlay.cpp @@ -2,6 +2,7 @@ #include "ZonesOverlay.h" #include +#include #include #include #include @@ -13,6 +14,83 @@ namespace { const int FadeInDurationMillis = 200; const int FlashZonesDurationMillis = 700; + const int RotationPulseDurationMillis = 920; + + D2D1_RECT_F ShrinkRect(D2D1_RECT_F rect, float scale) + { + const float width = rect.right - rect.left; + const float height = rect.bottom - rect.top; + const float dx = width * (1.f - scale) / 2.f; + const float dy = height * (1.f - scale) / 2.f; + + return D2D1::RectF(rect.left + dx, rect.top + dy, rect.right - dx, rect.bottom - dy); + } + + constexpr float ClampDimension(float value, float min, float max) noexcept + { + return std::clamp(value, min, max); + } + + float TriangleWave(float value) noexcept + { + value -= std::floor(value); + return value < 0.5f ? value * 2.f : (1.f - value) * 2.f; + } + + constexpr float SmoothStep(float value) noexcept + { + value = std::clamp(value, 0.f, 1.f); + return value * value * (3.f - 2.f * value); + } + + D2D1_COLOR_F MonitorAccentColor(size_t monitorNumber, float alpha = 1.f) noexcept + { + switch ((monitorNumber - 1) % 6) + { + case 0: + return D2D1::ColorF(0.38f, 0.76f, 1.f, alpha); + case 1: + return D2D1::ColorF(0.45f, 0.91f, 0.58f, alpha); + case 2: + return D2D1::ColorF(1.f, 0.70f, 0.28f, alpha); + case 3: + return D2D1::ColorF(0.86f, 0.56f, 1.f, alpha); + case 4: + return D2D1::ColorF(0.34f, 0.93f, 0.88f, alpha); + default: + return D2D1::ColorF(1.f, 0.48f, 0.55f, alpha); + } + } + + void DrawArrowLine(ID2D1RenderTarget* renderTarget, ID2D1Brush* brush, D2D1_POINT_2F start, D2D1_POINT_2F end, float strokeWidth) noexcept + { + renderTarget->DrawLine(start, end, brush, strokeWidth); + + const float dx = end.x - start.x; + const float dy = end.y - start.y; + const float length = std::sqrt(dx * dx + dy * dy); + if (length <= 0.001f) + { + return; + } + + const float unitX = dx / length; + const float unitY = dy / length; + const float normalX = -unitY; + const float normalY = unitX; + const float headLength = strokeWidth * 4.2f; + const float headSpread = strokeWidth * 2.7f; + const auto headA = D2D1::Point2F(end.x - unitX * headLength + normalX * headSpread, end.y - unitY * headLength + normalY * headSpread); + const auto headB = D2D1::Point2F(end.x - unitX * headLength - normalX * headSpread, end.y - unitY * headLength - normalY * headSpread); + + renderTarget->DrawLine(end, headA, brush, strokeWidth); + renderTarget->DrawLine(end, headB, brush, strokeWidth); + } + + D2D1_RECT_F CenteredRect(float centerX, float centerY, float width, float height) noexcept + { + return D2D1::RectF(centerX - width / 2.f, centerY - height / 2.f, centerX + width / 2.f, centerY + height / 2.f); + } } namespace NonLocalizable @@ -64,6 +142,11 @@ D2D1_RECT_F ZonesOverlay::ConvertRect(RECT rect) return D2D1::RectF(rect.left + 0.5f, rect.top + 0.5f, rect.right - 0.5f, rect.bottom - 0.5f); } +D2D1_RECT_F ZonesOverlay::OffsetRect(D2D1_RECT_F rect, float x, float y) +{ + return D2D1::RectF(rect.left + x, rect.top + y, rect.right + x, rect.bottom + y); +} + ZonesOverlay::ZonesOverlay(HWND window) { HRESULT hr; @@ -125,11 +208,47 @@ ZonesOverlay::RenderResult ZonesOverlay::Render() { animationAlpha = 1.f; } + const bool animateRotation = m_animateRotation && isEnabledAnimations; m_renderTarget->BeginDraw(); + const auto renderNow = std::chrono::steady_clock().now(); + float rotationPulse = 0.f; + float rotationProgress = 0.f; + if (animateRotation && m_rotationPulseStart) + { + const auto pulseMillis = (renderNow - *m_rotationPulseStart).count() / 1e6f; + if (pulseMillis < RotationPulseDurationMillis) + { + rotationProgress = std::clamp(pulseMillis / RotationPulseDurationMillis, 0.f, 1.f); + rotationPulse = 1.f - rotationProgress; + } + else + { + rotationProgress = 1.f; + m_rotationPulseStart.reset(); + } + } + + const auto width = static_cast(m_clientRect.right - m_clientRect.left); + const auto height = static_cast(m_clientRect.bottom - m_clientRect.top); + const float directionSign = m_rotationDirection == RotationDirection::Left ? -1.f : (m_rotationDirection == RotationDirection::Right ? 1.f : 0.f); + const float easedRotationProgress = SmoothStep(rotationProgress); + const float pulseOffset = animateRotation ? directionSign * easedRotationProgress * ClampDimension(width * 0.075f, 44.f, 132.f) : 0.f; + const float pulseScale = 1.f + ((animateRotation ? rotationPulse : 0.f) * 0.05f); + // Draw backdrop m_renderTarget->Clear(D2D1::ColorF(0.f, 0.f, 0.f, 0.f)); + if (m_drawBackdrop) + { + ID2D1SolidColorBrush* backdropBrush = nullptr; + m_renderTarget->CreateSolidColorBrush(D2D1::ColorF(0.f, 0.f, 0.f, 0.88f * animationAlpha), &backdropBrush); + if (backdropBrush) + { + m_renderTarget->FillRectangle(ConvertRect(m_clientRect), backdropBrush); + backdropBrush->Release(); + } + } IDWriteTextFormat* textFormat = nullptr; @@ -142,13 +261,13 @@ ZonesOverlay::RenderResult ZonesOverlay::Render() for (auto drawableRect : m_sceneRects) { - ID2D1SolidColorBrush* textBrush = nullptr; ID2D1SolidColorBrush* borderBrush = nullptr; ID2D1SolidColorBrush* fillBrush = nullptr; // Need to copy the rect from m_sceneRects drawableRect.borderColor.a *= animationAlpha; drawableRect.fillColor.a *= animationAlpha; + drawableRect.rect = OffsetRect(drawableRect.rect, pulseOffset, 0.f); m_renderTarget->CreateSolidColorBrush(drawableRect.borderColor, &borderBrush); m_renderTarget->CreateSolidColorBrush(drawableRect.fillColor, &fillBrush); @@ -169,6 +288,7 @@ ZonesOverlay::RenderResult ZonesOverlay::Render() if (drawableRect.showText) { + ID2D1SolidColorBrush* textBrush = nullptr; m_renderTarget->CreateSolidColorBrush(drawableRect.textColor, &textBrush); if (textFormat && textBrush) @@ -190,6 +310,153 @@ ZonesOverlay::RenderResult ZonesOverlay::Render() textFormat->Release(); } + const auto accentColor = MonitorAccentColor(m_monitorNumber.value_or(1)); + + if (animateRotation && (m_rotationDirection == RotationDirection::Left || m_rotationDirection == RotationDirection::Right)) + { + constexpr int MarkerCount = 7; + const float railWidth = ClampDimension(width * 0.58f, 260.f, 760.f); + const float railLeft = (width - railWidth) / 2.f; + const float railY = (height / 2.f) + ClampDimension(height * 0.20f, 104.f, 222.f); + const float segmentWidth = railWidth / MarkerCount; + const float markerSize = ClampDimension(width * 0.025f, 18.f, 34.f); + const float strokeWidth = ClampDimension(width * 0.0038f, 3.4f, 6.4f); + + for (int markerIndex = 0; markerIndex < MarkerCount; markerIndex++) + { + const float order = m_rotationDirection == RotationDirection::Left ? static_cast(MarkerCount - 1 - markerIndex) : static_cast(markerIndex); + const float wave = TriangleWave(rotationProgress * 2.4f - order * 0.14f); + const float alpha = (0.18f + wave * 0.64f) * animationAlpha; + ID2D1SolidColorBrush* markerBrush = nullptr; + m_renderTarget->CreateSolidColorBrush(D2D1::ColorF(accentColor.r, accentColor.g, accentColor.b, alpha), &markerBrush); + + if (markerBrush) + { + const float centerX = railLeft + segmentWidth * (markerIndex + 0.5f) + directionSign * wave * 9.f; + const float headX = centerX + directionSign * markerSize; + const auto head = D2D1::Point2F(headX, railY); + const auto wingTop = D2D1::Point2F(centerX - directionSign * markerSize * 0.45f, railY - markerSize * 0.62f); + const auto wingBottom = D2D1::Point2F(centerX - directionSign * markerSize * 0.45f, railY + markerSize * 0.62f); + m_renderTarget->DrawLine(wingTop, head, markerBrush, strokeWidth); + m_renderTarget->DrawLine(wingBottom, head, markerBrush, strokeWidth); + markerBrush->Release(); + } + } + } + + if (m_monitorNumber && writeFactory) + { + const float smallerDimension = width < height ? width : height; + const bool isRotating = animateRotation && (m_rotationDirection == RotationDirection::Left || m_rotationDirection == RotationDirection::Right); + const float radius = ClampDimension(smallerDimension * 0.14f, 82.f, 170.f) * pulseScale; + const float centerX = width / 2.f; + const float centerY = height / 2.f; + + if (isRotating) + { + ID2D1SolidColorBrush* ghostFillBrush = nullptr; + ID2D1SolidColorBrush* ghostBorderBrush = nullptr; + m_renderTarget->CreateSolidColorBrush(D2D1::ColorF(accentColor.r, accentColor.g, accentColor.b, 0.10f * animationAlpha), &ghostFillBrush); + m_renderTarget->CreateSolidColorBrush(D2D1::ColorF(accentColor.r, accentColor.g, accentColor.b, 0.42f * animationAlpha), &ghostBorderBrush); + + if (ghostFillBrush && ghostBorderBrush) + { + const float ghostWidth = ClampDimension(width * 0.34f, 220.f, 520.f); + const float ghostHeight = ClampDimension(height * 0.17f, 110.f, 220.f); + const float ghostCenterX = (width / 2.f) + pulseOffset; + const float ghostCenterY = centerY - ClampDimension(height * 0.17f, 72.f, 170.f); + const auto ghostRect = CenteredRect(ghostCenterX, ghostCenterY, ghostWidth, ghostHeight); + const float cornerRadius = ClampDimension(ghostHeight * 0.16f, 14.f, 28.f); + const auto roundedGhostRect = D2D1::RoundedRect(ghostRect, cornerRadius, cornerRadius); + m_renderTarget->FillRoundedRectangle(roundedGhostRect, ghostFillBrush); + m_renderTarget->DrawRoundedRectangle(roundedGhostRect, ghostBorderBrush, ClampDimension(width * 0.002f, 2.f, 4.f)); + + const int innerLines = 3; + const float lineGap = ghostHeight * 0.20f; + const float lineStart = ghostCenterY - lineGap; + for (int lineIndex = 0; lineIndex < innerLines; lineIndex++) + { + const float lineY = lineStart + lineGap * lineIndex; + const float lineInset = ghostWidth * (0.18f + lineIndex * 0.04f); + m_renderTarget->DrawLine( + D2D1::Point2F(ghostRect.left + lineInset, lineY), + D2D1::Point2F(ghostRect.right - lineInset, lineY), + ghostBorderBrush, + ClampDimension(width * 0.0014f, 1.5f, 3.f)); + } + } + + if (ghostFillBrush) + { + ghostFillBrush->Release(); + } + + if (ghostBorderBrush) + { + ghostBorderBrush->Release(); + } + } + + ID2D1SolidColorBrush* glowBrush = nullptr; + ID2D1SolidColorBrush* numberBrush = nullptr; + m_renderTarget->CreateSolidColorBrush(D2D1::ColorF(accentColor.r, accentColor.g, accentColor.b, (0.11f + rotationPulse * 0.11f) * animationAlpha), &glowBrush); + m_renderTarget->CreateSolidColorBrush(D2D1::ColorF(1.f, 1.f, 1.f, 0.95f * animationAlpha), &numberBrush); + + if (glowBrush) + { + m_renderTarget->FillEllipse(D2D1::Ellipse(D2D1::Point2F(centerX, centerY), radius + 22.f, radius + 22.f), glowBrush); + glowBrush->Release(); + } + + IDWriteTextFormat* numberFormat = nullptr; + writeFactory->CreateTextFormat(NonLocalizable::SegoeUiFont, nullptr, DWRITE_FONT_WEIGHT_BOLD, DWRITE_FONT_STYLE_NORMAL, DWRITE_FONT_STRETCH_NORMAL, isRotating ? radius * 0.72f : radius * 1.15f, L"en-US", &numberFormat); + if (numberFormat && numberBrush) + { + const auto numberStr = std::to_wstring(*m_monitorNumber); + numberFormat->SetTextAlignment(DWRITE_TEXT_ALIGNMENT_CENTER); + numberFormat->SetParagraphAlignment(DWRITE_PARAGRAPH_ALIGNMENT_CENTER); + const auto numberRect = isRotating ? + D2D1::RectF(centerX - (radius * 0.45f), centerY - (radius * 0.45f), centerX + (radius * 0.45f), centerY + (radius * 0.45f)) : + D2D1::RectF(centerX - radius, centerY - radius, centerX + radius, centerY + radius); + m_renderTarget->DrawTextW(numberStr.c_str(), static_cast(numberStr.size()), numberFormat, numberRect, numberBrush); + } + + if (isRotating) + { + ID2D1SolidColorBrush* symbolBrush = nullptr; + m_renderTarget->CreateSolidColorBrush(D2D1::ColorF(accentColor.r, accentColor.g, accentColor.b, (0.84f + rotationPulse * 0.14f) * animationAlpha), &symbolBrush); + + if (symbolBrush) + { + const float strokeWidth = ClampDimension(radius * 0.045f, 4.5f, 8.5f); + const float arm = radius * 0.76f; + const float gap = radius * 0.30f; + if (m_rotationDirection == RotationDirection::Left) + { + DrawArrowLine(m_renderTarget, symbolBrush, D2D1::Point2F(centerX + gap, centerY - gap), D2D1::Point2F(centerX - arm, centerY - arm), strokeWidth); + DrawArrowLine(m_renderTarget, symbolBrush, D2D1::Point2F(centerX - gap, centerY + gap), D2D1::Point2F(centerX + arm, centerY + arm), strokeWidth); + } + else + { + DrawArrowLine(m_renderTarget, symbolBrush, D2D1::Point2F(centerX - gap, centerY - gap), D2D1::Point2F(centerX + arm, centerY - arm), strokeWidth); + DrawArrowLine(m_renderTarget, symbolBrush, D2D1::Point2F(centerX + gap, centerY + gap), D2D1::Point2F(centerX - arm, centerY + arm), strokeWidth); + } + + symbolBrush->Release(); + } + } + + if (numberBrush) + { + numberBrush->Release(); + } + + if (numberFormat) + { + numberFormat->Release(); + } + } + // The lock must be released here, as EndDraw() will wait for vertical sync lock.unlock(); @@ -286,6 +553,11 @@ void ZonesOverlay::DrawActiveZoneSet(const ZonesMap& zones, std::unique_lock lock(m_mutex); m_sceneRects = {}; + m_drawBackdrop = false; + m_rotationDirection = RotationDirection::None; + m_animateRotation = false; + m_monitorNumber.reset(); + m_rotationPulseStart.reset(); auto borderColor = ConvertColor(colors.borderColor); auto inactiveColor = ConvertColor(colors.primaryColor); @@ -338,6 +610,47 @@ void ZonesOverlay::DrawActiveZoneSet(const ZonesMap& zones, } } +void ZonesOverlay::DrawMonitorRotationPreview(const std::vector& windowRects, size_t monitorNumber, std::optional reverse, bool animateRotation) +{ + std::unique_lock lock(m_mutex); + + m_sceneRects = {}; + m_drawBackdrop = true; + m_rotationDirection = reverse.has_value() ? (reverse.value() ? RotationDirection::Left : RotationDirection::Right) : RotationDirection::Both; + m_animateRotation = animateRotation && reverse.has_value(); + m_monitorNumber = monitorNumber; + if (m_animateRotation) + { + m_rotationPulseStart = std::chrono::steady_clock().now(); + } + else + { + m_rotationPulseStart.reset(); + } + + const auto borderColor = D2D1::ColorF(1.f, 1.f, 1.f, 0.08f); + const auto fillColor = D2D1::ColorF(0.05f, 0.07f, 0.09f, 0.50f); + const auto textColor = D2D1::ColorF(1.f, 1.f, 1.f, 0.85f); + + for (const auto& rect : windowRects) + { + const auto drawableRect = ShrinkRect(ConvertRect(rect), 0.82f); + if (drawableRect.right - drawableRect.left < 18.f || drawableRect.bottom - drawableRect.top < 18.f) + { + continue; + } + + m_sceneRects.push_back(DrawableRect{ + .rect = drawableRect, + .borderColor = borderColor, + .fillColor = fillColor, + .textColor = textColor, + .id = 0, + .showText = false, + }); + } +} + ZonesOverlay::~ZonesOverlay() { // Constructor early-returns (e.g. CreateHwndRenderTarget failing during a diff --git a/src/modules/fancyzones/FancyZonesLib/ZonesOverlay.h b/src/modules/fancyzones/FancyZonesLib/ZonesOverlay.h index fa20f5edc5..7830b1a38d 100644 --- a/src/modules/fancyzones/FancyZonesLib/ZonesOverlay.h +++ b/src/modules/fancyzones/FancyZonesLib/ZonesOverlay.h @@ -1,6 +1,7 @@ #pragma once #include +#include #include #include #include @@ -31,6 +32,14 @@ class ZonesOverlay bool autoHide; }; + enum class RotationDirection + { + None, + Left, + Right, + Both, + }; + enum struct RenderResult { Ok, @@ -45,11 +54,17 @@ class ZonesOverlay std::mutex m_mutex; std::vector m_sceneRects; + bool m_drawBackdrop = false; + RotationDirection m_rotationDirection = RotationDirection::None; + bool m_animateRotation = false; + std::optional m_monitorNumber; + std::optional m_rotationPulseStart; float GetAnimationAlpha(); static IDWriteFactory* GetWriteFactory(); static D2D1_COLOR_F ConvertColor(COLORREF color); static D2D1_RECT_F ConvertRect(RECT rect); + static D2D1_RECT_F OffsetRect(D2D1_RECT_F rect, float x, float y); RenderResult Render(); void RenderLoop(); @@ -69,4 +84,5 @@ public: const ZoneIndexSet& highlightZones, const Colors::ZoneColors& colors, const bool showZoneText); + void DrawMonitorRotationPreview(const std::vector& windowRects, size_t monitorNumber, std::optional reverse, bool animateRotation); }; diff --git a/src/modules/fancyzones/FancyZonesTests/UnitTests/FancyZonesSettings.Spec.cpp b/src/modules/fancyzones/FancyZonesTests/UnitTests/FancyZonesSettings.Spec.cpp index 8c93e5a05c..1f9ca35baf 100644 --- a/src/modules/fancyzones/FancyZonesTests/UnitTests/FancyZonesSettings.Spec.cpp +++ b/src/modules/fancyzones/FancyZonesTests/UnitTests/FancyZonesSettings.Spec.cpp @@ -43,6 +43,7 @@ namespace FancyZonesUnitTests Assert::AreEqual(expected.spanZonesAcrossMonitors, actual.spanZonesAcrossMonitors); Assert::AreEqual(expected.makeDraggedWindowTransparent, actual.makeDraggedWindowTransparent); Assert::AreEqual(expected.windowSwitching, actual.windowSwitching); + Assert::AreEqual(expected.monitorRotation, actual.monitorRotation); Assert::AreEqual(expected.zoneColor.c_str(), actual.zoneColor.c_str()); Assert::AreEqual(expected.zoneBorderColor.c_str(), actual.zoneBorderColor.c_str()); Assert::AreEqual(expected.zoneHighlightColor.c_str(), actual.zoneHighlightColor.c_str()); @@ -57,6 +58,7 @@ namespace FancyZonesUnitTests compareHotkeyObjects(expected.editorHotkey, actual.editorHotkey); compareHotkeyObjects(expected.nextTabHotkey, actual.nextTabHotkey); compareHotkeyObjects(expected.prevTabHotkey, actual.prevTabHotkey); + compareHotkeyObjects(expected.monitorRotationHotkey, actual.monitorRotationHotkey); } TEST_CLASS (FancyZonesSettingsUnitTest) @@ -90,6 +92,8 @@ namespace FancyZonesUnitTests values.add_property(L"fancyzones_windowSwitching", m_defaultSettings.windowSwitching); values.add_property(L"fancyzones_nextTab_hotkey", m_defaultSettings.nextTabHotkey.get_json()); values.add_property(L"fancyzones_prevTab_hotkey", m_defaultSettings.prevTabHotkey.get_json()); + values.add_property(L"fancyzones_monitorRotation", m_defaultSettings.monitorRotation); + values.add_property(L"fancyzones_monitorRotation_hotkey", m_defaultSettings.monitorRotationHotkey.get_json()); values.add_property(L"fancyzones_excluded_apps", m_defaultSettings.excludedApps); json::to_file(FancyZonesSettings::GetSettingsFileName(), values.get_raw_json()); @@ -133,6 +137,8 @@ namespace FancyZonesUnitTests values.add_property(L"fancyzones_windowSwitching", expected.windowSwitching); values.add_property(L"fancyzones_nextTab_hotkey", expected.nextTabHotkey.get_json()); values.add_property(L"fancyzones_prevTab_hotkey", expected.prevTabHotkey.get_json()); + values.add_property(L"fancyzones_monitorRotation", expected.monitorRotation); + values.add_property(L"fancyzones_monitorRotation_hotkey", expected.monitorRotationHotkey.get_json()); values.add_property(L"fancyzones_excluded_apps", expected.excludedApps); json::to_file(FancyZonesSettings::GetSettingsFileName(), values.get_raw_json()); @@ -161,4 +167,82 @@ namespace FancyZonesUnitTests compareSettings(m_defaultSettings, actual); } }; + + TEST_CLASS (MonitorRotationUnitTest) + { + TEST_METHOD (RotatedMonitorIndexWrapsInBothDirections) + { + Assert::AreEqual(1, MonitorRotation::GetRotatedMonitorIndex(0, 3, false)); + Assert::AreEqual(0, MonitorRotation::GetRotatedMonitorIndex(2, 3, false)); + Assert::AreEqual(2, MonitorRotation::GetRotatedMonitorIndex(0, 3, true)); + Assert::AreEqual(1, MonitorRotation::GetRotatedMonitorIndex(2, 3, true)); + } + + TEST_METHOD (MapsRectBetweenDifferentAndNegativeWorkAreas) + { + const RECT sourceWorkArea{ -1920, 0, 0, 1080 }; + const RECT targetWorkArea{ 0, -200, 2560, 1240 }; + const RECT sourceRect{ -1440, 270, -480, 810 }; + + const auto mapped = MonitorRotation::MapRectBetweenMonitorWorkAreas(sourceRect, sourceWorkArea, targetWorkArea); + + Assert::AreEqual(640, mapped.left); + Assert::AreEqual(160, mapped.top); + Assert::AreEqual(1920, mapped.right); + Assert::AreEqual(880, mapped.bottom); + } + + TEST_METHOD (ScaleCoordinateHandlesEmptySourceDimension) + { + Assert::AreEqual(42, MonitorRotation::ScaleCoordinate(10, 0, 0, 42, 100)); + } + + TEST_METHOD (ModifierReleaseDoesNotLeaveKeyPressed) + { + MonitorRotation::KeyState state; + + for (const auto key : { VK_LCONTROL, VK_RCONTROL, VK_LSHIFT, VK_RSHIFT, VK_LWIN, VK_RWIN }) + { + state.Update(key, true); + Assert::IsTrue(state.IsDown(key)); + state.Update(key, false); + Assert::IsFalse(state.IsDown(key)); + } + } + + TEST_METHOD (ModifierStateKeepsOtherSidePressed) + { + MonitorRotation::KeyState state; + state.Update(VK_LCONTROL, true); + state.Update(VK_RCONTROL, true); + state.Update(VK_LCONTROL, false); + + Assert::IsTrue(state.IsAnyDown({ VK_LCONTROL, VK_RCONTROL })); + + state.Update(VK_RCONTROL, false); + Assert::IsFalse(state.IsAnyDown({ VK_LCONTROL, VK_RCONTROL })); + } + + TEST_METHOD (ConsumedKeyReleaseIsReportedOnce) + { + MonitorRotation::KeyState state; + + Assert::IsTrue(state.Consume(VK_LEFT)); + Assert::IsFalse(state.Consume(VK_LEFT)); + Assert::IsTrue(state.ReleaseWasConsumed(VK_LEFT)); + Assert::IsFalse(state.ReleaseWasConsumed(VK_LEFT)); + } + + TEST_METHOD (ResetClearsPressedAndConsumedKeys) + { + MonitorRotation::KeyState state; + state.Update(VK_LCONTROL, true); + state.Consume(VK_RIGHT); + + state.Reset(); + + Assert::IsFalse(state.IsDown(VK_LCONTROL)); + Assert::IsFalse(state.ReleaseWasConsumed(VK_RIGHT)); + } + }; } diff --git a/src/settings-ui/Settings.UI.Library/FZConfigProperties.cs b/src/settings-ui/Settings.UI.Library/FZConfigProperties.cs index 9150cdbe90..a343b0dbac 100644 --- a/src/settings-ui/Settings.UI.Library/FZConfigProperties.cs +++ b/src/settings-ui/Settings.UI.Library/FZConfigProperties.cs @@ -15,10 +15,12 @@ namespace Microsoft.PowerToys.Settings.UI.Library public const int VkOem3 = 0xc0; public const int VkNext = 0x22; public const int VkPrior = 0x21; + public const int VkX = 0x58; public static readonly HotkeySettings DefaultEditorHotkeyValue = new HotkeySettings(true, false, false, true, VkOem3); public static readonly HotkeySettings DefaultNextTabHotkeyValue = new HotkeySettings(true, false, false, false, VkNext); public static readonly HotkeySettings DefaultPrevTabHotkeyValue = new HotkeySettings(true, false, false, false, VkPrior); + public static readonly HotkeySettings DefaultMonitorRotationHotkeyValue = new HotkeySettings(false, false, true, false, VkX); public FZConfigProperties() { @@ -45,6 +47,8 @@ namespace Microsoft.PowerToys.Settings.UI.Library FancyzonesWindowSwitching = new BoolProperty(true); FancyzonesNextTabHotkey = new KeyboardKeysProperty(DefaultNextTabHotkeyValue); FancyzonesPrevTabHotkey = new KeyboardKeysProperty(DefaultPrevTabHotkeyValue); + FancyzonesMonitorRotation = new BoolProperty(); + FancyzonesMonitorRotationHotkey = new KeyboardKeysProperty(DefaultMonitorRotationHotkeyValue); FancyzonesMakeDraggedWindowTransparent = new BoolProperty(); FancyzonesAllowPopupWindowSnap = new BoolProperty(); FancyzonesAllowChildWindowSnap = new BoolProperty(); @@ -139,6 +143,12 @@ namespace Microsoft.PowerToys.Settings.UI.Library [JsonPropertyName("fancyzones_prevTab_hotkey")] public KeyboardKeysProperty FancyzonesPrevTabHotkey { get; set; } + [JsonPropertyName("fancyzones_monitorRotation")] + public BoolProperty FancyzonesMonitorRotation { get; set; } + + [JsonPropertyName("fancyzones_monitorRotation_hotkey")] + public KeyboardKeysProperty FancyzonesMonitorRotationHotkey { get; set; } + [JsonPropertyName("fancyzones_excluded_apps")] public StringProperty FancyzonesExcludedApps { get; set; } diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/FancyZonesPage.xaml b/src/settings-ui/Settings.UI/SettingsXAML/Views/FancyZonesPage.xaml index 9922140ac3..507d944432 100644 --- a/src/settings-ui/Settings.UI/SettingsXAML/Views/FancyZonesPage.xaml +++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/FancyZonesPage.xaml @@ -215,6 +215,27 @@ + + + + + + + + + + + - \ No newline at end of file + diff --git a/src/settings-ui/Settings.UI/Strings/en-us/Resources.resw b/src/settings-ui/Settings.UI/Strings/en-us/Resources.resw index 06d8bc8e62..86959b50b6 100644 --- a/src/settings-ui/Settings.UI/Strings/en-us/Resources.resw +++ b/src/settings-ui/Settings.UI/Strings/en-us/Resources.resw @@ -912,6 +912,18 @@ opera.exe Previous window + + Rotate windows across monitors + + + Hold the shortcut and press Left or Right arrow to rotate open windows across all monitors. + + + Rotation mode shortcut + + + Hold this shortcut, then press Left or Right arrow to choose the rotation direction. + Open layout editor launches the FancyZones layout editor application @@ -6595,4 +6607,4 @@ Text uses the current drawing color. Example: outlook {Locked="outlook"} - \ No newline at end of file + diff --git a/src/settings-ui/Settings.UI/ViewModels/FancyZonesViewModel.cs b/src/settings-ui/Settings.UI/ViewModels/FancyZonesViewModel.cs index 3fa21824e6..0dfc67bb5b 100644 --- a/src/settings-ui/Settings.UI/ViewModels/FancyZonesViewModel.cs +++ b/src/settings-ui/Settings.UI/ViewModels/FancyZonesViewModel.cs @@ -91,10 +91,12 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels _systemTheme = Settings.Properties.FancyzonesSystemTheme.Value; _showZoneNumber = Settings.Properties.FancyzonesShowZoneNumber.Value; _windowSwitching = Settings.Properties.FancyzonesWindowSwitching.Value; + _monitorRotation = Settings.Properties.FancyzonesMonitorRotation.Value; EditorHotkey = Settings.Properties.FancyzonesEditorHotkey.Value; NextTabHotkey = Settings.Properties.FancyzonesNextTabHotkey.Value; PrevTabHotkey = Settings.Properties.FancyzonesPrevTabHotkey.Value; + MonitorRotationHotkey = Settings.Properties.FancyzonesMonitorRotationHotkey.Value; // set the callback functions value to handle outgoing IPC message. SendConfigMSG = ipcMSGCallBackFunc; @@ -141,7 +143,7 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels { var hotkeysDict = new Dictionary { - [ModuleName] = [EditorHotkey, NextTabHotkey, PrevTabHotkey], + [ModuleName] = [EditorHotkey, NextTabHotkey, PrevTabHotkey, MonitorRotationHotkey], }; return hotkeysDict; @@ -180,6 +182,8 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels private bool _windowSwitching; private HotkeySettings _nextTabHotkey; private HotkeySettings _prevTabHotkey; + private bool _monitorRotation; + private HotkeySettings _monitorRotationHotkey; private string _zoneInActiveColor; private string _zoneBorderColor; private string _zoneHighlightColor; @@ -213,6 +217,7 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels OnPropertyChanged(nameof(SnapHotkeysCategoryEnabled)); OnPropertyChanged(nameof(QuickSwitchEnabled)); OnPropertyChanged(nameof(WindowSwitchingCategoryEnabled)); + OnPropertyChanged(nameof(MonitorRotationCategoryEnabled)); } } } @@ -246,6 +251,14 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels } } + public bool MonitorRotationCategoryEnabled + { + get + { + return _isEnabled && _monitorRotation; + } + } + public bool ShiftDrag { get @@ -863,6 +876,52 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels } } + public bool MonitorRotation + { + get + { + return _monitorRotation; + } + + set + { + if (value != _monitorRotation) + { + _monitorRotation = value; + + Settings.Properties.FancyzonesMonitorRotation.Value = _monitorRotation; + NotifyPropertyChanged(); + OnPropertyChanged(nameof(MonitorRotationCategoryEnabled)); + } + } + } + + public HotkeySettings MonitorRotationHotkey + { + get + { + return _monitorRotationHotkey; + } + + set + { + if (value != _monitorRotationHotkey) + { + if (value == null) + { + _monitorRotationHotkey = FZConfigProperties.DefaultMonitorRotationHotkeyValue; + } + else + { + _monitorRotationHotkey = value; + } + + Settings.Properties.FancyzonesMonitorRotationHotkey.Value = _monitorRotationHotkey; + NotifyPropertyChanged(); + } + } + } + public string ExcludedApps { get