From 53724a66521b02d830c8e93dbbd2cd6d89bb550c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E5=91=98=E9=98=BF=E6=B1=9F=28Relakkes?= =?UTF-8?q?=29?= Date: Fri, 29 May 2026 11:36:39 +0800 Subject: [PATCH] feat(desktop): add computeWebviewBounds helper Co-Authored-By: Claude Opus 4.8 (1M context) --- .../browser/computeWebviewBounds.test.ts | 14 ++++++++++++++ .../src/components/browser/computeWebviewBounds.ts | 10 ++++++++++ 2 files changed, 24 insertions(+) create mode 100644 desktop/src/components/browser/computeWebviewBounds.test.ts create mode 100644 desktop/src/components/browser/computeWebviewBounds.ts diff --git a/desktop/src/components/browser/computeWebviewBounds.test.ts b/desktop/src/components/browser/computeWebviewBounds.test.ts new file mode 100644 index 00000000..0491bc5f --- /dev/null +++ b/desktop/src/components/browser/computeWebviewBounds.test.ts @@ -0,0 +1,14 @@ +import { describe, expect, it } from 'vitest' +import { computeWebviewBounds } from './computeWebviewBounds' + +describe('computeWebviewBounds', () => { + it('maps a DOMRect to logical bounds (rounded)', () => { + const rect = { left: 100.4, top: 50.6, width: 800.2, height: 600.9 } as DOMRect + expect(computeWebviewBounds(rect)).toEqual({ x: 100, y: 51, width: 800, height: 601 }) + }) + + it('clamps negative/zero sizes to 0', () => { + const rect = { left: -5, top: -5, width: -10, height: 0 } as DOMRect + expect(computeWebviewBounds(rect)).toEqual({ x: -5, y: -5, width: 0, height: 0 }) + }) +}) diff --git a/desktop/src/components/browser/computeWebviewBounds.ts b/desktop/src/components/browser/computeWebviewBounds.ts new file mode 100644 index 00000000..cc5568b6 --- /dev/null +++ b/desktop/src/components/browser/computeWebviewBounds.ts @@ -0,0 +1,10 @@ +export type WebviewBounds = { x: number; y: number; width: number; height: number } + +export function computeWebviewBounds(rect: Pick): WebviewBounds { + return { + x: Math.round(rect.left), + y: Math.round(rect.top), + width: Math.max(0, Math.round(rect.width)), + height: Math.max(0, Math.round(rect.height)), + } +}