openpencil/tests/engine
rcoenen 27cfcbb932
fix(resize): scale group and boolean children
* fix(resize): scale children when resizing GROUP or BOOLEAN_OPERATION

Resizing a group (or boolean operation) only moved the bounding box and
rescaled the selection outline — the rendered fill stayed at its original
size, so the blue outline and the filled content visibly diverged.

Two root causes, both in the resize preview path:

1. During drag, children were scaled in the preview graph via
   updateNodePreview(), which mutates nodes without emitting a node:updated
   event. The renderer's vector/geometry caches (vectorPathCache,
   fillGeometryCache, strokeGeometryCache) were therefore never invalidated,
   so fills kept drawing from stale, unscaled cached paths while outlines
   drew live from the new dimensions. Fixed by calling
   renderer.invalidateVectorPath(childId) after each child preview update.

2. On commit, the final scaled values were written with updateNode() but no
   repaint was requested, leaving the canvas frozen on the last mismatched
   drag frame until the next interaction. Fixed by calling requestRepaint()
   after commitGroupResize().

collectDescendants() now also collects children for BOOLEAN_OPERATION nodes,
which render purely from child geometry (no node-level scale), so scaling the
children is the only way to scale the result — same mechanism as GROUP, no
double-transform. Group resize verified visually; boolean resize verified in
-browser via the editor automation API.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(editor): preserve vector undo during group resize

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Danila Poyarkov <dev@dannote.net>
2026-06-06 17:05:09 +03:00
..
acp chore: enable stricter oxlint rules 2026-05-18 18:58:30 +03:00
app feat(demo): showcase text decoration fidelity 2026-05-26 14:24:13 +03:00
cli chore: enable stricter oxlint rules 2026-05-18 18:58:30 +03:00
clipboard chore: format codebase 2026-05-24 12:15:29 +03:00
color test(engine): move root tests into domains 2026-05-16 12:30:27 +03:00
editor fix(resize): scale group and boolean children 2026-06-06 17:05:09 +03:00
figma/api chore(lint): reject broad unknown type assertions 2026-05-25 00:26:02 +03:00
geometry fix(io): include text decoration export bounds 2026-05-27 00:53:47 +03:00
hit-test chore(tests): enforce non-null assertion rule 2026-05-06 11:44:18 +03:00
icons test(engine): move root tests into domains 2026-05-16 12:30:27 +03:00
io fix(kiwi): import Figma groups as groups 2026-06-06 13:49:19 +03:00
kiwi chore(lint): reject broad unknown type assertions 2026-05-25 00:26:02 +03:00
layout fix(layout): preserve imported instance child bounds 2026-06-03 15:47:17 +03:00
lint test(engine): move root tests into domains 2026-05-16 12:30:27 +03:00
mcp fix(mcp): harden tool responses 2026-05-31 18:14:10 +03:00
pen chore(tests): narrow no-empty-function exceptions 2026-05-06 12:32:54 +03:00
profiler chore: format codebase 2026-05-24 12:15:29 +03:00
random test(engine): move root tests into domains 2026-05-16 12:30:27 +03:00
render feat(design-jsx): support components and instances 2026-05-31 18:33:56 +03:00
scene-graph chore(lint): reject broad unknown type assertions 2026-05-25 00:26:02 +03:00
snap test(engine): move root tests into domains 2026-05-16 12:30:27 +03:00
tauri fix(fig): stabilize engine test suite 2026-05-21 14:54:17 +03:00
text fix(text): handle Hangul IME composition (#319) 2026-06-06 07:21:56 +03:00
tools chore(lint): reject broad unknown type assertions 2026-05-25 00:26:02 +03:00
vector chore: format codebase 2026-05-24 12:15:29 +03:00
vue chore: format codebase 2026-05-24 12:15:29 +03:00
perf.bench.ts chore: enable stricter oxlint rules 2026-05-18 18:58:30 +03:00