* fix(canvas): edit section labels inline - Vertically center shaped section titles using cached paragraph metrics\n- Add generalized canvas-label edit state and a reusable inline label control\n- Match dark and light label presentation while editing and commit renames with undo * fix(canvas): align label contrast handling Use shared WCAG contrast selection for rendered and edited canvas labels while retaining exact node-fill presentation in the editing overlay. * fix(canvas): composite translucent label colors Choose label foreground contrast after compositing translucent section fills against the active canvas background.
40 lines
1.4 KiB
TypeScript
40 lines
1.4 KiB
TypeScript
import { beforeAll, describe, expect, test } from 'bun:test'
|
|
import { readFileSync } from 'node:fs'
|
|
|
|
import { initCanvasKit } from '#cli/headless'
|
|
import { LabelParagraphCache } from '#core/canvas/labels/paragraph-cache'
|
|
|
|
import { repoPath } from '#tests/helpers/paths'
|
|
|
|
let ck: Awaited<ReturnType<typeof initCanvasKit>>
|
|
|
|
beforeAll(async () => {
|
|
ck = await initCanvasKit()
|
|
})
|
|
|
|
describe('label paragraph cache', () => {
|
|
test('shapes labels with Inter and invalidates native paragraphs by font generation', () => {
|
|
const bytes = readFileSync(repoPath('public/Inter-Regular.ttf'))
|
|
const data = bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength)
|
|
const provider = ck.TypefaceFontProvider.Make()
|
|
provider.registerFont(data, 'Inter')
|
|
const cache = new LabelParagraphCache()
|
|
try {
|
|
const metrics = cache.measure(ck, provider, 'Primitives', 12, 200, ck.BLACK, 1)
|
|
expect(metrics.width).toBeGreaterThan(40)
|
|
expect(metrics.width).toBeLessThan(80)
|
|
expect(metrics.height).toBeGreaterThan(0)
|
|
expect(cache.size()).toBe(1)
|
|
|
|
cache.measure(ck, provider, 'Primitives', 12, 200, ck.BLACK, 1)
|
|
expect(cache.size()).toBe(1)
|
|
cache.measure(ck, provider, 'Primitives', 12, 200, ck.BLACK, 2)
|
|
expect(cache.size()).toBe(1)
|
|
} finally {
|
|
cache.clear()
|
|
provider.delete()
|
|
}
|
|
expect(cache.size()).toBe(0)
|
|
})
|
|
})
|