normalize() canonicalizes whatever part of a path exists, which on Windows adds
the verbatim prefix to some paths and not others, so a file under a folder
that isn't on disk failed the project-folder check against an existing
project folder. The check failed closed (access refused); it now drops the
prefix from canonical drive paths so both sides compare.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Clamping each side on its own broke the aspect ratio (a 30000x15000 comp
at 4x came out 30000x30000). The effective scale min(s, MAX_SIZE/w,
MAX_SIZE/h) keeps both sides within the comp limit, and the export
pipeline and the locked-aspect width derivation render at that same
scale, so nothing requests a frame larger than output_size reports.
A 30 000 px comp (the repaired MAX_SIZE on load) at resolution 4.0
produced 120 000 px sides, which overflow u32 in the exporters'
w * h * 4 (debug panic, release wrap then slice panic) after already
requesting a ~57 GB frame. The resize path in the same file clamps to
30 000; output_size now does too.
Regression test: output_size_never_exceeds_the_comp_limit — on main it
returns (120000, 120000); with the clamp (30000, 30000), through both
RenderSettings and the OutputModule wrapper.
Resting the pointer in an 18 pt band at a menu's bottom edge crawls the list after a short delay and speeds up the longer it stays there, so long menus stay reachable without letting go of the press-and-hold gesture. Context menus do not crawl.
A title opens on the press and the menus follow the cursor while the button is held: hovering a category opens its submenu and releasing over an entry picks it. An outside press or a focus loss closes the open menu again.
The 180 px font menu pinned Rescan Fonts over "Variable fonts only", and the click walked every fontconfig directory on the frame thread. The button is now its own row, and the scan runs on a background thread that the frame polls. The Linux face-count assert is left to the native-fonts gate.
Fonts installed after EffectCraft launched (dnf, GNOME Font Viewer, a
drop into ~/.local/share/fonts) stayed invisible until restart: only the
startup background scan ran, and the report in #1089 could not tell
discovery gaps apart from a stale scan.
- The font menu's filter row gains a Rescan Fonts button (Character and
Properties panels share the popup) that runs the existing
text.fonts {rescan} command and reports the number added in the status
line. The press doesn't flip the Variable-fonts filter (the button is
above the row's click area and closes the popup on top of it).
- system_scan_finds_fonts now asserts, on a native fontconfig desktop
(any machine with /etc/fonts, which includes the Fedora reporter's and
the CI runner), that the scan lists installed families rather than
silently returning only the bundled fonts: 870 faces in ~10 ms on an
Arch box.
Tests: ui_font_search 4 passed (new rescan test drives the real popup);
effectcraft-text lib system scan green; fmt and clippy --all-targets -D
warnings clean. Translations for 'Rescan Fonts' in all six catalogs.
The RAM preview keyed every frame by one identity of the whole comp, so any
edit (a cut, a trim, a nudge) made every cached frame a miss and the whole
comp recached. When only some of a comp's layers change, frames outside their
In-Out span now move to the new identity. Settings changes, reorders,
expressions, and edits that reach other layers (parents, track mattes, effect
layer pickers) still recache everything.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>