Commit Graph
708 Commits
Author SHA1 Message Date
Brandon Thomas 4f57d5d73d Merge pull request #1144 from tylerjenningsw/enhance/quick-offset
# Conflicts:
#	crates/ui-egui/src/i18n/ui.rs
2026-10-13 04:28:43 -04:00
Brandon Thomas ce67e02d88 Merge pull request #1115 from pravdomil/claude/preview-panel-undocking-67b075 2026-10-13 04:28:37 -04:00
Brandon Thomas d5496e50bc Merge pull request #1034 from pravdomil/claude/timeline-expression-background-c71985 2026-10-13 04:28:35 -04:00
Brandon Thomas 84f7f80617 Merge pull request #1041 from pravdomil/claude/timeline-expression-row-height-b96069 2026-10-13 04:28:34 -04:00
Brandon Thomas 84ef901714 Merge pull request #1143 from marcoarnulfo/fix/ui-simplified-chinese-font 2026-10-13 04:28:32 -04:00
Brandon Thomas 7da7358504 Merge pull request #1102 from vangel76/feat-gap7-presets-backgrounds
# Conflicts:
#	crates/ui-egui/tests/ui_panels.rs
#	docs/gaps.md
#	docs/target-app-parity.md
2026-10-13 04:28:30 -04:00
Brandon Thomas cbe710220a Merge pull request #1066 from zitann2020/i18n/ja-panels 2026-10-13 04:28:26 -04:00
Brandon Thomas 0e424b45f1 Merge pull request #1050 from pravdomil/claude/bind-existing-shortcuts 2026-10-13 04:28:25 -04:00
Brandon Thomas 61a6d95e51 Merge pull request #1030 from vbasky/fix/990-u-reveal-timeremap 2026-10-13 04:28:24 -04:00
Brandon Thomas c3644e59d4 Merge pull request #1019 from pravdomil/claude/confirm-unguarded-deletes
# Conflicts:
#	crates/ui-egui/src/panels/shortcut_editor.rs
2026-10-13 04:28:24 -04:00
Brandon Thomas 7293148c3c Merge pull request #1189 from marcoarnulfo/fix/settings-zh-hans 2026-10-13 04:27:33 -04:00
Brandon Thomas 7955ae81ce Merge pull request #1168 from nanox333/fix/marker-frame-identity 2026-10-13 04:27:33 -04:00
Brandon Thomas d9f300f940 Merge pull request #1152 from elZanco/layer-menu-effects-submenu 2026-10-13 04:27:31 -04:00
Brandon Thomas 1b3c88dcc5 Merge pull request #1113 from pravdomil/claude/keyboard-shortcuts-overflow-e1e74e 2026-10-13 04:27:29 -04:00
Brandon Thomas 396231a9f8 Merge pull request #1101 from pravdomil/claude/form-dialog-fit 2026-10-13 04:27:28 -04:00
Brandon Thomas 7f584f9ba8 Merge pull request #1065 from marcoarnulfo/fix/project-panel-comp-settings 2026-10-13 04:27:26 -04:00
Brandon Thomas c069a72928 Merge pull request #1029 from vbasky/fix/956-scale-unlink 2026-10-13 04:27:24 -04:00
Marco Arnulfo 26b2451836 i18n: the Settings pages reach the Chinese catalogs (fixes #1178) 2026-10-13 04:41:07 +02:00
Marco Arnulfo 3aaefab270 UI: the interface symbols test checks the drawn glyph, not has_glyph
epaint's has_glyph compares face keys, so a glyph drawn by the replacement
face reads as missing. With no face in the stack covering egui's `◻`, Inter's
`?` becomes the replacement and Inter's `•` fails the check, which happens
once another test (the #1141 one) has loaded a system face without `◻`: the
fallback tries loaded faces first. Compare the drawn glyph with the
replacement glyph instead, as assert_drawn already does.
2026-10-13 04:17:16 +02:00
Kristian MyramandClaude Haiku 5.5 863a6aff6c #1167: frames: keep the viewer frames when only plain markers change
Adding a marker replaced the comp, so every cached frame stopped matching and the preview had to
re-render before its audio could carry on. Plain markers change no pixels; protected time markers
with a duration still do (Responsive Design). Markers count in full again when a project uses
expressions, which can read them.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-13 02:20:31 +02:00
Kristian MyramandClaude Haiku 5.5 9e8112499c #1167: test: a marker edit keeps the viewer frames (fails on main; reproduces the audio pause)
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-13 02:20:31 +02:00
tylerjenningsw bfb7507565 Timeline: a Quick Offset of layer bars ends on release off screen (#1012)
The layer bar Quick Offset was followed and ended in its row's code, and
rows out of view aren't drawn. Released with its row scrolled away, it
stayed active: the next drag of that bar, even a plain one, ran as a
Quick Offset from the old origin, into the old undo step.

Like the key drag, it now follows the pointer below the rows and ends
when the button is released, wherever the bar's row is.

Test: a_quick_offset_released_off_screen_ends (release with the row
scrolled away; a plain drag after it moves both layers together as its
own undo step; fails before).
2026-10-12 18:49:51 -04:00
tylerjenningsw e2d50ec926 Timeline: Shift ranges and key boxes stagger in comp order (#1012)
In After Effects a marquee selection staggers in the comp's layer order,
not in the direction the box was drawn. A Shift-click range of layer
bars and a box of keys already come out top layer first; this test makes
both with the pointer (the range from the bottom layer up, the box from
the bottom right to the top left) and checks the Quick Offset that
follows: the top layer stays and the bottom one moves the whole delta.
2026-10-12 17:45:30 -04:00
Marco Arnulfo d85601f8eb UI: a Simplified Chinese interface picks a face with the simplified hanzi (fixes #1141)
The Chinese UI fallback was chosen by probing 文, which Japanese faces
cover too. Fallback takes a face already loaded first, so after the
English interface had loaded a Japanese face for kana, switching to
Simplified Chinese reused it, and the simplified-only hanzi (选, 删,
层, 设, 页 ...) drew as boxes. A Simplified Chinese interface now probes
页, as wordcraft does for its interface font (storytold/wordcraft#248).
2026-10-12 23:38:13 +02:00
tylerjenningsw 94b4d0ca34 Timeline: Quick Offset layers and keyframes in selection order (#1012)
Ctrl/Cmd+Alt dragging a selected layer bar or a selected key now runs a
Quick Offset (layer.quickOffset / keys.quickOffset with fromStart, one
undo step). The mode is chosen when the drag starts and needs at least
two unlocked layers; the last selected layer moves by whole frames with
the pointer. A readout by the pointer shows the Total Offset and the
offset Per Layer, translated.

A plain drag still moves the selection together, Alt alone still scales
a key group in time (it now leaves Ctrl/Cmd+Alt to Quick Offset), and
Ctrl/Cmd+Alt+click still toggles Hold. The key drag's readout is drawn
by a shared drag_tip. Keys also register timeline.keyAt.<uid>.<ticks>,
exact where keys on subframes can share a frame.

Tests (ui_quick_offset): staggering layer bars in selection order and
keys per layer, one undo each; plain drags and Alt scaling unchanged; the
readout while dragging.
2026-10-12 17:37:34 -04:00
Egon 5000 4101cef8b4 UI: add an Effects submenu to the layer context menu
The layer context menu gains an Effects submenu between Blending Mode and Arrange, mirroring the After Effects layer menu: the effect registry grouped by category (sorted), synced with the Effect menu; picking one applies it to the selected layers.
2026-10-12 23:03:39 +02:00
pravdomilandClaude Opus 5.5 5789c1c7d8 Scroll bars: a handle you can see [skip ci]
The handle was filled with the colour of its own track (both the field
background), so it only showed while hovered or dragged. It now takes the text
colour, in every scroll area.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 21:49:05 +02:00
pravdomilandClaude Opus 5.5 00afd27dca Keyboard Shortcuts: Enter is OK [skip ci]
Enter closes the editor like its OK button, also while the search field has
focus. It stays with the shortcut recorder (Enter can be recorded), the preset
rename field and an open preset menu.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 21:42:40 +02:00
pravdomilandClaude Opus 5.5 e91b19f2a5 Floating panels: no widget ID clash when dragged past the window edge [skip ci]
The floating group's title strip used the same id as its Area's own
background widget, and the Area was shifted back into the window while
the group's rect kept moving, so the two no longer overlapped and egui
painted "Double use of widget ID" over the panel. The strip has its own
id and the group is drawn where its rect says.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 21:39:27 +02:00
pravdomilandClaude Opus 5.5 07fe9cb1dc Keyboard Shortcuts: keep the OK button in view [skip ci]
The editor's content was a little taller than its dialog, so the outer scroll
area clipped the OK button and its scrollbar covered the right edge. The dialog
now has no outer scroll area: the command list takes whatever height is left,
so the button row always fits, in small windows too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 21:34:56 +02:00
vangel76andClaude Sonnet 5.5 51371939ad Gap 7: Backgrounds animation presets (#1096)
Problem: the built-in animation preset library had no Backgrounds category
(gap 7: 31 presets against After Effects' 621).

Fix: 23 original Backgrounds presets in crates/engine/presets/backgrounds.json,
built from our own generator, noise, colour and stylize effects: Soft Gradient
Drift, Aurora Veil, Slow Fog, Cloud Bank, Dark Smoke, Ember Haze, Magma Flow,
Ice Flow, Pastel Plasma, Cell Drift, Crystal Facets, Hex Mosaic, Mirrored Silk,
Water Caustics, Blueprint Grid, Checker Scroll, Scrolling Stripes, Pulse Rings,
Bokeh Drift, Spotlight Floor, Dawn Sky, Sweeping Light, Grainy Wash.

The preset format gains `expr` (an expression per property, so backgrounds keep
moving for the whole layer) and point parameters written as fractions of the
layer size. Effects & Presets lists them under * Animation Presets > Backgrounds.
Tests: catalogue uniqueness and categories, apply/undo/redo of every preset
(engine), render of every preset with the expression engine: finite,
non-flat, deterministic, moving (host), panel listing and apply (ui-egui).
Sidecar, ATTRIBUTION.md, gaps.md row 7 and effects-parity.md updated.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 21:13:05 +02:00
pravdomilandClaude Opus 5.5 97514ef198 Fix #978: keep form choices and buttons inside the dialog
Undoes the 800 px Project Settings width from #980: the form is back at the
shared 480 px.

A form's choice popup keeps its 240 px column and ends a long choice (a GPU
adapter's name) in an ellipsis instead of widening the grid past the dialog.
Only the fields scroll, and only vertically; OK and Cancel sit under the
scroll area, so they stay in view.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 21:11:01 +02:00
zitann2020 9375cc3406 i18n(ja): finish the Japanese panel, dialog and tooltip catalog
The menus have been complete in Japanese since the menu catalog landed, but the panel
catalog below the menu bar stopped at 410 of the 506 source strings the Chinese catalogs
define. Settings, the Home screen, the viewer tools and the Fast Previews and channel
popups therefore still drew in English for a Japanese interface.

This adds the 96 missing rows. Existing rows are untouched and keep their order; the new
ones follow the canonical (Simplified Chinese) order, which the catalog tests require, and
no row changes the number of `{}` values its English source carries.

Terms follow the Japanese already in the catalog and, wherever a control exists in both,
the wording After Effects 2026 (26.5) itself shows in Japanese: 平面 (Solid), 関心領域
(Region of Interest), フル画質 / 1/2 画質 / 1/3 画質 / 1/4 画質 (viewer resolution),
ドラフト 3D (Fast Previews), 透明グリッド (Transparency Grid), マスクとシェイプのパスを表示
(Toggle Mask and Shape Path Visibility), チャンネルとカラーマネジメント設定を表示 (Show
Channel and Color Management Settings).

The crate's `i18n` unit tests pass (10/10) and rustfmt is clean.
2026-10-13 02:13:51 +09:00
Marco Arnulfo 7304f4c672 Project panel: Composition Settings… in a comp's right-click menu (fixes #1058)
First in the menu, as in After Effects, and for the right-clicked comp rather than the one in the viewer: the dialog keeps the comp it edits and OK passes it to comp.settings. comp.settings with only {"comp": id} opens the dialog on that comp.
2026-10-12 18:54:56 +02:00
pravdomilandClaude Opus 5.5 eec84a8095 Second default keys, also in menu lines
F2 Deselect All, Cmd+Shift+T Effect Controls, Cmd+Alt+Left / Right Go to Start /
End, Cmd+Shift+/ Add to Render Queue.

Effect Controls is a menu entry with bound parameters, which could hold one key:
a menu line can now give further default keys after a comma
(F3, Cmd+Shift+T); the menus show the first. MenuEntry gains alt_shortcuts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 17:37:18 +02:00
pravdomilandClaude Opus 5.5 6f5bd0c272 Default keys for ten commands that had none
Title/Action Safe ('), Zoom to Fit Comp (Shift+;), Custom resolution
(Cmd+Alt+J), Purge Snapshot (Cmd+Shift+F5), Bilinear / Bicubic sampling (Alt+B,
Alt+Shift+B), Set Proxy (Cmd+Alt+P), most recent project (Cmd+Alt+Shift+P), last
animation preset (Cmd+Alt+Shift+F) and Paste Reversed Keyframes (Cmd+Shift+V).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 17:35:27 +02:00
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
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
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
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
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