Commit Graph
855 Commits
Author SHA1 Message Date
pravdomilandClaude Opus 5.5 41071f0bbf Timeline: a one-line expression row is as tall as a normal row
Drop the 6 px added to expression editor rows (and the matching offset in
the drag-to-resize maths), so the row is a whole number of row heights.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 16:30:04 +02:00
pravdomilandClaude Opus 5.5 a96c85b0e5 Timeline: expression row takes its property row's background
Rows stripe by their index among the non-expression rows, so adding or
removing an expression leaves every other row's stripe unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 16:17:31 +02:00
Vikram Bhaskaran f5c6487cf1 Reveal enabled Time Remap on U even with no keys left (#990)
anim.reveal keyframes/animation only matched keyframed top-level properties,
so Time Remap vanished from U once its keys were deleted even though enabling
remapping is itself the modification (and freshly enabled remaps, which get
two keys, kept showing). Match the bare timeRemap prop for both kinds, as
modified already did.
2026-10-13 00:50:56 +11:00
pravdomilandClaude Opus 5.5 0c343212ae Timeline: a group twirled open by hand under a reveal shows all its properties
Collapsing and expanding an effect that shows only its revealed parameters
(U, UU) now lists every parameter. The next reveal on the layer filters it
again.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 15:48:13 +02:00
Vikram Bhaskaran 66a6b99d12 Share the Scale Constrain Proportions link between Properties and Timeline (#956)
The Properties panel kept its own ephemeral per-layer link toggle, so
unlinking Scale there left the Timeline linked and vice versa, and its edit
math differed from the Timeline's. Use the shared per-property unlinked set
and widgets::constrained, with the stable match id instead of the display
name, plus Alt-edits-one-axis like the Timeline.
2026-10-13 00:42:54 +11:00
Vikram Bhaskaran 341076359a Nudge selected layers with the arrow keys from any panel but Project (#961)
The viewer.nudge shortcuts bailed out unless Composition, Viewer or Timeline
had focus, so with any other panel focused the arrows silently did nothing.
After Effects nudges from almost anywhere; only the Project panel owns the
arrows for its own keyboard navigation. Typing, dialogs, menus and selected
mask vertices still keep the keys.

Tests: arrow nudge from Effect Controls, no nudge from Project, Shift+arrow
10x, time untouched, click-row path.
2026-10-13 00:39:37 +11:00
FeiLiuEM c99012a77a theme: the symbol test asks the definitions, not epaint's replacement-face check
`interface_symbols_have_a_glyph_in_every_family` (01400f0) is red on main: it asks
`Fonts::has_glyph` per symbol, which answers "does this family resolve `c` to a face other than the
family's replacement face" - and the replacement face is the first in the chain carrying epaint's
PRIMARY_REPLACEMENT_CHAR ('◻'). Inter has neither a replacement glyph nor triangles, so in the
`medium` and `semibold` families that face is the weight face itself: everything it owns (the whole
Latin set, `•`, `›`, `·`, `▶`, `◀`, `●`, `○`, `⚠`, `…`, `×`) came back as "no glyph" and only the
characters it leaves to JetBrains Mono (`▸`) answered true. Rendering is not affected - the atlas
resolves through the same chain and does find the weight face - so the assertion was wrong, not the
fonts: the bundled Inter faces carry ten of the eleven symbols and JetBrains Mono carries all eleven.

The test now asserts what the wiring promises, from the definitions that were installed: each family
draws with its own first face and its chain reaches the symbol fallback.

Verified on Linux (the test is red before and green after) with cargo fmt --all --check and
cargo test -p effectcraft-ui-egui --lib theme::tests.
2026-10-12 21:27:12 +08:00
ThemolxandClaude Opus 5.5 fcf56415dc Project panel: Replace with Precomposition (used N times)
Right-clicking a footage item or solid in the Project panel offers
"Replace with Precomposition (used N times)": the item goes into a new
composition of its size, pixel aspect and frame rate, in the same folder, and
every layer in every composition that used it switches to that composition,
keeping timing, transforms, effects and masks. One undo step. Agents run it as
`file.replaceWithPrecomp`.

The Project panel's details header also shows how often the selected item is
used ("Name ▾, used 3 times"); the ▾ lists and opens the comps that use it.
`Project::item_users` and the `project.usedIn` query back both.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 15:14:43 +02:00
pravdomilandClaude Opus 5.5 63cfcfbb90 Timeline: UU reveals an effect's changed parameters only
The modified reveal showed every effect in full. It now compares each effect
with a new instance and reveals the parameters whose value differs, plus the
groups a new instance lacks (puppet meshes and pins, paint strokes). An effect
whose plug-in is missing still shows in full.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 15:13:18 +02:00
pravdomilandClaude Opus 5.5 b0ea0e787b UI: confirm before deleting a user template or a shortcut preset
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 15:08:06 +02:00
pravdomilandClaude Opus 5.5 fbb74339da GPU Information: Enter presses OK
The message box's only button is OK, the default; Enter now dismisses it
(back to Settings when opened from there), as Escape already does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 15:07:05 +02:00
Marco Arnulfo 424dcab40b Shortcuts: Numpad * marks the selected layers (#976)
Numpad * always added a composition marker. As in After Effects, it now
adds a layer marker to the selected layers at the current time, and a
composition marker only when no layer is selected.
2026-10-12 14:43:18 +02:00
Marco Arnulfo 3174e68d0e Timeline: Markers ▸ Add Marker in the layer context menu (#976)
Right-clicking a layer offered no way to mark it. The layer context menu
now has After Effects' Markers submenu with Add Marker (layer.addMarker,
as Layer ▸ Markers ▸ Add Marker), which marks the right-clicked layer, or
the selection it belongs to, at the current time. The submenu title reuses
the menu catalogs' "Markers" translation in the panel catalogs.
2026-10-12 14:43:18 +02:00
ThemolxandClaude Opus 5.5 e9c8d703a7 Rotation tool: keep counting past a full turn, as in After Effects
The viewer's Rotation tool wrote start rotation + (atan2 angle now - atan2 angle at
press), so the value jumped a full revolution back whenever the pointer crossed
atan2's ±180° seam (left of the anchor) and could never pass 360°. Sum the
per-frame angle change, wrapped to (-180°, 180°], instead: the value keeps
growing across revolutions in both directions (1x +0.0°, -1x -90.0°…), Shift
snaps the accumulated value to 45°, other selected layers follow, and one drag
is still one undo step. Non-finite angles turn by nothing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 14:12:12 +02:00
Brandon ThomasandClaude Opus 5.5 bfea3d1253 i18n: Czech entries for the extrusion Front/Bevel/Side/Back Color submenus
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 05:30:10 -04:00
Diego Ospina ea5e629d1a i18n(es): Spanish panels, dialogs and tooltips
506 rows, the Chinese catalogs' source list, read by catalog("es");
a test pins it to that list and checks a few lookups.

Models: Opus 5.5, Sol 6.1, DeepSeek V4 Flash
2026-10-12 04:29:09 -05:00
Brandon Thomas af671f6997 Merge pull request #987 from Losminek/cs-ui
i18n: add Czech (cs) interface language

# Conflicts:
#	crates/engine/src/prefs.rs
#	crates/ui-egui/src/i18n.rs
#	crates/ui-egui/src/i18n/ui.rs
#	docs/localization-parity.md
2026-10-12 05:22:10 -04:00
Brandon Thomas 84c6281da9 Merge pull request #984 from MarekSpodBiedry/issue-957
Show the Continuously Rasterize switch on vector footage layers (#957)

# Conflicts:
#	crates/ui-egui/src/panels/timeline.rs
2026-10-12 05:21:57 -04:00
Brandon Thomas cb59a959f4 Merge pull request #983 from MarekSpodBiedry/issue-974
Scale the timeline waveform by the layer's Audio Levels (#974)
2026-10-12 05:21:55 -04:00
Brandon ThomasandClaude Opus 5.5 61aaf83612 Fix tests and two behaviours after the community batch
- Renderer: no cover step for adjustment layers (#686); their buffer is the comp below.
  Restores a single CPU step in split adjustment stacks.
- Effect Controls rename (#953): focus the name field the frame it exists. Focusing an id
  not yet drawn left AccessKit with a focus outside its tree (a panic in the consumer).
  The tests double-click at 60 fps, within egui's double-click time.
- i18n: Russian, French and German entries for Copy Frame to Clipboard and the extrusion
  Front/Bevel/Side/Back Color submenus added by today's other PRs.
- Tests: "fr" is now a valid language; the marker dialog's comment is focused on open
  (#922), so Enter-is-OK is tested with the focus elsewhere; the toolbar gradient tests
  give the selected layer its paint kind, since the toolbar mirrors it (#732).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 05:08:58 -04:00
Brandon ThomasandClaude Opus 5.5 d1e6aa2e85 clippy: needless borrows at the context_menu calls
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 04:28:59 -04:00
Brandon ThomasandClaude Opus 5.5 6baff9f5fe Integration fixes for the community batch
- Footage sources: the cancellable wrapper (#784) forwards frame_with (#752 float curves)
  and problem (#887); problem's default lives on the trait.
- Media: a called-off decode (#784) is not a footage problem (#887).
- Effect Controls rename (#953): Escape cancels (egui drops focus on Escape the same
  frame), the Rename item is translated; regression test.
- i18n (#873): drop the /out-i18n/ ignore rule and the note about an uncommitted script.
- Tests: text range selector caps (#926) re-borrow the layer; the RAM preview test (#793)
  sets the comp's own Resolution (#462).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 04:27:59 -04:00
Brandon Thomas ac37493026 Merge pull request #873 from pechnikov2026-star/i18n-ru-fr-de
i18n: add Russian, French and German menu catalogs
2026-10-12 04:24:29 -04:00
Brandon Thomas 5f386cc97c Merge #938 from nanox333/codex/fix-712-character-eyedropper (without the demo screenshot)
Add Character Fill and Stroke eyedroppers
2026-10-12 04:24:28 -04:00
Brandon ThomasandClaude Opus 5.5 37c4e98502 Character eyedroppers: the sampling hints go through the catalog
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 04:23:58 -04:00
Brandon Thomas f28901c6e3 Merge pull request #953 from Ni-zav/fix/944-rename-expression-control-s20261012T0915JKT
Fix: rename expression control
2026-10-12 04:23:20 -04:00
Brandon Thomas 50a89c48e9 Merge pull request #130 from storytold/fix/synthetic-modifiers
Control: ui.click / ui.drag hold their modifiers for the whole gesture

# Conflicts:
#	crates/ui-egui/src/lib.rs
2026-10-12 04:23:11 -04:00
Brandon Thomas 2ea7220e49 Merge pull request #916 from pravdomil/claude/composition-maximize-zoom-fit-86627e
Viewer: Fit up to 100% follows the panel size

# Conflicts:
#	crates/ui-egui/src/panels/viewer_tools.rs
#	crates/ui-egui/tests/ui_viewer.rs
2026-10-12 04:22:53 -04:00
Brandon Thomas 617412b555 Merge pull request #888 from vangel76/fix-882-viewer-pixel-exact
#882: pixel-exact Composition viewer at 100 % and above

# Conflicts:
#	crates/ui-egui/src/menus.rs
2026-10-12 04:22:01 -04:00
Brandon ThomasandClaude Opus 5.5 6dae51622f Dialogs: vertical-only modals (#937) on the modal_fit layout
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 04:21:37 -04:00
Brandon Thomas b2d05582e0 Merge pull request #462 from storytold/fix/417-viewer-resolution
Viewer: each composition keeps its Resolution in the project, as in After Effects (#417)

# Conflicts:
#	crates/ui-egui/src/control.rs
#	crates/ui-egui/src/menus.rs
#	crates/ui-egui/src/panels/viewer_tools.rs
2026-10-12 04:21:14 -04:00
Brandon Thomas bb7f9b421f Merge pull request #980 from nanox333/codex/fix-978-project-settings-dialog
Fix #978: widen Project Settings dialog

# Conflicts:
#	crates/ui-egui/src/panels/forms.rs
2026-10-12 04:21:13 -04:00
Brandon Thomas fe439f6e9c Merge pull request #979 from nanox333/codex/fix-958-vector-context-menu
Fix #958: add vector conversion to layer context menus

# Conflicts:
#	crates/ui-egui/src/panels/timeline.rs
2026-10-12 04:21:11 -04:00
Brandon Thomas 8e6c3e0e68 Merge pull request #950 from Themolx/trim-selected-layers
Timeline: trim all selected layers together

# Conflicts:
#	crates/engine/src/tests_timeline.rs
2026-10-12 04:21:07 -04:00
Brandon Thomas bfb282d47c Merge pull request #937 from nanox333/codex/fix-828-gpu-info-dialog
Keep GPU Information dialog layout steady

# Conflicts:
#	crates/ui-egui/src/panels/dialogs.rs
#	crates/ui-egui/tests/ui_settings_info.rs
2026-10-12 04:21:06 -04:00
Brandon Thomas af374a924d Merge pull request #936 from nanox333/codex/fix-902-essential-graphics-context
Open Essential Graphics from blank Timeline context menu
2026-10-12 04:21:05 -04:00
Brandon Thomas 777b59a391 Merge pull request #935 from aniliashenko/comp-presets
Composition Settings: save and delete your own presets

# Conflicts:
#	crates/engine/src/commands/comp_more.rs
2026-10-12 04:21:04 -04:00
Brandon Thomas fbcb5b44b0 Merge pull request #934 from nanox333/codex/fix-910-fullscreen-shortcut
Fix full-screen shortcut shown on Windows
2026-10-12 04:21:03 -04:00
Brandon Thomas 0d6adb07bf Merge pull request #930 from aniliashenko/text-edit-from-timeline
#637: double-clicking a layer's bar acts like its name; text layers edit their text

# Conflicts:
#	crates/ui-egui/tests/ui_text_edit.rs
2026-10-12 04:21:02 -04:00
Brandon Thomas ce3e8f1a99 Merge pull request #924 from MarekSpodBiedry/issue-912
Resume an open mask path when the Pen clicks its last vertex (#912)
2026-10-12 04:20:57 -04:00
Brandon Thomas cc45d65204 Merge pull request #922 from pravdomil/claude/dialog-focus-on-open
UI: dialogs open with their first text field focused and selected
2026-10-12 04:20:55 -04:00
Brandon Thomas e2db76e507 Merge pull request #921 from pravdomil/claude/alt-click-layer-toggles-b7a7a3
Timeline: Alt-click an A/V feature switches the other layers
2026-10-12 04:20:54 -04:00
Brandon Thomas 3e34dcb0d6 Merge pull request #919 from pravdomil/claude/unsaved-changes-cmd-backspace-b69a74
UI: keyboard shortcuts for dialog answers
2026-10-12 04:20:53 -04:00
Brandon Thomas 54d68a90a6 Merge pull request #913 from pravdomil/claude/selection-tool-glyph-fix-69364a
UI: draw concave icons as convex pieces (fixes Selection arrow, Speaker, Sparkle glyphs)
2026-10-12 04:20:52 -04:00
Brandon Thomas e0b770a9ea Merge pull request #907 from tylerjenningsw/enhance/toolbar-gradient-swatch
Shapes: the toolbar's gradient swatches open the Gradient Editor (#612)

# Conflicts:
#	docs/gaps.md
2026-10-12 04:20:51 -04:00
Brandon Thomas 2a7170de87 Merge pull request #899 from vangel76/fix-670-per-pane-views
#670: each pane of a 2- or 4-view layout chooses its own view
2026-10-12 04:20:48 -04:00
Brandon Thomas 0ad9b5fc9b Merge pull request #893 from vangel76/fix-878-context-menu-selection
#878: context menus act on the whole selection

# Conflicts:
#	crates/ui-egui/src/panels/timeline.rs
2026-10-12 04:20:46 -04:00
Brandon Thomas 7a03b6fcd1 Merge pull request #892 from tylerjenningsw/fix/text-click-away
Text: stop capturing keyboard input after clicking away (#831)
2026-10-12 04:20:45 -04:00
Brandon Thomas ab12890a9e Merge pull request #887 from vangel76/fix-886-unsupported-video-notice
#886: say why footage the decoders can't read shows no picture

# Conflicts:
#	crates/media/src/pool.rs
#	crates/media/tests/footage.rs
#	crates/render/src/lib.rs
2026-10-12 04:20:43 -04:00
Brandon Thomas ccd7a7c583 Merge pull request #884 from vangel76/fix-881-project-rename-tab
#881: Tab in the Project panel's rename field commits and keeps the keyboard
2026-10-12 04:20:42 -04:00