From 8230f12a309e0d9454a6579a7c7a2f801eb0eac4 Mon Sep 17 00:00:00 2001 From: young Date: Tue, 1 Sep 2026 20:16:35 +1000 Subject: [PATCH] Address webcam migration and fullscreen overlay review --- electron/windows.ts | 1 - .../video-editor/projectPersistence.test.ts | 15 ++++++++++++++- src/components/video-editor/projectPersistence.ts | 12 ++++++++++-- src/components/video-editor/webcamOverlay.test.ts | 2 +- src/components/video-editor/webcamOverlay.ts | 3 ++- 5 files changed, 27 insertions(+), 6 deletions(-) diff --git a/electron/windows.ts b/electron/windows.ts index 55b0e6ce..bb3d6d07 100644 --- a/electron/windows.ts +++ b/electron/windows.ts @@ -463,7 +463,6 @@ export function createHudOverlayWindow(): BrowserWindow { if (process.platform === "darwin") { win.setVisibleOnAllWorkspaces(true, { visibleOnFullScreen: true, - skipTransformProcessType: true, }); } diff --git a/src/components/video-editor/projectPersistence.test.ts b/src/components/video-editor/projectPersistence.test.ts index 6054f9e8..82a7fbcb 100644 --- a/src/components/video-editor/projectPersistence.test.ts +++ b/src/components/video-editor/projectPersistence.test.ts @@ -53,7 +53,20 @@ describe("normalizeProjectEditor", () => { } as never, }); - expect(editor.webcam.roundness).toBeCloseTo(41.67, 1); + expect(editor.webcam.roundness).toBeCloseTo(17.36, 1); expect(editor.webcam.cornerRadius).toBeUndefined(); }); + + it("uses the legacy webcam size when migrating radius pixels", () => { + const editor = normalizeProjectEditor({ + webcam: { + cornerRadius: 90, + size: 80, + } as never, + }); + + expect(editor.webcam.width).toBe(80); + expect(editor.webcam.height).toBe(80); + expect(editor.webcam.roundness).toBeCloseTo(4.34, 1); + }); }); diff --git a/src/components/video-editor/projectPersistence.ts b/src/components/video-editor/projectPersistence.ts index 788f9693..00193bb9 100644 --- a/src/components/video-editor/projectPersistence.ts +++ b/src/components/video-editor/projectPersistence.ts @@ -1052,8 +1052,16 @@ export function normalizeProjectEditor(editor: Partial): Pro : isFiniteNumber(webcam.cornerRadius) ? convertLegacyWebcamRadiusToRoundness( webcam.cornerRadius, - isFiniteNumber(webcam.width) ? webcam.width : DEFAULT_WEBCAM_SIZE, - isFiniteNumber(webcam.height) ? webcam.height : DEFAULT_WEBCAM_SIZE, + isFiniteNumber(webcam.width) + ? webcam.width + : isFiniteNumber(webcam.size) + ? webcam.size + : DEFAULT_WEBCAM_SIZE, + isFiniteNumber(webcam.height) + ? webcam.height + : isFiniteNumber(webcam.size) + ? webcam.size + : DEFAULT_WEBCAM_SIZE, ) : DEFAULT_WEBCAM_ROUNDNESS, shadow: isFiniteNumber(webcam.shadow) diff --git a/src/components/video-editor/webcamOverlay.test.ts b/src/components/video-editor/webcamOverlay.test.ts index 96ea0f4c..d5b6381b 100644 --- a/src/components/video-editor/webcamOverlay.test.ts +++ b/src/components/video-editor/webcamOverlay.test.ts @@ -20,7 +20,7 @@ describe("webcam roundness", () => { }); it("converts legacy reference pixels without changing the approximate shape", () => { - expect(convertLegacyWebcamRadiusToRoundness(90, 40, 40)).toBeCloseTo(41.67, 1); + expect(convertLegacyWebcamRadiusToRoundness(90, 40, 40)).toBeCloseTo(17.36, 1); }); }); diff --git a/src/components/video-editor/webcamOverlay.ts b/src/components/video-editor/webcamOverlay.ts index dfe633e8..d84d99e1 100644 --- a/src/components/video-editor/webcamOverlay.ts +++ b/src/components/video-editor/webcamOverlay.ts @@ -32,7 +32,8 @@ export function convertLegacyWebcamRadiusToRoundness( const referenceShortSide = WEBCAM_REFERENCE_VIEWPORT_HEIGHT * (clamp(Math.min(widthPercent, heightPercent), 10, 100) / 100); - return clamp((Math.max(0, radiusPixels) / (referenceShortSide / 2)) * 100, 0, 100); + const normalizedRadius = clamp(Math.max(0, radiusPixels) / (referenceShortSide / 2), 0, 1); + return normalizedRadius ** 2 * 100; } export function getWebcamPositionForPreset(preset: WebcamPositionPreset): { x: number; y: number } {