Commit Graph
15 Commits
Author SHA1 Message Date
FredApps 38cd374bae Merge pull request #3236 from vangel76/number-field-math-3195
Number fields: typed arithmetic (960/2, (3+4)*2) and a leading *, / or + applied to the value
2026-11-14 17:29:47 +01:00
Dylan M. Taylor 4d6036265b Convert Expression to Keyframes: refuse layers of more than 2^18 frames
* fix(engine): refuse to convert an expression on a layer of more than 2^18 frames

* address review: refuse a non-positive frame duration; count a partial last frame; check every selected layer before converting

* Convert Expression to Keyframes: cap at 2^20 frames (a 3-hour 60 fps comp is 648,000)
2026-11-12 06:29:38 -05:00
arnav-hiwarkarandClaude Opus 5.5 5922dabd3a Time entry: a negative displayed timecode goes to the frame it shows (#3373)
In a comp whose Start Timecode is negative, the current-time display shows
the first frames as `-0:00:00:12`, but typing that back (the Go to Time
dialog opens with it since #3419, and the Timeline's time field takes it)
read the leading `-` as "move back", so OK on an unedited dialog jumped to
another frame. There, a `-` before a full timecode is now the time's sign,
as it already is before Feet + Frames; a bare `-n` still steps back, and
comps that start at 0 or later are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 16:19:46 +05:30
vangel76 78acc6e1b1 Number fields: a typed +n adds n to each selected layer, even where the edited one is clamped (#3195)
A typed +10 on several selected layers went through the same-change
offset path, so when the edited layer's range cut its change short
(Opacity 95 + 10 stops at 100) the others moved by 5. Send the typed
operand as prop.set addend: each other layer takes its own value plus
it, within its own range; scrubs keep the offset path.
2026-11-07 17:41:58 +01:00
vangel76 b2d6690fd2 Number fields: Mask Feather stays non-negative on the other selected layers (#3195)
A typed *-1 (the edited layer clamped at 0 by the panel) or a change
by the same amount could take another selected layer's Mask Feather
below 0. Clamp it at 0 there, as the panels do for the edited layer.
2026-11-07 16:27:36 +01:00
vangel76 0cb5bfefb5 Number fields: typed arithmetic (960/2, (3+4)*2) and a leading *, / or + applied to the value (#3195)
Number fields read + - * /, brackets and signs through a small bounded
parser (crates/ui-egui/src/num_math.rs): no code is run, length and
nesting are capped, every step must stay finite and a division by zero
keeps the old value with no undo step.

Hot-text values (Timeline, Effect Controls, Properties and the other
panels) also take a leading *, / or + applied to the value shown, as
the reporter describes for After Effects (not confirmed in public
docs). A leading - stays a negative number. Hot text used to read +50
as 50; it now adds 50. On an angle the step goes from the signed
remainder (+10 on 0x-30 is 0x-20). With several layers selected each
layer takes the step from its own value: + through the offset path, *
and / through a new prop.set factor. Typed results in whole-number hot
text round instead of truncating.

Dialog fields (the shared drag_value wrapper, Essential Graphics,
Gradient Editor, colour picker) re-read their text per keystroke, so
they take absolute arithmetic only.

Fixes #3195
2026-11-07 15:06:13 +01:00
bflatastic 8af1df7093 Merge remote-tracking branch 'origin/main' into HEAD 2026-10-30 11:05:29 +07:00
bflatasticandClaude Opus 5.5 666d929b51 Merge main into #1342; carry main's Mute/Unmute Keyframes (keys.setMuted) into the shared key_menu, gated off on locked layers like the other edits (test covers it), delete_keys keeps locked keys selected and runs main's polystar sync, keep both sides' timeline tests
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 10:27:51 +07:00
tylerjenningsw 0138e0ec8a Merge main into enhance/audio-levels-link
# Conflicts:
#	crates/ui-egui/src/panels/timeline.rs
#	crates/ui-egui/src/state.rs
2026-10-29 22:09:27 -04:00
Kristian Myram 37e0c5dff6 #1284: reject Graph Editor ease edits on locked layers 2026-10-29 19:38:48 +01:00
Claude 152ce37f8d Merge main into fix/1284-testing-feedback
The shape-tool double-click, Cmd+W handling and their tests move to the split header, menus/invoke
and engine test modules (#2491); the docking check in the Cmd+W test uses the craft_ui dock API.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RDvxCS8xcR28VArjzn1x7U
2026-10-29 09:54:37 +00:00
tylerjenningsw b9808d5a24 Engine: a typed prop.set measures each layer's follow change where it keys (#2485) 2026-10-28 20:28:10 -04:00
tylerjenningsw a90b58a885 Engine: a typed prop.set can move follow components by each layer's own change (#2485) 2026-10-28 19:54:09 -04:00
tylerjenningsw ef825f2947 Merge remote-tracking branch 'origin/main' into enhance/pickwhip-index-refs 2026-10-27 14:13:51 -04:00
aiongg 35e66b17a6 refactor(engine): move tests_<topic>.rs files to src/tests/, tests.rs content to tests/session.rs 2026-10-26 21:49:11 +00:00