Skip to content

Commit 1daaa78

Browse files
committed
feat(recording): add option to hide webcam preview while recording
1 parent bba8bda commit 1daaa78

5 files changed

Lines changed: 40 additions & 1 deletion

File tree

Reframed/Recording/WebcamPreviewWindow.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,14 @@ final class WebcamPreviewWindow {
122122
panel?.orderFrontRegardless()
123123
}
124124

125+
func hide() {
126+
panel?.orderOut(nil)
127+
}
128+
129+
func unhide() {
130+
panel?.orderFrontRegardless()
131+
}
132+
125133
func close() {
126134
savePosition()
127135
if let observer = moveObserver {

Reframed/State/ConfigService.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,11 @@ final class ConfigService {
7070
set { data.dimOuterArea = newValue; save() }
7171
}
7272

73+
var hideCameraPreviewWhileRecording: Bool {
74+
get { data.hideCameraPreviewWhileRecording }
75+
set { data.hideCameraPreviewWhileRecording = newValue; save() }
76+
}
77+
7378
var isMicrophoneOn: Bool {
7479
get { data.isMicrophoneOn }
7580
set { data.isMicrophoneOn = newValue; save() }
@@ -162,6 +167,7 @@ private struct ConfigData: Codable {
162167
var projectFolder: String = "~/Reframed"
163168
var retinaCapture: Bool = false
164169
var dimOuterArea: Bool = true
170+
var hideCameraPreviewWhileRecording: Bool = false
165171
var isMicrophoneOn: Bool = false
166172
var appearance: String = "system"
167173
var shortcuts: [String: KeyboardShortcut] = [:]

Reframed/State/RecordingOptions.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,10 @@ final class RecordingOptions {
8080
didSet { ConfigService.shared.dimOuterArea = dimOuterArea }
8181
}
8282

83+
var hideCameraPreviewWhileRecording: Bool {
84+
didSet { ConfigService.shared.hideCameraPreviewWhileRecording = hideCameraPreviewWhileRecording }
85+
}
86+
8387
var selectedCamera: CaptureDevice? {
8488
didSet { ConfigService.shared.cameraDeviceId = selectedCamera?.id }
8589
}
@@ -113,6 +117,7 @@ final class RecordingOptions {
113117
captureSystemAudio = config.captureSystemAudio
114118
retinaCapture = config.retinaCapture
115119
dimOuterArea = config.dimOuterArea
120+
hideCameraPreviewWhileRecording = config.hideCameraPreviewWhileRecording
116121

117122
let savedDeviceId = config.audioDeviceId
118123
if let deviceId = savedDeviceId {

Reframed/State/SessionState.swift

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,9 @@ final class SessionState {
393393
if let camSession = box?.session {
394394
let previewWindow = WebcamPreviewWindow()
395395
previewWindow.show(captureSession: camSession)
396+
if options.hideCameraPreviewWhileRecording {
397+
previewWindow.hide()
398+
}
396399
self.webcamPreviewWindow = previewWindow
397400
}
398401
}
@@ -441,6 +444,9 @@ final class SessionState {
441444
if let camSession = box?.session {
442445
let previewWindow = WebcamPreviewWindow()
443446
previewWindow.show(captureSession: camSession)
447+
if options.hideCameraPreviewWhileRecording {
448+
previewWindow.hide()
449+
}
444450
self.webcamPreviewWindow = previewWindow
445451
}
446452
}
@@ -646,10 +652,16 @@ final class SessionState {
646652
if windowPositionObserver == nil, case .window(let win) = captureTarget {
647653
startWindowTracking(windowID: win.windowID)
648654
}
655+
if options.hideCameraPreviewWhileRecording {
656+
webcamPreviewWindow?.hide()
657+
}
649658
showToolbar()
650659
case .paused:
651-
break
660+
if options.hideCameraPreviewWhileRecording {
661+
webcamPreviewWindow?.unhide()
662+
}
652663
default:
664+
webcamPreviewWindow?.unhide()
653665
stopAudioLevelPolling()
654666
stopWindowTracking()
655667
}

Reframed/UI/SettingsGeneralTab.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,14 @@ extension SettingsView {
9393
set: { options?.dimOuterArea = $0 }
9494
)
9595
)
96+
97+
settingsToggle(
98+
"Hide Camera Preview While Recording",
99+
isOn: Binding(
100+
get: { options?.hideCameraPreviewWhileRecording ?? false },
101+
set: { options?.hideCameraPreviewWhileRecording = $0 }
102+
)
103+
)
96104
}
97105
}
98106
}

0 commit comments

Comments
 (0)