Commit Graph
537 Commits
Author SHA1 Message Date
tylerjenningsw a2f3ac41b1 Merge main into enhance/avi-import 2026-10-25 14:26:28 -04:00
skylar taylor-barrick 18206c1014 Fix text ownership after composition removal and simplify playback helpers 2026-10-25 11:40:05 +01:00
skylartaylor 9ee853715d M0.37: migrate EffectCraft to egui 0.37
Reconcile main 991904888a and preserve the reviewed lifecycle, IME, rendering and lockfile changes.

Formatting, strict lint, layers, assets and WASM passed. Full CI retained 3,961 passes, 14 baseline-matching GPU failures and 31 ignored executions. The local review commit has explicit approval to retain these documented failures; native/browser acceptance and paired app performance remain open.
2026-10-25 02:01:16 +01:00
aiongg 2281e3ffec Merge #1761: Timeline: a shape group's inner Contents draws no row, as After Effects elides it (@elZanco)
# Conflicts:
#	docs/ui-parity.md
2026-10-24 02:12:25 +00:00
aiongg cf54196ad9 Merge #2171: Settings: fit translated page names in the sidebar (#2034) (@Maokus) 2026-10-24 02:11:49 +00:00
aiongg 39526acc86 Merge #1327: Timeline: focus newly added expressions after Alt-click (refs #1072) (@tylerjenningsw) 2026-10-24 02:10:16 +00:00
aiongg 0db7ddb089 Merge #2228: End an open text edit when Deselect All runs (#2096) (@ChristopherLinnett) 2026-10-24 02:10:16 +00:00
aiongg 1d61fc6979 Merge #1933: Viewer: keep hidden AV layers' controls visible (#1769) (@ki2pixel)
# Conflicts:
#	docs/ui-parity.md
2026-10-24 02:10:16 +00:00
aiongg c00170bcc6 Merge #1867: Fix scheduled ScriptUI tasks in host sessions (@dorfee) 2026-10-24 02:09:49 +00:00
aiongg a407281852 Batch fix: tests: the web-job GPU page blurs by 12, which the GPU still runs after #1968 (#1968) 2026-10-24 01:39:09 +00:00
aiongg 546a9720b0 Batch fix: cargo fmt 2026-10-24 01:16:38 +00:00
aiongg 6e8111147b Merge #2155: Timeline: pick layer-valued properties from a layer drop-down (#2093) (@ChristopherLinnett) 2026-10-24 01:11:52 +00:00
aiongg c5f692abc6 Merge #2049: Light Settings: expose and preserve Environment lights (@tylerjenningsw) 2026-10-24 01:10:51 +00:00
aiongg 0c83acf79f Merge #2221: fix(ui): expose Duplicate in the Project panel context menu (#2207) (@Zaxaerith) 2026-10-24 01:10:42 +00:00
aiongg d664e403ae Merge #2185: Project Settings: Frame Count, Start at 0 or Start at 1 (@marcoarnulfo) 2026-10-24 00:13:55 +00:00
Christopher Linnett a661f2ed60 Merge main into fix/issue-2096-deselect-during-text-edit
main moved crates/ui-egui/tests/ui_text_edit.rs to tests/it/ (one test binary per crate); this branch's test changes follow the move.
2026-10-24 07:59:29 +08:00
aiongg 33951267e7 Merge #1653: UI: native press-and-browse menus, with edge auto-scroll (@elZanco) 2026-10-23 23:33:23 +00:00
aiongg ac5fc076df Merge #2050: 3D: add a New 3D Primitive dialog to Layer > New (@tylerjenningsw) 2026-10-23 23:33:19 +00:00
aiongg 662b620be4 Merge #2182: Regression tests for #354, #382, #979 and #1497 (@skylartaylor) 2026-10-23 23:32:52 +00:00
aiongg e272e74f5b Merge #1920: Preview: keep rendering past the cached frames after a loop or restart (@ded-achtung) 2026-10-23 21:37:28 +00:00
aiongg 5ff332a206 Merge #2048: Timeline: the disk-cache bar checks only the visible frames (@arnav-hiwarkar) 2026-10-23 21:37:28 +00:00
aiongg ce73d42c42 Merge #1929: Layer: replace a layer's source with Alt-drag and Ctrl+Alt+/ (#991) (@ki2pixel) 2026-10-23 21:26:51 +00:00
aiongg d0675be78b Merge #1850: Timeline: layer switches, labels and modes act on the whole selection (#1849) (@ki2pixel) 2026-10-23 21:26:33 +00:00
aiongg 52a0c6626d Merge #1931: Layer: Reveal Layer Source in Project from the context menus (#1809) (@ki2pixel) 2026-10-23 21:26:24 +00:00
aiongg 1520a11f9c Merge #1865: Text Range Selector: Start, End and Offset show as counts with Units = Index (#1814) (@SBaksa) 2026-10-23 21:26:16 +00:00
aiongg 38ca712cc2 Merge #2116: ui: Spacebar hand pans timeline rows vertically (#2083) (@gmrmad1) 2026-10-23 21:26:10 +00:00
skylar taylor-barrick b0c9d47725 Merge remote-tracking branch 'origin/main' into test/backfill-regression-tests 2026-10-23 12:09:54 -06:00
aiongg 0173abde8c CI: dev-profile gate, one test binary per crate, nextest, line tables only (#2235)
* Dev profile: line tables only for workspace crates, no debug info for dependencies

* xtask ci: dev-profile gate, nextest, tests without examples, wasm --keep-going

* One integration-test binary per crate

* xtask ci: run effectcraft-gpu's shared-device tests in one cargo test process

* xtask ci: run every stage and report all failures

* xtask ci: name the stage type (clippy type_complexity)

* xtask ci: run every test pass and report all failures

* cargo fmt
2026-10-23 12:59:51 -04:00
Christopher Linnett 0635649e42 fix: let a rebound Deselect All use Alt variants of Cmd+A and Cmd+Z (#2096)
The text editor's Select All and Undo arms ignored Alt, so a Deselect All
rebound to Cmd+Alt+A or Cmd+Alt+Z was taken as Select All or Undo while a
text edit was open.

The arms now match exactly the chords the editor owns (Cmd/Ctrl+A, and
Cmd/Ctrl+Z with or without Shift); their Alt variants fall through to the
Deselect All binding match. Chords the editor owns still win over a rebound
Deselect All, so Undo keeps working while typing.

Test: a UI kittest rebinds Deselect All to each Alt variant and checks that
Cmd+A and Cmd+Z still edit the text while the rebound chord ends the edit.
2026-10-24 00:03:10 +08:00
Christopher Linnett 0558c9427c fix: end an open text edit when Deselect All runs (#2096)
While a text layer was being edited, Edit > Deselect All and its shortcuts
selected every character (or did nothing) instead of ending the edit and
deselecting the layer.

- deselect_all now commits the open edit first, through the same route as
  text.endEdit: a created-but-empty type-tool layer is discarded, anything
  typed is kept, and no extra undo step is introduced.
- While the in-canvas editor holds the keyboard, the editor forwards the
  command's currently assigned shortcut (and any function-key chord) so
  Deselect All reaches the command from the comp; bare-letter bindings stay
  typing, and Select All still selects characters.
- The Project-panel focus redirects (invocation and menu enabled-ness) stand
  down while a text edit is open, so the menu and shortcut end the edit even
  when focus stayed on Project after Layer > New > Text.

Tests: three engine cases (commit + discard semantics), six UI kittest cases
(chords, F2, rebinding, menu enabled-ness, Project focus), RED at base.
2026-10-23 23:23:59 +08:00
Zaxaerith 9c0597fbfd fix(ui): add Duplicate to project item context menu (#2207) 2026-10-23 22:45:35 +08:00
Dylan M. Taylor 4b48482e8f ui: bound queued synthetic input gestures (#2197)
* ui: bound queued synthetic input gestures

* ui: reserve exact click event count
2026-10-23 08:45:10 -04:00
skylar taylor-barrick 8fe2f51fb0 #979: cover raster footage and a selection elsewhere in the vector-menu test
A raster footage layer's Timeline menu now also has to leave out Create Shapes from Vector Layer. The viewer check keeps the solid selected, so the menu has to follow the layer under the pointer rather than the selection. With the viewer's caps merge made a no-op, the test fails at the viewer check.
2026-10-22 19:13:31 -06:00
Marco Arnulfo 952b04322e Project Settings: Frame Count, Start at 0 or Start at 1 (part of #1807)
file.projectSettings takes frameStart (0|1), the Project Settings dialog shows Frame Count, and scripts get app.project.framesCountType and displayStartFrame. The setting was already read by the Frames and Feet + Frames time display; nothing could change it.
2026-10-23 03:07:01 +02:00
skylar taylor-barrick 7c1183df56 #1497: test that double-clicking an effect property name reveals it in the timeline
Double-clicking a property name in Effect Controls did nothing. The test double-clicks the name and checks the Timeline marks the property revealed and shows its row. Without the fix nothing is revealed.
2026-10-22 18:55:49 -06:00
skylar taylor-barrick 841ff7bc4b #354: test that the panel focus outline is drawn over the panel bodies
The focused panel's outline was painted before the panel body, so body fills hid it. The test finds the outline in the painted shapes and checks no filled rect painted after it reaches its one-pixel ring. Without the fix a body fill overlaps the ring.
2026-10-22 18:55:49 -06:00
skylar taylor-barrick d87a6940f4 #979: test that layer context menus offer Create Shapes from Vector Layer
Right-clicking vector footage in the Timeline or the Composition viewer offered no vector conversion. The test imports an SVG and checks the item is absent for a solid, present on the SVG layer in both menus, and converts it. Without the fix the menu item is missing.
2026-10-22 18:55:49 -06:00
Markus Ang 58d00e78d5 #2034: fit translated Settings page names 2026-10-22 20:12:36 -04:00
Christopher Linnett 174f401fe1 timeline: pick layer-valued properties from a layer drop-down (#2093)
The Timeline drew a layer-valued property (an Environment light's Source, a
Displacement Map's layer parameter) as read-only text holding the raw layer
id, so a light's Source could not be chosen in the UI at all - only through
prop.set from the command line, scripting or MCP. Effect Controls already
had a working drop-down for exactly these values: extract it into one shared
widgets::layer_picker (the current entry, "None" first, then "N. name" for
every layer of the comp, the list built only while the popup is open) and
draw it from both panels.

In the Timeline the pick writes through the same set closure as every other
value arm - an undoable prop.set (layer id, or null for None) - and
registers timeline.prop.<uid>.value like its neighbours, so the row names
the layer instead of exposing its id. Effect Controls keeps its rect,
automation id and write; its closed dropdown's "None", previously a
hardcoded literal, now follows the interface language. The dead "Layer {n}"
id text leaves the i18n catalogs with it.

ui_layer_source_picker drives both panels headlessly (open, pick, undo,
dismiss, current-entry highlight, translated None, picking None to clear a
set value), and an ignored wgpu snapshot test keeps the visual record
reproducible.
2026-10-23 01:47:55 +08:00
Madhav Agarwal 3306bf2296 ui: Spacebar hand pans timeline rows vertically (#2083) 2026-10-22 19:15:34 +05:30
tylerjenningsw c21210a63a 3D: close the New 3D Primitive dialog when its project or comp changes; untouched dimensions take the type's defaults (#1734)
The draft records the project epoch and comp it was opened for. A script or the
control channel opening a project or activating another comp while it is open
closed nothing before, and OK added the primitive (and switched to Advanced 3D)
in whatever comp was active then, even in a new project reusing the comp id.
2026-10-21 14:51:41 -04:00
tylerjenningsw cb561a6a3d 3D: test the New 3D Primitive dialog from a blank comp (#1734) 2026-10-21 13:31:59 -04:00
tylerjenningsw 83cd74c730 Light Settings: test which options each light type shows, and undoing Environment to Spot (#1588) 2026-10-21 13:14:46 -04:00
tylerjenningsw b9929c2d71 Light Settings: test Environment lights and the other types through the dialog (#1588) 2026-10-21 12:41:50 -04:00
arnav-hiwarkarandClaude Opus 5.5 506a5b327f Timeline: the disk-cache bar checks only the visible frames
- `Frames::disk_frames` takes a frame range instead of a frame count, still clamped to the existing 100,000-frame limit.
- The Timeline passes the visible range (`disk_bar_range`), including frames only partly in view, and clips the blue bar to the work-area row.
- Membership stays live: nothing is cached, so the bar updates as before when frames are written, evicted or promoted to RAM.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 21:47:18 +05:30
tylerjenningsw 0d03863fa5 Merge main into fix/expression-editor-autofocus 2026-10-20 10:12:27 -04:00
Camille Moine 14453386ac Viewer: keep hidden AV layers' controls visible (#1769) 2026-10-20 14:46:05 +02:00
Camille Moine c7eb48dc3a Layer: reveal layer sources in the Project panel (#1809) 2026-10-20 13:59:01 +02:00
Camille Moine 8d887fd6da Layer: replace a layer's source with Alt-drag and Ctrl+Alt+/ (#991, #813)
Alt/Option-drag a Project item onto a Timeline layer, or press Ctrl+Alt+/ (Cmd+Opt+/) with layers and an item selected, to swap the layer's source. The layer keeps its name, timing, transforms, keyframes, expressions, effects, masks, switches, parenting and track matte; a source with audio adds Audio properties when missing. Precompositions can't be nested inside themselves.

AVLayer.replaceSource now runs the same engine command and closes the replaceSource part of #813.
2026-10-20 12:18:46 +02:00
SBaksa f41aa134a8 Text Range Selector test: change Units through the Timeline popup (#1814)
The Index-units test now opens the Units popup in the Timeline and picks
Index, asserts the stored Units value, then reads the painted Start, End
and Offset, so it also fails when the Units control doesn't update the
session.
2026-10-20 12:09:33 +11:00