Commit Graph
716 Commits
Author SHA1 Message Date
Brandon Thomas 9f985ff374 Merge pull request #1046 from vbasky/fix/872-shapes-from-text
# Conflicts:
#	crates/ui-egui/tests/ui_workflow_selection.rs
2026-10-13 04:29:12 -04:00
Brandon Thomas 197ca451c0 Merge pull request #1028 from vbasky/fix/961-arrow-nudge 2026-10-13 04:29:11 -04:00
Brandon Thomas c4a162b2dc Merge pull request #1017 from marcoarnulfo/feat/layer-context-add-marker
# Conflicts:
#	crates/ui-egui/tests/ui_blank_context_menus.rs
2026-10-13 04:29:11 -04:00
Brandon Thomas a985dfb36b Merge pull request #1098 from vangel76/feat-gap21-percent-guides-effect-labels
# Conflicts:
#	crates/engine/src/tests_menu_cmds.rs
#	docs/effects-parity.md
#	docs/gaps.md
#	docs/ui-parity.md
2026-10-13 04:29:06 -04:00
Brandon Thomas a43cf2002a Merge pull request #1075 from vangel76/fix-1061-rename 2026-10-13 04:29:04 -04:00
Brandon Thomas 767f1f6265 Merge pull request #1057 from pravdomil/claude/shortcut-toggles 2026-10-13 04:29:03 -04:00
Brandon Thomas e248c172e8 Merge pull request #1044 from pravdomil/claude/timeline-chevron-expand-tree-93231f 2026-10-13 04:29:02 -04:00
Brandon Thomas 37b681ac12 Merge pull request #1104 from eliasx45/upstream/import-project 2026-10-13 04:28:59 -04:00
Brandon Thomas f46c825225 Merge pull request #1173 from tylerjenningsw/fix/layer-style-buttons 2026-10-13 04:28:55 -04:00
Brandon Thomas 1ca068c5b1 Merge pull request #1097 from pravdomil/claude/bookmark-dialog-cmd-enter-822730 2026-10-13 04:28:52 -04:00
Brandon Thomas 3e6d07af0e Merge pull request #1088 from vangel76/fix-1042-vertex-over-bounds
# Conflicts:
#	crates/ui-egui/src/panels/viewer.rs
2026-10-13 04:28:52 -04:00
Brandon Thomas dc3131b339 Merge pull request #1054 from pravdomil/claude/shortcuts-keyboard-commands
# Conflicts:
#	crates/engine/src/commands/time.rs
#	crates/ui-egui/src/menus.rs
2026-10-13 04:28:51 -04:00
Brandon Thomas 155368e613 Merge pull request #1014 from Themolx/rotate-tool-revolutions 2026-10-13 04:28:48 -04:00
Brandon Thomas bb0273dd91 Merge pull request #1182 from marcoarnulfo/fix/speed-graph-handle-upward 2026-10-13 04:28:47 -04:00
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 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
tylerjenningsw de0f573620 Layer Styles: the controls scroll both ways above the buttons (#1062)
Keeping OK and Cancel in view took away the outer scroll area that also
scrolled the dialog sideways, and the controls only scrolled up and
down. In a narrow window (960x600 at 200 % UI Scale leaves the controls
about 190 points next to the 200-point list) they ran past the dialog's
right edge with no way to reach them.

The controls now scroll both ways in the room left under their heading,
with no minimum scrolled size, so a small budget can't hide the end of
them; the list scrolls in its height the same way. Each control also
registers dialog.layerStyle.value.<style>/<path> next to its label's id.

Tests:
- layer_style_controls_stay_reachable_in_a_small_window: in a 960x600
  window at 200 %, and opened large then narrowed, Noise is scrolled to,
  painted whole and dragged; fails before (it lies past the window).
- layer_style_buttons_stay_in_view now checks both buttons at 100 % and
  200 %, each case in a fresh app with a real edit: OK keeps it, Cancel
  puts the project and its undo history back as before the dialog.
2026-10-12 22:42:53 -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
Marco Arnulfo 3db5aebb33 Graph editor: speed graph handles keep dragging once their key leaves the plot (fixes #1171) 2026-10-13 03:47:24 +02:00
tylerjenningsw bf911d18bc Layer Styles: OK and Cancel stay in view (#1062)
The Layer Style dialog's OK and Cancel came after the style list and
the style's controls in one scroll area, and at its usual size they
were laid out past the dialog's bottom edge: clipped, and a click on
them did nothing until the dialog was scrolled.

The dialog now uses above_footer: OK and Cancel sit at its bottom right
and the list and the controls scroll above them, also at 200 % UI
Scale.

Test: layer_style_buttons_stay_in_view (both buttons painted whole and
clicked, at 100 % and 200 %; fails before: Cancel isn't painted).
2026-10-12 21:24:43 -04:00
tylerjenningsw bcfb25ca93 Dialogs: share the buttons-first layout Settings uses
Settings keeps its buttons in view by laying them out first, at the
bottom of its body, and giving its pages the height left above them,
clipped to it. That layout is now dialogs::above_footer, so other
dialogs can keep their buttons in view the same way. Settings looks and
works as before.
2026-10-12 21:24:41 -04: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
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
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
pravdomilandClaude Opus 5.5 af28bc4ddb Shortcuts: C cycles the camera tools
tool.camera cycles Orbit, Pan and Dolly.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 21:09:49 +02:00
pravdomilandClaude Opus 5.5 81521d9b06 Shortcuts: switch, cycle and close panels
window.toggleCompTimeline (\) switches between the Composition viewer
and the Timeline. window.previousPanel / nextPanel (Alt+Shift+, / .)
step through the tabs of the focused panel's frame. window.closeAll
(Cmd+Shift+W) closes every open composition when a viewer or the
Timeline is active, otherwise the focused panel.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 21:08:43 +02:00
vangel76andClaude Sonnet 5.5 f11792827e Gap 21: percentage guides and effect colour labels (#1095)
Guides can store a percent of the comp so they follow comp-size changes
(View > Add Percentage Guide, Convert Guides to Percentage / Pixels); an
effect instance has an optional colour label (effect.setLabel, Effect Controls
header bar and Label menu). Both are serde-defaulted, so old projects load.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 21:07:36 +02:00