From d55b7b49ca05bfc9dab53effee3b5ca04de9e58e Mon Sep 17 00:00:00 2001 From: 3dtours Date: Wed, 23 Sep 2026 10:59:49 +0700 Subject: [PATCH] web: give each watermark its own collapse, and a face to print in MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The panel shared one column between the two marks, so GPS's colour, its two switches and its hand-typed place stood open beside the custom mark's text, colour and size whether or not either mark was on. The two are now collapses, one per mark: the header chip is the section, and that mark's own controls sit under it. What opens a section is the mark itself — GPS WATERMARK ON opens GPS's controls, CUSTOM WATERMARK ON opens the custom mark's — so there is no new state and no way for a panel to disagree with the pixels. Both marks gain the FONT strip the phone has had (TEXT FONT for the custom mark, FONT for GPS, whose stamp the phone also lets you set a face on). A browser has no font service, so the list is exactly what the bundle carries: the site's two self-hosted families, Inter and Fraunces (SIL OFL), their latin, latin-ext and vietnamese woff2 subsets decompressed, pinned to weight 400 @ opsz 14 and merged into ONE TTF per family — drawText has no glyph fallback, so a family mapped to only the latin subset would print a Vietnamese place name as tofu. DEFAULT stays the bundled Cousine face, which is what every existing session and every mark without a family prints. Two engine bugs came out of it. CanvasKit 0.42's Font.getGlyphWidths passes its output pointer where the wasm export wants the bounds pointer, so every glyph in a run comes back holding one identical, rounded width — at 64px on the merged Inter face, 'H' and 'i' both answered 42, while hmtx says 0.743em and 0.242em, and a box measured off it was 27% too wide ("Hà Nội 09/23" 510px against a true 403px). The shim now rebinds it with the pointers in the order _getGlyphWidthBounds reads them, and the stage's boxes measure with linear metrics, which land on hmtx exactly (403.28px against 403.28; hinted is 407). And CanvasKit's TypefaceFontProvider.matchFamilyStyle answers null for every style shape this binding accepts, so a name registered with it never resolved — the shim keeps its own registry keyed by family name instead. Measured: tsc clean; the engine harness on the merged faces 26/26, including the registry's advances against hmtx (Inter 6.3013em, Fraunces 6.3475em); the deployed app under Playwright 38/38 over the two collapses and both FONT strips — each mark's controls appear only with its own mark on, the DEFAULT/INTER/ FRAUNCES box widths match hmtx, the baked ink fills the box, the top edge re-hangs off the new ascent (Inter 0.96875em against Cousine's 0.8325em, 3.4px at this size) with the left edge fixed, and UNDO round-trips. Opening a section narrows the stage by 168px with no window resize (955px -> 787px), so the stage now re-measures its drop boxes off a ResizeObserver on the frame and the picture rather than on the next render. Not ported: the phone's GPS watermark still prints in the bundled face only (no emulator here to verify a phone-side font strip), and the FONT options are not behind the PRO gate the way the phone gates non-default families. --- .../public/assets/Fraunces-Regular.ttf | Bin 0 -> 89576 bytes .../frontend/public/assets/Inter-Regular.ttf | Bin 0 -> 164820 bytes docker/frontend/src/App.tsx | 195 +++++++++++------- docker/frontend/src/engine/assets.ts | 23 ++- docker/frontend/src/engine/exportEngine.ts | 57 ++++- docker/frontend/src/engine/session.ts | 7 +- docker/frontend/src/engine/skiaShim.ts | 48 +++-- docker/frontend/src/styles/app.css | 5 + docker/frontend/src/ui/ImageStage.tsx | 64 +++++- 9 files changed, 286 insertions(+), 113 deletions(-) create mode 100644 docker/frontend/public/assets/Fraunces-Regular.ttf create mode 100644 docker/frontend/public/assets/Inter-Regular.ttf diff --git a/docker/frontend/public/assets/Fraunces-Regular.ttf b/docker/frontend/public/assets/Fraunces-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..52f9605f86bdbc3e471aa294f6d88130215335c2 GIT binary patch literal 89576 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°Xar>=HAt#Q53IRop4DQq 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 literal 0 HcmV?d00001 diff --git a/docker/frontend/public/assets/Inter-Regular.ttf b/docker/frontend/public/assets/Inter-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..1bca8bf2ed1cdd46eb8092645ba54760546c472c GIT binary patch literal 164820 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 z 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 literal 0 HcmV?d00001 diff --git a/docker/frontend/src/App.tsx b/docker/frontend/src/App.tsx index a390af9..89928f3 100644 --- a/docker/frontend/src/App.tsx +++ b/docker/frontend/src/App.tsx @@ -11,7 +11,7 @@ import { ClearPhotoModal } from './ui/ClearPhotoModal'; import { ExportModal } from './ui/ExportModal'; import { RecipeCreatePanel, type RecipeDraft } from './ui/RecipeCreatePanel'; import { useI18n } from './i18n/I18nProvider'; -import { loadEngine } from './engine/assets'; +import { loadEngine, MARK_FACES } from './engine/assets'; import { renderPhoto, type RenderAssets } from './engine/exportEngine'; import { download, fileToBytes, readCapturedAt, readGps, readIso, resizedJpeg, scaledJpeg } from './engine/imageOps'; import { clearSession, forgetPhoto, loadPhoto, loadState, savePhoto, saveState } from './engine/session'; @@ -151,8 +151,8 @@ const SLIDER_SWATCH: Partial string>> = { // The option strips, one open at a time (phone's GroupKey set minus the groups // the web engine has no knob for). type GroupKey = 'cx' | 'cxb' | 'dr' | 'crop' | 'rotate' | 'style' | 'temp' | 'wm' - | 'wmColor' | 'wmSize' | 'gpsColor' | 'gpsName' | 'gpsTime'; -const WM_SUBGROUPS: GroupKey[] = ['wmColor', 'wmSize', 'gpsColor', 'gpsName', 'gpsTime']; + | 'wmColor' | 'wmSize' | 'wmFont' | 'gpsColor' | 'gpsName' | 'gpsTime' | 'gpsFont'; +const WM_SUBGROUPS: GroupKey[] = ['wmColor', 'wmSize', 'wmFont', 'gpsColor', 'gpsName', 'gpsTime', 'gpsFont']; const isWmPanel = (g: GroupKey | null) => g === 'wm' || (g !== null && WM_SUBGROUPS.includes(g)); // A slider row opened from a strip returns to it with "<" (COLOR TEMP -> TEMP). const PARAM_GROUP: Partial> = { temperature: 'temp', straighten: 'rotate' }; @@ -178,6 +178,13 @@ const WM_SIZES = [ { v: '1.5', d: '1.5x' }, { v: '2', d: '2x' }, ]; +// FONT's list: the faces the bundle carries (see engine/assets.ts). The phone +// lists the device's own families through the platform font manager; a browser +// has no font service, so the honest list is what we ship. +const WM_FONTS = [ + { v: 'DEFAULT', d: 'DEFAULT' }, + ...MARK_FACES.map((f) => ({ v: f.family, d: f.family.toUpperCase() })), +]; interface LoadedSource { bytes: Uint8Array; @@ -190,13 +197,13 @@ interface LoadedSource { // multiplier of the base face — 3.2% of the stamp width. The drag box on the // photo reads and writes exactly these three numbers, so what the box encloses // is what the file gets. -type MarkStyle = { color: string; size: number; x: number; y: number }; -const DEFAULT_MARK_STYLE: MarkStyle = { color: '#ffffff', size: 1, x: 0.5, y: 0.92 }; +type MarkStyle = { color: string; size: number; x: number; y: number; font: string | null }; +const DEFAULT_MARK_STYLE: MarkStyle = { color: '#ffffff', size: 1, x: 0.5, y: 0.92, font: null }; // GPS carries the same three geometry numbers plus its two switches, and its // box on the photo reads and writes them the same way the custom mark's does. -type GpsStyle = { color: string; showName: boolean; showTime: boolean; size: number; x: number; y: number }; -const DEFAULT_GPS_STYLE: GpsStyle = { color: '#f59e0b', showName: true, showTime: true, size: 1.2, x: 0.06, y: 0.7 }; +type GpsStyle = { color: string; showName: boolean; showTime: boolean; size: number; x: number; y: number; font: string | null }; +const DEFAULT_GPS_STYLE: GpsStyle = { color: '#f59e0b', showName: true, showTime: true, size: 1.2, x: 0.06, y: 0.7, font: null }; // Where each mark's first row sits under y, and the icon column GPS prints // before its text — the engine's own em values, mirrored from the box that @@ -1859,6 +1866,24 @@ export function Workspace() { setMarkStyle((prev) => ({ ...prev, size: Number(v) })); }, }, + // The two FONT chips: the custom mark's own face, and GPS's (the phone + // gives GPS a FONT strip too — it used to print in the bundled face only). + wmFont: { + label: 'TEXT FONT', off: 'DEFAULT', value: markStyle.font ?? 'DEFAULT', + options: WM_FONTS, + onPick: (v) => { + remember(); + setMarkStyle((prev) => ({ ...prev, font: v === 'DEFAULT' ? null : v })); + }, + }, + gpsFont: { + label: 'FONT', off: 'DEFAULT', value: gpsStyle.font ?? 'DEFAULT', + options: WM_FONTS, + onPick: (v) => { + remember(); + setGpsStyle((prev) => ({ ...prev, font: v === 'DEFAULT' ? null : v })); + }, + }, gpsColor: { label: 'COLOR', off: '#f59e0b', value: gpsStyle.color, options: WM_COLORS, @@ -1919,7 +1944,12 @@ export function Workspace() { // no GPS is no longer a dead end — the switch stays live wherever the browser // can be asked for the device's own position (see locateMe). const canLocate = typeof navigator !== 'undefined' && !!navigator.geolocation; - const wmChips = (): ChipDef[] => [ + // Each watermark type is a collapse of its own: its chip is the header, and + // the header's panel (col 2) carries that mark's own controls under it — its + // colour, its face, its switches, its fields. Before, the two marks shared one + // column, so both sets of controls sat open at once. The mark being OFF is + // what closes the section, the same rule the phone's panel draws. + const gpsChips = (): ChipDef[] => [ { key: 'gps', label: useGeotag ? 'GPS WATERMARK ON' : 'GPS WATERMARK OFF', @@ -1935,7 +1965,9 @@ export function Workspace() { setUseGeotag(!useGeotag); }, }, - ...(useGeotag ? [groupChip('gpsColor'), groupChip('gpsName'), groupChip('gpsTime')] : []), + ...(useGeotag ? [groupChip('gpsColor'), groupChip('gpsFont'), groupChip('gpsName'), groupChip('gpsTime')] : []), + ]; + const customChips = (): ChipDef[] => [ { key: 'custom-wm', label: markOn ? 'CUSTOM WATERMARK ON' : 'CUSTOM WATERMARK OFF', @@ -1945,7 +1977,7 @@ export function Workspace() { setMarkOn(!markOn); }, }, - ...(markOn ? [groupChip('wmColor'), groupChip('wmSize')] : []), + ...(markOn ? [groupChip('wmColor'), groupChip('wmSize'), groupChip('wmFont')] : []), ]; // Every tab carries RESET, pinned outside the scrolling chips. @@ -1962,6 +1994,7 @@ export function Workspace() { || markOn || markText !== '' || markStyle.color !== DEFAULT_MARK_STYLE.color || markStyle.size !== DEFAULT_MARK_STYLE.size || markStyle.x !== DEFAULT_MARK_STYLE.x || markStyle.y !== DEFAULT_MARK_STYLE.y + || markStyle.font !== DEFAULT_MARK_STYLE.font || useGeotag || (Object.keys(DEFAULT_GPS_STYLE) as (keyof GpsStyle)[]).some((k) => gpsStyle[k] !== DEFAULT_GPS_STYLE[k]); }, [recipe, simId, frameId, crop, rotation, straighten, markOn, markText, markStyle, useGeotag, gpsStyle]); @@ -2421,78 +2454,84 @@ export function Workspace() { - {/* column 2 — FRAME's WATERMARK chip opens the mark's own panel */} + {/* column 2 — FRAME's WATERMARK chip opens the two collapses, one per + watermark type: the header chip, then that mark's own controls */} {wmOpen ? (
- setOpenGroup(null) }, - ...wmChips(), - ]} - /> - {markOn ? ( - setMarkText(e.target.value)} - /> - ) : null} - {useGeotag ? ( - <> + setOpenGroup(null) }]} /> + + {/* GPS WATERMARK — its colour, its face, its two rows, its place */} +
+ + {useGeotag ? ( + <> + setPlace(e.target.value)} + /> +

+ {gps + ? t(gps.source === 'device' ? 'wm.hasDevice' : gps.source ? 'wm.hasExif' : 'wm.hasManual') + : t('wm.noExif')} +

+ {!gps ? ( + <> +
+ +
+
+ setGpsManual((prev) => ({ ...prev, lat: e.target.value }))} + onBlur={() => { + const lat = Number(gpsManual.lat); + const lng = Number(gpsManual.lng); + if (Number.isFinite(lat) && Number.isFinite(lng) && gpsManual.lat && gpsManual.lng) { + setGps({ latitude: lat, longitude: lng, locality: place, timestamp: capturedAt ?? Date.now() }); + setUseGeotag(true); + } + }} + /> + setGpsManual((prev) => ({ ...prev, lng: e.target.value }))} + /> +
+ + ) : null} + + ) : null} +
+ + {/* CUSTOM WATERMARK — its text, its colour, its size, its face */} +
+ + {markOn ? ( setPlace(e.target.value)} + value={markText} + placeholder="TYPE WATERMARK TEXT" + maxLength={80} + onChange={(e) => setMarkText(e.target.value)} /> -

- {gps - ? t(gps.source === 'device' ? 'wm.hasDevice' : gps.source ? 'wm.hasExif' : 'wm.hasManual') - : t('wm.noExif')} -

- {!gps ? ( - <> -
- -
-
- setGpsManual((prev) => ({ ...prev, lat: e.target.value }))} - onBlur={() => { - const lat = Number(gpsManual.lat); - const lng = Number(gpsManual.lng); - if (Number.isFinite(lat) && Number.isFinite(lng) && gpsManual.lat && gpsManual.lng) { - setGps({ latitude: lat, longitude: lng, locality: place, timestamp: capturedAt ?? Date.now() }); - setUseGeotag(true); - } - }} - /> - setGpsManual((prev) => ({ ...prev, lng: e.target.value }))} - /> -
- - ) : null} - - ) : null} + ) : null} +
) : null} @@ -2623,6 +2662,7 @@ export function Workspace() { baselineEm: CUSTOM_BASELINE_EM, gapEm: 0, lines: [markText], + font: markStyle.font, onMove: setWatermarkPos, }, ] @@ -2637,6 +2677,7 @@ export function Workspace() { baselineEm: GPS_BASELINE_EM, gapEm: GPS_GAP_EM, lines: gpsLines, + font: gpsStyle.font, onMove: setGpsPos, }, ] diff --git a/docker/frontend/src/engine/assets.ts b/docker/frontend/src/engine/assets.ts index 5a8a50d..ce45ac3 100644 --- a/docker/frontend/src/engine/assets.ts +++ b/docker/frontend/src/engine/assets.ts @@ -1,11 +1,23 @@ import { initSkia, hasGpu } from './skiaShim'; import type { RenderAssets } from './exportEngine'; -// One CanvasKit instance per page, one copy of the three render assets. The wasm -// file is served from /wasm/ (scripts/copy-wasm.mjs puts it there at build time); -// the fonts and the wall-frame artwork are in public/assets. +// One CanvasKit instance per page, one copy of the render assets. The wasm file +// is served from /wasm/ (scripts/copy-wasm.mjs puts it there at build time); the +// fonts and the wall-frame artwork are in public/assets. let assets: RenderAssets | null = null; +// The faces the watermarks' FONT option offers beside DEFAULT. There is no OS +// font service in a browser, so the list is exactly what the bundle carries — +// and each family is ONE file, because drawText has no glyph fallback: a name +// mapped to only the latin subset would print a Vietnamese place name as tofu. +// The two here are the site's own self-hosted faces (styles/fonts.css, SIL OFL), +// with their latin / latin-ext / vietnamese woff2 subsets decompressed, pinned +// to weight 400 @ opsz 14 and merged into one TTF per family (fontTools). +export const MARK_FACES: { family: string; file: string }[] = [ + { family: 'Inter', file: '/assets/Inter-Regular.ttf' }, + { family: 'Fraunces', file: '/assets/Fraunces-Regular.ttf' }, +]; + async function buf(url: string): Promise { const res = await fetch(url); if (!res.ok) throw new Error(`fetch ${url}: ${res.status}`); @@ -22,12 +34,13 @@ export function probeGpu(): boolean { export async function loadEngine(): Promise<{ assets: RenderAssets; gpu: boolean }> { await initSkia({ locateFile: (file) => `/wasm/${file}` }); if (!assets) { - const [textFont, emojiFont, wallframePng] = await Promise.all([ + const [textFont, emojiFont, wallframePng, markFonts] = await Promise.all([ buf('/assets/Cousine-Regular.ttf'), buf('/assets/NotoEmoji-GPS.ttf'), buf('/assets/wallframe.png'), + Promise.all(MARK_FACES.map(async (face) => ({ family: face.family, bytes: await buf(face.file) }))), ]); - assets = { textFont, emojiFont, wallframe: new Uint8Array(wallframePng) }; + assets = { textFont, emojiFont, wallframe: new Uint8Array(wallframePng), markFonts }; } return { assets, gpu: probeGpu() }; } diff --git a/docker/frontend/src/engine/exportEngine.ts b/docker/frontend/src/engine/exportEngine.ts index 37078e0..c740ca8 100644 --- a/docker/frontend/src/engine/exportEngine.ts +++ b/docker/frontend/src/engine/exportEngine.ts @@ -51,6 +51,8 @@ export interface RenderAssets { textFont: ArrayBuffer; // assets/Cousine-Regular.ttf emojiFont: ArrayBuffer; // assets/NotoEmoji-GPS.ttf wallframe: Uint8Array; // wallframe.png + // The FONT option's faces beside DEFAULT (see assets.ts MARK_FACES). + markFonts: { family: string; bytes: ArrayBuffer }[]; } export interface RenderOptions { @@ -63,7 +65,7 @@ export interface RenderOptions { watermark?: { text: string; x: number; y: number; color?: string; size?: number; font?: string | null } | null; liteMark?: { text: string; x: number; y: number; color?: string; size?: number; font?: string | null } | null; watermarkRotation?: number; - gpsWatermark?: { x: number; y: number; size: number; color?: string; showName?: boolean; showTime?: boolean } | null; + gpsWatermark?: { x: number; y: number; size: number; color?: string; showName?: boolean; showTime?: boolean; font?: string | null } | null; wallframeLandscape?: boolean; frameWindowZoom?: { s: number; u: number; v: number } | null; photoRotation?: 0 | 90 | 180 | 270; @@ -235,16 +237,61 @@ function loadFaces(assets: RenderAssets) { const iconTypeface = Skia.Typeface.MakeFreeTypeFaceFromData(assets.emojiFont); if (!typeface || !iconTypeface) return null; faces = { typeface, iconTypeface }; - // Named-family lookup for the custom watermark's FONT option: register the - // bundled face so at least that one name resolves on web. + // Named-family lookup for the watermarks' FONT option: register the bundled + // face under the name it is known by, then the faces the FONT strip offers. try { Skia.FontMgr.System().registerFace(typeface, 'Cousine'); + for (const face of assets.markFonts) { + const named = Skia.Typeface.MakeFreeTypeFaceFromData(face.bytes); + if (named) Skia.FontMgr.System().registerFace(named, face.family); + } } catch { /* provider optional */ } return faces; } +// The face a mark carrying a named family draws with, or null for the bundled +// one. The stage's drag boxes ask the same question, so they measure with the +// same face the file will print. +function namedFace(font: string | null | undefined) { + return font ? Skia.FontMgr.System().matchFamilyStyle(font) : null; +} + +// The face's own numbers, for the boxes the stage draws over a mark: the width +// of the widest line plus the face's ascent/descent, all in pixels at `px`. +// Returns null while the engine is still loading, when no family was picked, or +// when the name is not one the bundle ships — the caller then falls back to the +// monospace em its constants know (ImageStage's WM_ADVANCE_EM and friends). +export function measureMark( + font: string | null | undefined, + px: number, + lines: string[] +): { width: number; ascent: number; descent: number } | null { + if (!Skia || !font || !lines.length) return null; + const face = namedFace(font); + if (!face) return null; + const sized = Skia.Font(face, px); + // Unhinted advances: hinted ones come back rounded per glyph, and a dozen of + // them drift a few pixels off the line they are supposed to bound. + sized.setLinearMetrics?.(true); + try { + const metrics = sized.getMetrics(); + let width = 0; + for (const line of lines) { + const advances = sized.getGlyphWidths(line) as unknown as ArrayLike; + let sum = 0; + for (let i = 0; i < advances.length; i++) sum += advances[i]; + width = Math.max(width, sum); + } + return { width, ascent: -metrics.ascent, descent: metrics.descent }; + } catch { + return null; + } finally { + sized.delete?.(); + } +} + // Both walls are one artwork on one code path: `wallframe` hangs the PNG turned // 90° CW (the portrait opening), `wallframe-landscape` lays it down as it is. const isWallframe = (id: FrameId) => id === 'wallframe' || id === 'wallframe-landscape'; @@ -691,7 +738,7 @@ export async function renderPhoto(input: RenderInput): Promise Math.max(0, Math.min(1, v)); const gpsSize = Math.round(fontSize * (gpsPos?.size ?? 1)); - const gpsFont = own(Skia.Font(typeface, gpsSize)); + const gpsFont = own(Skia.Font(namedFace(gpsPos?.font) ?? typeface, gpsSize)); const gpsIconFont = own(Skia.Font(iconTypeface, gpsSize)); const gpsGap = Math.round(gpsSize * 1.6); const baseX = clamp01(gpsPos?.x ?? 0.05) * stampW; @@ -717,7 +764,7 @@ export async function renderPhoto(input: RenderInput): Promise> 1); + this._getGlyphWidthBounds(idPtr, ids.length, outPtr, 0, paint ?? null); + return Float32Array.from( + canvasKit.HEAPF32.subarray(outPtr >> 2, (outPtr >> 2) + ids.length) + ); + } finally { + canvasKit._free(idPtr); + canvasKit._free(outPtr); + } + }; // frameUtils draws strokes with the numeric RN style (0 = fill, 1 = stroke). const setStyle = canvasKit.Paint.prototype.setStyle; canvasKit.Paint.prototype.setStyle = function (style: any) { @@ -190,24 +214,24 @@ export async function initSkia(options: InitSkiaOptions = {}): Promise { return Skia; } -// Named-family lookup for the custom watermark's FONT option. Only faces the -// bundle ships can be matched on web; anything else falls back to the caller's -// default typeface — the honest behaviour when there is no OS font service. +// Named-family lookup for the watermarks' FONT option. Only faces the bundle +// ships can be matched on web; anything else falls back to the caller's own +// typeface — the honest behaviour when there is no OS font service. +// +// The registry is ours, not CanvasKit's TypefaceFontProvider: that one answers +// `null` for every style shape this wasm binding accepts (probed with +// `{weight:400,width:5,slant:0}`, with the enum objects, and with `.value` +// unwrapped — all null), so a name registered with it never resolves. let fontMgr: any = null; -function makeFontMgr(canvasKit: any) { - const provider = canvasKit.TypefaceFontProvider.Make(); +function makeFontMgr(_canvasKit: any) { + const faces: Record = Object.create(null); return { registerFace(typeface: any, familyName: string) { - provider.registerFont(typeface, familyName); + if (typeface && familyName) faces[familyName.trim().toLowerCase()] = typeface; }, matchFamilyStyle(family: string) { - if (!family) return null; - try { - return provider.matchFamilyStyle?.(family, canvasKit.FontStyle.Normal) ?? null; - } catch { - return null; - } + return (family && faces[family.trim().toLowerCase()]) || null; }, }; } diff --git a/docker/frontend/src/styles/app.css b/docker/frontend/src/styles/app.css index 4d22d80..fabc220 100644 --- a/docker/frontend/src/styles/app.css +++ b/docker/frontend/src/styles/app.css @@ -109,6 +109,11 @@ ("GPS WATERMARK OFF", "CUSTOM WATERMARK OFF" + PRO), which wrap in the default column width. */ .wm-extra { border-right-color: var(--accent-line); width: 200px; } +/* The watermark panel is two collapses, one per mark: each header chip stands + on its own controls (colour, face, switches, fields), and a rule keeps the + two apart while both marks are on. */ +.wm-sec { display: flex; flex-direction: column; gap: 6px; } +.wm-sec + .wm-sec { margin-top: 10px; padding-top: 10px; border-top: 1px solid var(--border); } .chip { border: 1px solid var(--border); background: var(--bg-elev); diff --git a/docker/frontend/src/ui/ImageStage.tsx b/docker/frontend/src/ui/ImageStage.tsx index 8f3a8e3..5a48bd5 100644 --- a/docker/frontend/src/ui/ImageStage.tsx +++ b/docker/frontend/src/ui/ImageStage.tsx @@ -2,6 +2,7 @@ import { useCallback, useEffect, useMemo, useRef, useState, type ReactNode } fro import { useI18n } from '../i18n/I18nProvider'; import { MIN_CROP_FRAC, type CropRect } from '../../shared/types'; import { samplePixel } from '../engine/imageOps'; +import { measureMark } from '../engine/exportEngine'; import { Histogram } from './Histogram'; // One wheel notch, and how far the photo may be pulled open. @@ -11,13 +12,14 @@ const ZOOM_MAX = 8; const ZOOM_SETTLE_MS = 160; // The watermarks' own face — the engine draws both marks with the bundled -// Cousine face (the custom mark's FONT option is never set on web), and +// Cousine face unless the panel picked a family from the FONT strip, and // renderPhoto's numbers are what the boxes below read back: the face is 3.2% of // the stamp width, its advance is 0.6001em and its ascent/descent // 0.8325/0.3003em. The custom mark's baseline sits 0.35em under y; GPS draws // its rows 1.2em apart from a baseline 1.1em under y, with an icon column 1.6em // wide before the text. A box built from those same constants hugs exactly the -// text the file will carry. +// text the file will carry — and a mark carrying a named family is measured +// instead (measureMark), because those constants are Cousine's alone. const WM_FONT_FRAC = 0.032; const WM_ADVANCE_EM = 0.60009765625; const WM_ASCENT_EM = 0.83251953125; @@ -43,11 +45,33 @@ export type WmMark = { // The icon column GPS prints before its text, in em (0 for the custom mark). gapEm: number; // The rows as they will be drawn; the face is monospace, so the longest line - // in characters is the width and the count is the height. + // in characters is the width and the count is the height — unless a family + // from the FONT strip is set, when the face itself is measured. lines: string[]; + // The family the panel picked for this mark, null for the bundled face. + font: string | null; onMove: (p: { x?: number; y?: number; size?: number }) => void; }; +// One mark's box, from the numbers the engine draws it with. The width of the +// text is the face's own when the mark carries a family (measureMark), and the +// monospace em above otherwise; the ascent/descent come back with it, because +// the box's top is a baseline's height under y and another family's ascent is +// not Cousine's. Keyed by the mark itself so the drag handlers can reuse it. +const wmBoxOf = (mark: WmMark, fontPx: number) => { + const measured = mark.font ? measureMark(mark.font, fontPx, mark.lines) : null; + const ascent = measured?.ascent ?? WM_ASCENT_EM * fontPx; + const descent = measured?.descent ?? WM_DESCENT_EM * fontPx; + const text = measured?.width ?? Math.max(0, ...mark.lines.map((l) => l.length)) * WM_ADVANCE_EM * fontPx; + return { + ascent, + // In em, so the drag maths can move y by the height a growing face adds. + ascentEm: fontPx > 0 ? ascent / fontPx : WM_ASCENT_EM, + width: Math.max(fontPx, mark.gapEm * fontPx + text), + height: ascent + descent + (mark.lines.length - 1) * WM_ROW_STEP_EM * fontPx, + }; +}; + // The centre column: drop target, preview canvas, and the PEEK comparison. // Dragging a photo anywhere on the page works, not just on the frame — the // whole stage is the drop zone. @@ -218,7 +242,21 @@ export function ImageStage({ } measure(); window.addEventListener('resize', measure); - return () => window.removeEventListener('resize', measure); + // Opening a chip adds an options column and narrows the stage, with no + // window resize to hear about it — so the boxes stayed measured against the + // wider photo until some later render happened to re-run this effect. Watch + // the two things they are measured off instead. + const ro = typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(measure); + if (ro) { + const wrap = wrapRef.current; + const img = imgRef.current; + if (wrap) ro.observe(wrap); + if (img) ro.observe(img); + } + return () => { + ro?.disconnect(); + window.removeEventListener('resize', measure); + }; }, [cropEditing, compare, picking, pickPanelAt, wmCount, showStraighten, measure, previewUrl]); const grabPanel = (e: React.PointerEvent) => { @@ -509,14 +547,14 @@ export function ImageStage({ if (!box) return []; return marks.map((mark) => { const fontPx = wmFontPx(box.width, mark.size); - const longest = Math.max(0, ...mark.lines.map((l) => l.length)); + const { ascent, width, height } = wmBoxOf(mark, fontPx); return { mark, fontPx, left: mark.x * box.width, - top: mark.y * box.height + (mark.baselineEm - WM_ASCENT_EM) * fontPx, - width: Math.max(fontPx, (mark.gapEm + longest * WM_ADVANCE_EM) * fontPx), - height: (WM_ASCENT_EM + WM_DESCENT_EM + (mark.lines.length - 1) * WM_ROW_STEP_EM) * fontPx, + top: mark.y * box.height + mark.baselineEm * fontPx - ascent, + width, + height, }; }); }, [marks, box]); @@ -534,6 +572,9 @@ export function ImageStage({ left: number; width: number; fontPx: number; + // The face's ascent in em, so a resize keeps the box's top where it is + // whichever family the mark draws in. + ascentEm: number; } | null>(null); const beginWmDrag = (mark: WmMark, mode: 'move' | 'size') => (e: React.PointerEvent) => { @@ -544,7 +585,7 @@ export function ImageStage({ if (!b || !(b.width > 0 && b.height > 0)) return; e.currentTarget.setPointerCapture(e.pointerId); const fontPx = wmFontPx(b.width, mark.size); - const longest = Math.max(0, ...mark.lines.map((l) => l.length)); + const { width, ascentEm } = wmBoxOf(mark, fontPx); wmDragRef.current = { mode, mark, @@ -554,8 +595,9 @@ export function ImageStage({ px: e.clientX, py: e.clientY, left: b.left + mark.x * b.width, - width: Math.max(fontPx, (mark.gapEm + longest * WM_ADVANCE_EM) * fontPx), + width, fontPx, + ascentEm, }; }; @@ -582,7 +624,7 @@ export function ImageStage({ const fontPx = wmFontPx(b.width, size); d.mark.onMove({ size, - y: cl(d.y + ((WM_ASCENT_EM - d.mark.baselineEm) * (fontPx - d.fontPx)) / b.height, 0, 1), + y: cl(d.y + ((d.ascentEm - d.mark.baselineEm) * (fontPx - d.fontPx)) / b.height, 0, 1), }); };