From 9764b8570f4267676aace72efc1ee5c894cdae41 Mon Sep 17 00:00:00 2001 From: Kai Azim <68963405+MrKai77@users.noreply.github.com> Date: Sun, 24 Dec 2023 12:58:03 -0700 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20#128=20Adjust=20window=20frame=20in?= =?UTF-8?q?=20real-time=20when=20preview=20is=20disabled?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Loop/Managers/LoopManager.swift | 17 ++++++++++++++++- Loop/Settings/PreviewSettingsView.swift | 20 +++++++++++++++++++- Loop/Window Management/WindowEngine.swift | 4 ++-- 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/Loop/Managers/LoopManager.swift b/Loop/Managers/LoopManager.swift index 029f65af..e1582295 100644 --- a/Loop/Managers/LoopManager.swift +++ b/Loop/Managers/LoopManager.swift @@ -137,6 +137,15 @@ class LoopManager: ObservableObject { DispatchQueue.main.async { Notification.Name.directionChanged.post(userInfo: ["direction": self.currentResizeDirection]) + + if !Defaults[.previewVisibility] { + WindowEngine.resize( + self.targetWindow!, + to: self.currentResizeDirection, + self.screenWithMouse!, + supressAnimations: true + ) + } } NSHapticFeedbackManager.defaultPerformer.perform( @@ -257,7 +266,13 @@ class LoopManager: ObservableObject { self.currentResizeDirection != .noAction && self.isLoopActive { - WindowEngine.resize(self.targetWindow!, to: self.currentResizeDirection, self.screenWithMouse!) + if Defaults[.previewVisibility] { + WindowEngine.resize( + self.targetWindow!, + to: self.currentResizeDirection, + self.screenWithMouse! + ) + } // This rotates the menubar icon Notification.Name.didLoop.post() diff --git a/Loop/Settings/PreviewSettingsView.swift b/Loop/Settings/PreviewSettingsView.swift index fd040c4c..28ee69b3 100644 --- a/Loop/Settings/PreviewSettingsView.swift +++ b/Loop/Settings/PreviewSettingsView.swift @@ -15,10 +15,28 @@ struct PreviewSettingsView: View { @Default(.previewCornerRadius) var previewCornerRadius @Default(.previewBorderThickness) var previewBorderThickness + @Default(.animateWindowResizes) var animateWindowResizes + var body: some View { Form { Section("Behavior") { - Toggle("Show Preview when looping", isOn: $previewVisibility) + Toggle(isOn: $previewVisibility) { + VStack(alignment: .leading) { + Text("Show Preview when looping") + + if !previewVisibility { + VStack(alignment: .leading) { + Text("Adjusts window frame in real-time as you choose a direction.") + + if self.animateWindowResizes { + Text("Windows will not animate their resizes.") + } + } + .font(.caption) + .foregroundStyle(.secondary) + } + } + } } Section { diff --git a/Loop/Window Management/WindowEngine.swift b/Loop/Window Management/WindowEngine.swift index b8a93107..2347452a 100644 --- a/Loop/Window Management/WindowEngine.swift +++ b/Loop/Window Management/WindowEngine.swift @@ -15,7 +15,7 @@ struct WindowEngine { /// - window: Window to be resized /// - direction: WindowDirection /// - screen: Screen the window should be resized on - static func resize(_ window: Window, to direction: WindowDirection, _ screen: NSScreen) { + static func resize(_ window: Window, to direction: WindowDirection, _ screen: NSScreen, supressAnimations: Bool = false) { guard direction != .noAction else { return } window.activate() @@ -47,7 +47,7 @@ struct WindowEngine { } var targetWindowFrame = WindowEngine.applyPadding(currentWindowFrame, direction) - var animate = Defaults[.animateWindowResizes] + var animate = (!supressAnimations && Defaults[.animateWindowResizes]) if animate { if PermissionsManager.ScreenRecording.getStatus() == false { PermissionsManager.ScreenRecording.requestAccess()