Skip to content

refactor: shared module layout (craft-contrib#20) - #2491

Merged
aiongg merged 70 commits into
storytold:mainfrom
aiongg:layout
Oct 27, 2026
Merged

aiongg merged 70 commits into
storytold:mainfrom
aiongg:layout

Conversation

@aiongg

@aiongg aiongg commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Pure-move reorganisation of EffectCraft's modules to the shared layout proposed in storytold/craft-contrib#20, done during the merge freeze. No behaviour changes: each commit moves code with git mv or ra-move, and public paths stay the same through pub use aliases in the old parents. Rewriting callers to the defining modules, and removing the aliases, is after-freeze work, so open PRs see fewer conflicts now.

Merge without squashing, so the history keeps one commit per move.

What moved

Large files split

Line counts are wc -l (including comments, tests and blank lines) at main (c6184292) and at this PR (b7b75ed3).

File on main Lines on main Split into Left in the original Largest new file
crates/ui-egui/src/lib.rs 3,517 15 files 424 state.rs (794)
crates/ui-egui/src/panels/viewer.rs 2,942 7 files 1,427 viewer/geometry.rs (304)
crates/ui-egui/src/menus.rs 2,748 7 files 44 menus/invoke.rs (692)
crates/effects/src/sim2.rs 2,698 7 files 43 sim2/surfaces.rs (524)
crates/render/src/lib.rs 2,460 7 files 102 pipeline.rs (886)
crates/effects/src/generate3.rs 2,446 7 files 42 generate3/paths.rs (553)
crates/pdf/src/ps.rs 2,038 7 files 49 ps/builtin.rs (956)
crates/effects/src/sim.rs 2,033 7 files 42 sim/tests.rs (407)
crates/engine/src/commands/layer.rs (original replaced by crates/engine/src/cmd/layer.rs) 2,002 8 files 212 crates/engine/src/cmd/layer/parent.rs (452)
crates/effects/src/ocio.rs 1,838 7 files 67 ocio/effects.rs (467)
crates/ui-egui/src/panels/effect_controls.rs 1,682 5 files 41 effect_controls/rows.rs (626)
crates/project/src/lib.rs 1,662 5 files 65 comp.rs (427)
crates/engine/src/lib.rs 1,593 9 files 354 session/edit.rs (303)
crates/psd/src/lib.rs 1,523 5 files 72 pixels.rs (545)
crates/engine/src/prefs.rs (original replaced by crates/engine/src/settings/prefs.rs) 1,518 6 files 128 settings/prefs/dialog.rs (430)

Also: 19 test modules moved out to tests.rs files, 7 mod.rs files renamed, 111 loose test files moved under tests paths.

crates/ui-egui/src/lib.rs (3,517 → 424 + 15 files)
New file Lines
state.rs (existing file) 794
app/frame.rs 551
lifecycle_tests.rs 509
app/prefetch.rs 381
app/screenshot.rs 330
app/gpu.rs 221
app/playback.rs 186
app.rs 166
app/viewer_frames.rs 166
app/prefs.rs 165
app/window.rs 155
hooks.rs 83
clock.rs 71
app/clipboard.rs 63
app/input.rs 60
crates/ui-egui/src/panels/viewer.rs (2,942 → 1,427 + 7 files)
New file Lines
viewer/geometry.rs 304
viewer/tools.rs 298
viewer/view.rs 222
viewer/shapes.rs 218
viewer/gesture.rs 197
viewer/frame.rs 183
viewer/tests.rs 141
crates/ui-egui/src/menus.rs (2,748 → 44 + 7 files)
New file Lines
menus/invoke.rs 692
menus/frontend.rs 684
menus/tests.rs 406
menus/shortcuts.rs 397
menus/bar.rs 289
menus/entries.rs 147
menus/commands.rs 122
crates/effects/src/sim2.rs (2,698 → 43 + 7 files)
New file Lines
sim2/surfaces.rs 524
sim2/tests.rs 485
sim2/shatter.rs 481
sim2/foam.rs 408
sim2/registry.rs 288
sim2/pieces.rs 277
sim2/pixels.rs 228
crates/render/src/lib.rs (2,460 → 102 + 7 files)
New file Lines
pipeline.rs 886
layers.rs 558
accel.rs 352
footage.rs 178
fx_host.rs 157
frames.rs 144
opts.rs 97
crates/effects/src/generate3.rs (2,446 → 42 + 7 files)
New file Lines
generate3/paths.rs 553
generate3/tests.rs 397
generate3/raster.rs 369
generate3/fill.rs 334
generate3/audio.rs 314
generate3/registry.rs 265
generate3/fractal.rs 193
crates/pdf/src/ps.rs (2,038 → 49 + 7 files)
New file Lines
ps/builtin.rs 956
ps/text.rs 322
ps/scanner.rs 223
ps/paths.rs 187
ps/exec.rs 172
ps/value.rs 88
ps/eps.rs 79
crates/effects/src/sim.rs (2,033 → 42 + 7 files)
New file Lines
sim/tests.rs 407
sim/particle_fx.rs 367
sim/sprites.rs 361
sim/weather.rs 352
sim/engine.rs 287
sim/registry.rs 229
sim/common.rs 25
crates/engine/src/commands/layer.rs (2,002 → 212 + 8 files)
New file Lines
crates/engine/src/cmd/layer/parent.rs 452
crates/engine/src/cmd/layer/create.rs 312
crates/engine/src/cmd/layer/timing.rs 283
crates/engine/src/cmd/layer/switches.rs 210
crates/engine/src/cmd/layer/contents.rs 205
crates/engine/src/cmd/layer/transform.rs 191
crates/engine/src/cmd/layer/replace.rs 98
crates/engine/src/cmd/layer/select.rs 73
crates/effects/src/ocio.rs (1,838 → 67 + 7 files)
New file Lines
ocio/effects.rs 467
ocio/lut.rs 331
ocio/tests.rs 313
ocio/program.rs 252
ocio/space.rs 214
ocio/registry.rs 129
ocio/cdl.rs 115
crates/ui-egui/src/panels/effect_controls.rs (1,682 → 41 + 5 files)
New file Lines
effect_controls/rows.rs 626
effect_controls/editors.rs 380
effect_controls/panel.rs 324
effect_controls/viewer.rs 254
effect_controls/common.rs 109
crates/project/src/lib.rs (1,662 → 65 + 5 files)
New file Lines
comp.rs 427
layer.rs 370
settings.rs 314
item.rs 308
footage.rs 229
crates/engine/src/lib.rs (1,593 → 354 + 9 files)
New file Lines
session/edit.rs 303
session/comps.rs 283
doc_state.rs 197
session/render.rs 99
fonts.rs 92
session/dispatch.rs 70
services.rs 65
event.rs 32
error.rs 20
crates/psd/src/lib.rs (1,523 → 72 + 5 files)
New file Lines
pixels.rs 545
parse.rs 513
model.rs 265
limits.rs 133
counters.rs 19
crates/engine/src/prefs.rs (1,518 → 128 + 6 files)
New file Lines
settings/prefs/dialog.rs 430
settings/prefs/sections.rs 352
settings/prefs/document.rs 315
settings/prefs/queries.rs 208
settings/prefs/choices.rs 63
settings/prefs/recent.rs 57

Totals: 15 files split, 28,230 lines moved out of them, 108 new files.

Engine top level: 93 files became 17 (lib.rs, cmd.rs, menus.rs, history.rs, viewer.rs, scriptui.rs, render_queue.rs, preview.rs, rq_tests.rs, tests.rs and the group roots analysis, settings, footage, interchange, home, background, system). Each group root holds only pub mod lines; lib.rs re-exports every moved module (pub use analysis::roto;), so effectcraft_engine::roto::… and crate::roto::… still work. commands/ is cmd/, with pub use cmd as commands; because ui-egui, script and the CLI use effectcraft_engine::commands::….

Edits besides moved lines

Inside move commits, only what the move needs to compile (pure-move-check shows these as the only unmatched lines):

  • include_str! path depth: ui-egui/src/i18n/ui.rs (panels/mod.rs → panels.rs, commands/viewer_cmds.rs → cmd/viewer_cmds.rs, prefs.rs → settings/prefs.rs), ui-egui/src/workspace_state/tests.rs, and the engine tests that include docs/preferences.md and presets/text_animators.json.
  • Test-module paths: crate::tests_<x>:: → crate::tests::<x>::, and a moved file's top-level use super:: → use crate::. tests.rs declares track, roto and stubs pub(crate) because code outside tests/ uses them.
  • #[path = "fbx_tests.rs"] removed with the move of model/src/fbx_tests.rs to fbx/tests.rs.
  • ui-egui/src/i18n/ui.rs CONVERTED rows: a split file's row is replaced by rows for the files that now hold its strings (settings/prefs.rs → prefs/dialog.rs, prefs/choices.rs; menus.rs, panels/effect_controls.rs and panels/viewer.rs → their new files). Without them every_row_is_used_by_a_converted_panel fails.
  • Imports and visibility in split files, where rust-analyzer can't see the names: settings/prefs.rs re-exports the 19 settings page types that the page! macro defines (pub use sections::{Appearance, …}); app/clipboard.rs has #[cfg(test)] use super::*; for its moved test module.
  • Inline modules moved whole before their file's split: psd counters → counters.rs, ui-egui lifecycle_tests → lifecycle_tests.rs, viewer tests → viewer/tests.rs.
  • Test module names: the tests_ prefix is dropped (tests_roto.rs → tests/roto.rs); tests_3d.rs → tests/three_d.rs (an identifier can't start with a digit); render tests_aux.rs → tests/aux_channels.rs (aux is a reserved file name on Windows). Suffix files declared in lib.rs (rq_tests.rs, psd memory_tests.rs) stay this round.

Separate commits:

  • 3559c9b docs(gpu): name the moved test module in a comment
  • b7b75ed style: cargo fmt on the moved files (checked by rerunning cargo fmt --all on its parent: the trees match)

Log targets

log records use the module path as their target. Records from moved modules get new targets; every target still starts with its crate name, and the filters (engine/src/logging.rs level_for, RUST_LOG) match by prefix, so crate-level filters keep working. Changed: effectcraft_engine::offload → …::background::offload, …::session_settings → …::settings::session_settings, …::guard → …::system::guard, …::logging → …::system::logging, …::commands::{scripts,render_queue,warp_cmds} → …::cmd::…. In ui-egui, records from the app's methods change from effectcraft_ui_egui to effectcraft_ui_egui::app::{frame,gpu,playback,window}. The splits move no other code that logs.

Open PRs this conflicts with

Counts per commit, then per file (old path), from the open PRs on the day of this PR. Edits to a moved file usually rebase cleanly through git's rename detection; PRs that add files under commands/ or at the engine top level need their new mod line placed by hand.

Conflicts per commit and file

refactor(ui-egui): move src/panels/mod.rs to src/panels.rs: 45 PRs

refactor(track): move src/roto/mod.rs to src/roto.rs: 3 PRs

refactor(track): move src/camtrack/mod.rs to src/camtrack.rs: 1 PRs

refactor(effects): move src/puppet/mod.rs to src/puppet.rs: 2 PRs

refactor(render): move src/three_d/mod.rs to src/three_d.rs: 1 PRs

refactor(opusenc): move src/silk/mod.rs to src/silk.rs: 1 PRs

refactor(engine): move src/commands/mod.rs to src/commands.rs: 14 PRs

refactor(engine): move commands/ to cmd/, keeping commands as an alias: 145 PRs

refactor(effects): move src/distort3.rs tests to src/distort3/tests.rs: 1 PRs

refactor(effects): move src/generate2.rs tests to src/generate2/tests.rs: 1 PRs

refactor(effects): move src/sim.rs tests to src/sim/tests.rs: 4 PRs

refactor(engine): move src/offload.rs tests to src/offload/tests.rs: 4 PRs

refactor(engine): move src/remote.rs tests to src/remote/tests.rs: 1 PRs

refactor(host): move src/lib.rs tests to src/tests.rs: 7 PRs

refactor(keyframe): move src/lib.rs tests to src/tests.rs: 9 PRs

refactor(text): move src/fonts.rs tests to src/fonts/tests.rs: 15 PRs

refactor(text): move src/layout.rs tests to src/layout/tests.rs: 6 PRs

refactor(ui-egui): move src/frames.rs tests to src/frames/tests.rs: 8 PRs

refactor(ui-egui): move src/menus.rs tests to src/menus/tests.rs: 50 PRs

refactor(ui-egui): move src/panels/timeline.rs tests to src/panels/timeline/tests.rs: 34 PRs

  • crates/ui-egui/src/panels/timeline.rs (34): #400, #855, #995, #1107, #1226, #1291, #1314, #1336, #1352, #1370, #1385, #1581, #1600, #1755, #1772, #1821, #1844, #1895, #1951, #1978, #1980, #1981, #2047, #2111, #2230, #2236, #2253, #2254, #2256, #2270, #2277, #2281, #2355, #2471

refactor(ui-egui): move src/panels/viewer_text.rs tests to src/panels/viewer_text/tests.rs: 10 PRs

  • crates/ui-egui/src/panels/viewer_text.rs (10): #1276, #1277, #1278, #1286, #1296, #1300, #1304, #1370, #2268, #2284

refactor(engine): move tests_.rs files to src/tests/, tests.rs content to tests/session.rs: 107 PRs

  • crates/engine/src/lib.rs (36): #251, #855, #860, #889, #918, #1103, #1224, #1225, #1278, #1286, #1296, #1300, #1304, #1758, #1829, #1830, #1859, #1860, #1921, #1922, #1970, #1978, #1980, #2007, #2042, #2216, #2222, #2248, #2291, #2300, #2312, #2369, #2410, #2442, #2450, #2471
  • crates/engine/src/tests_settings.rs (21): #802, #885, #981, #1094, #1224, #1266, #1270, #1273, #1276, #1277, #1278, #1286, #1296, #1300, #1304, #1340, #1408, #1508, #1541, #2365, #2366
  • crates/engine/src/tests_menu_cmds.rs (11): #802, #855, #860, #1336, #1895, #1978, #1980, #2042, #2216, #2262, #2284
  • crates/engine/src/tests_effects.rs (9): #1094, #1749, #2170, #2222, #2312, #2336, #2452, #2466, #2471
  • crates/engine/src/session_settings.rs (8): #819, #855, #856, #918, #1408, #1729, #2356, #2471
  • crates/engine/src/tests_proxy.rs (6): #1359, #2300, #2309, #2352, #2466, #2471
  • crates/engine/src/tests_shortcut_cmds.rs (6): #1278, #1286, #1296, #1300, #1304, #1737
  • crates/engine/src/tests_viewer.rs (6): #885, #1300, #1304, #1408, #1654, #1978
  • crates/engine/src/rq_tests.rs (5): #464, #1922, #2258, #2424, #2476
  • crates/engine/src/tests_timeline.rs (5): #949, #1342, #1385, #1574, #1984
  • crates/engine/src/tests_essential.rs (4): #1337, #1343, #1408, #1951
  • crates/engine/src/tests_m145.rs (4): #1970, #2291, #2424, #2471
  • crates/engine/src/tests_tail.rs (4): #1107, #1858, #2118, #2284
  • crates/engine/src/tests_text_edit.rs (4): #2109, #2266, #2268, #2284
  • crates/engine/src/tests.rs (3): #1342, #2089, #2450
  • crates/engine/src/tests_disk_cache.rs (3): #855, #885, #1092
  • crates/engine/src/tests_roto.rs (3): #855, #1539, #1804
  • crates/engine/src/tests_stubs.rs (3): #1874, #1978, #2426
  • crates/engine/src/tests_import_project.rs (2): #1323, #1408
  • crates/engine/src/tests_limits.rs (2): #1323, #1408
  • crates/engine/src/tests_panels.rs (2): #1739, #2219
  • crates/engine/src/tests_rig3d.rs (2): #1165, #1951
  • crates/engine/src/tests_anim_presets.rs (1): #1513
  • crates/engine/src/tests_codec_options.rs (1): #1840
  • crates/engine/src/tests_essential_more.rs (1): #1710
  • crates/engine/src/tests_frame_export.rs (1): #1820
  • crates/engine/src/tests_markers.rs (1): #2169
  • crates/engine/src/tests_mask_warp.rs (1): #1408
  • crates/engine/src/tests_models.rs (1): #1539
  • crates/engine/src/tests_paint.rs (1): #1755
  • crates/engine/src/tests_sequence.rs (1): #2107
  • crates/engine/src/tests_styles.rs (1): #1601
  • crates/engine/src/tests_3d.rs (1): #2474
  • crates/engine/src/tests_track.rs (1): #1374

refactor(gpu): move loose test files to src/tests/: 26 PRs

  • crates/gpu/src/lib.rs (10): #1326, #1441, #1523, #1550, #1571, #1631, #1632, #1706, #1840, #1856
  • crates/gpu/src/tests.rs (8): #1326, #1441, #1490, #1523, #1571, #1705, #1801, #1873
  • crates/gpu/src/tests_fx_stylize.rs (4): #1490, #1599, #1836, #2154
  • crates/gpu/src/tests_3d.rs (3): #1571, #1918, #2463
  • crates/gpu/src/tests_adv3d.rs (2): #1951, #2474
  • crates/gpu/src/tests_init.rs (2): #1224, #1571
  • crates/gpu/src/tests_particles.rs (2): #1382, #1390
  • crates/gpu/src/tests_adjust.rs (1): #2154
  • crates/gpu/src/tests_fx_key.rs (1): #1583
  • crates/gpu/src/tests_fx_transition.rs (1): #1965

refactor(render): move loose test files to src/tests/: 35 PRs

  • crates/render/src/lib.rs (28): #819, #856, #889, #1279, #1382, #1390, #1400, #1441, #1505, #1523, #1631, #1632, #1710, #1739, #1801, #1827, #1853, #1856, #1874, #1951, #1956, #1978, #2012, #2300, #2352, #2410, #2466, #2471
  • crates/render/src/tests.rs (8): #701, #1382, #1390, #1421, #1505, #1632, #2039, #2284
  • crates/render/src/tests_mask_expansion.rs (2): #1853, #1974
  • crates/render/src/tests_styles.rs (2): #860, #1103
  • crates/render/src/tests_audio_fx.rs (1): #1827
  • crates/render/src/tests_remap.rs (1): #889
  • crates/render/src/tests_roi.rs (1): #2012
  • crates/render/src/tests_time.rs (1): #1951

refactor(script): move loose test files to src/tests/: 17 PRs

  • crates/script/src/tests.rs (9): #1107, #1164, #1380, #1848, #1858, #1980, #2355, #2450, #2471
  • crates/script/src/lib.rs (4): #1554, #1574, #2279, #2471
  • crates/script/src/tests_services.rs (3): #1164, #1359, #1380
  • crates/script/src/tests_ui_more.rs (2): #1224, #1951
  • crates/script/src/tests_ease_presets.rs (1): #1876
  • crates/script/src/tests_panels.rs (1): #2289
  • crates/script/src/tests_ui.rs (1): #1554

refactor(pdf): move loose test files to src/tests/: 3 PRs

  • crates/pdf/src/tests_import.rs (2): #2247, #2284
  • crates/pdf/src/tests.rs (1): #855

refactor(engine): move tracking, camera_track, mask_track, warp, roto, models to analysis/: 39 PRs

  • crates/engine/src/lib.rs (36): #251, #855, #860, #889, #918, #1103, #1224, #1225, #1278, #1286, #1296, #1300, #1304, #1758, #1829, #1830, #1859, #1860, #1921, #1922, #1970, #1978, #1980, #2007, #2042, #2216, #2222, #2248, #2291, #2300, #2312, #2369, #2410, #2442, #2450, #2471
  • crates/engine/src/tracking.rs (3): #1951, #2300, #2471
  • crates/engine/src/models.rs (1): #1539
  • crates/engine/src/roto.rs (1): #1539
  • crates/engine/src/warp.rs (1): #2347

refactor(engine): move prefs, session_settings, config, shortcuts, autosave to settings/: 85 PRs

  • crates/ui-egui/src/i18n/ui.rs (37): #666, #802, #819, #981, #1150, #1289, #1291, #1298, #1336, #1340, #1418, #1508, #1514, #1515, #1529, #1541, #1581, #1772, #1774, #1775, #1779, #1829, #1830, #1974, #1978, #1980, #1981, #2000, #2054, #2230, #2253, #2281, #2343, #2366, #2422, #2427, #2442
  • crates/engine/src/lib.rs (36): #251, #855, #860, #889, #918, #1103, #1224, #1225, #1278, #1286, #1296, #1300, #1304, #1758, #1829, #1830, #1859, #1860, #1921, #1922, #1970, #1978, #1980, #2007, #2042, #2216, #2222, #2248, #2291, #2300, #2312, #2369, #2410, #2442, #2450, #2471
  • crates/engine/src/prefs.rs (22): #400, #802, #819, #885, #981, #1094, #1150, #1281, #1287, #1340, #1401, #1508, #1515, #1529, #1541, #1779, #2000, #2291, #2365, #2366, #2369, #2471
  • crates/engine/src/shortcuts.rs (13): #1266, #1270, #1273, #1276, #1277, #1278, #1286, #1296, #1300, #1304, #2291, #2356, #2471
  • crates/engine/src/session_settings.rs (8): #819, #855, #856, #918, #1408, #1729, #2356, #2471
  • crates/engine/src/config.rs (2): #1408, #2289
  • crates/engine/src/autosave.rs (1): #1408

refactor(engine): move doc_path, footage_check, footage_reload, sequence, media_browser, media_cache to footage/: 41 PRs

  • crates/engine/src/lib.rs (36): #251, #855, #860, #889, #918, #1103, #1224, #1225, #1278, #1286, #1296, #1300, #1304, #1758, #1829, #1830, #1859, #1860, #1921, #1922, #1970, #1978, #1980, #2007, #2042, #2216, #2222, #2248, #2291, #2300, #2312, #2369, #2410, #2442, #2450, #2471
  • crates/engine/src/doc_path/tests.rs (3): #1864, #1970, #1978
  • crates/engine/src/footage_reload.rs (2): #1969, #2369
  • crates/engine/src/media_browser.rs (2): #894, #1739
  • crates/engine/src/footage_check.rs (1): #464
  • crates/engine/src/sequence.rs (1): #894

refactor(engine): move psd_import, vector, xml_project to interchange/: 36 PRs

  • crates/engine/src/lib.rs (36): #251, #855, #860, #889, #918, #1103, #1224, #1225, #1278, #1286, #1296, #1300, #1304, #1758, #1829, #1830, #1859, #1860, #1921, #1922, #1970, #1978, #1980, #2007, #2042, #2216, #2222, #2248, #2291, #2300, #2312, #2369, #2410, #2442, #2450, #2471
  • crates/engine/src/psd_import.rs (1): #860
  • crates/engine/src/vector.rs (1): #860

refactor(engine): move learn, templates, demo, links to home/: 37 PRs

  • crates/engine/src/lib.rs (36): #251, #855, #860, #889, #918, #1103, #1224, #1225, #1278, #1286, #1296, #1300, #1304, #1758, #1829, #1830, #1859, #1860, #1921, #1922, #1970, #1978, #1980, #2007, #2042, #2216, #2222, #2248, #2291, #2300, #2312, #2369, #2410, #2442, #2450, #2471
  • crates/engine/src/demo.rs (1): #860
  • crates/engine/src/templates.rs (1): #1094

refactor(engine): move jobs, offload, remote to background/: 40 PRs

  • crates/engine/src/lib.rs (36): #251, #855, #860, #889, #918, #1103, #1224, #1225, #1278, #1286, #1296, #1300, #1304, #1758, #1829, #1830, #1859, #1860, #1921, #1922, #1970, #1978, #1980, #2007, #2042, #2216, #2222, #2248, #2291, #2300, #2312, #2369, #2410, #2442, #2450, #2471
  • crates/engine/src/offload.rs (4): #1408, #1856, #1922, #2219
  • crates/engine/src/jobs.rs (1): #1225
  • crates/engine/src/remote.rs (1): #1523

refactor(engine): move guard, logging, perf, sysinfo, storage to system/: 38 PRs

  • crates/engine/src/lib.rs (36): #251, #855, #860, #889, #918, #1103, #1224, #1225, #1278, #1286, #1296, #1300, #1304, #1758, #1829, #1830, #1859, #1860, #1921, #1922, #1970, #1978, #1980, #2007, #2042, #2216, #2222, #2248, #2291, #2300, #2312, #2369, #2410, #2442, #2450, #2471
  • crates/engine/src/guard.rs (1): #1224
  • crates/engine/src/logging.rs (1): #1651
  • crates/engine/src/sysinfo.rs (1): #819

refactor(engine): move error, services, document state, event, fonts and Session methods out of lib.rs: 36 PRs

  • crates/engine/src/lib.rs (36): #251, #855, #860, #889, #918, #1103, #1224, #1225, #1278, #1286, #1296, #1300, #1304, #1758, #1829, #1830, #1859, #1860, #1921, #1922, #1970, #1978, #1980, #2007, #2042, #2216, #2222, #2248, #2291, #2300, #2312, #2369, #2410, #2442, #2450, #2471

refactor(engine): move settings model, page types and schema to settings/prefs/*.rs: 37 PRs

  • crates/ui-egui/src/i18n/ui.rs (37): #666, #802, #819, #981, #1150, #1289, #1291, #1298, #1336, #1340, #1418, #1508, #1514, #1515, #1529, #1541, #1581, #1772, #1774, #1775, #1779, #1829, #1830, #1974, #1978, #1980, #1981, #2000, #2054, #2230, #2253, #2281, #2343, #2366, #2422, #2427, #2442

refactor(render): move footage, effect host, accelerators, options, pipeline, layers and frames out of lib.rs: 28 PRs

  • crates/render/src/lib.rs (28): #819, #856, #889, #1279, #1382, #1390, #1400, #1441, #1505, #1523, #1631, #1632, #1710, #1739, #1801, #1827, #1853, #1856, #1874, #1951, #1956, #1978, #2012, #2300, #2352, #2410, #2466, #2471

refactor(project): move settings, comp, layer, footage and item types out of lib.rs: 13 PRs

  • crates/project/src/lib.rs (13): #860, #1092, #1094, #1323, #1408, #1423, #1739, #1969, #2222, #2236, #2300, #2312, #2471

refactor(ui-egui): move Effect Controls panel parts to panels/effect_controls/*.rs: 50 PRs

  • crates/ui-egui/src/i18n/ui.rs (37): #666, #802, #819, #981, #1150, #1289, #1291, #1298, #1336, #1340, #1418, #1508, #1514, #1515, #1529, #1541, #1581, #1772, #1774, #1775, #1779, #1829, #1830, #1974, #1978, #1980, #1981, #2000, #2054, #2230, #2253, #2281, #2343, #2366, #2422, #2427, #2442
  • crates/ui-egui/src/panels/effect_controls.rs (16): #400, #889, #1226, #1314, #1328, #1370, #1581, #1749, #1772, #1821, #1951, #2170, #2254, #2277, #2280, #2281

refactor(ui-egui): move lifecycle_tests to lifecycle_tests.rs: 53 PRs

  • crates/ui-egui/src/lib.rs (53): #400, #802, #855, #856, #885, #918, #981, #1105, #1121, #1177, #1266, #1270, #1273, #1276, #1277, #1278, #1286, #1296, #1298, #1300, #1304, #1328, #1338, #1339, #1341, #1401, #1439, #1508, #1515, #1554, #1623, #1671, #1762, #1827, #1829, #1830, #1859, #1922, #1970, #1978, #1983, #2030, #2162, #2359, #2361, #2364, #2365, #2366, #2368, #2369, #2425, #2466, #2472

refactor(ui-egui): move app constructors and eframe::App to app.rs, clock and hooks to their own files, screenshot and playback state to state.rs: 55 PRs

  • crates/ui-egui/src/lib.rs (53): #400, #802, #855, #856, #885, #918, #981, #1105, #1121, #1177, #1266, #1270, #1273, #1276, #1277, #1278, #1286, #1296, #1298, #1300, #1304, #1328, #1338, #1339, #1341, #1401, #1439, #1508, #1515, #1554, #1623, #1671, #1762, #1827, #1829, #1830, #1859, #1922, #1970, #1978, #1983, #2030, #2162, #2359, #2361, #2364, #2365, #2366, #2368, #2369, #2425, #2466, #2472
  • crates/ui-egui/src/state.rs (5): #802, #1304, #1338, #1821, #2047

refactor(ui-egui): move menu commands, dispatch, entries, shortcuts and the menu bar to menus/*.rs: 80 PRs

  • crates/ui-egui/src/menus.rs (50): #251, #400, #860, #889, #894, #918, #981, #1103, #1105, #1266, #1270, #1273, #1276, #1277, #1278, #1286, #1296, #1297, #1300, #1304, #1338, #1339, #1341, #1342, #1401, #1439, #1508, #1623, #1671, #1739, #1829, #1830, #1921, #1922, #1951, #1978, #1983, #2030, #2170, #2216, #2250, #2263, #2284, #2289, #2291, #2356, #2366, #2442, #2471, #2490
  • crates/ui-egui/src/i18n/ui.rs (37): #666, #802, #819, #981, #1150, #1289, #1291, #1298, #1336, #1340, #1418, #1508, #1514, #1515, #1529, #1541, #1581, #1772, #1774, #1775, #1779, #1829, #1830, #1974, #1978, #1980, #1981, #2000, #2054, #2230, #2253, #2281, #2343, #2366, #2422, #2427, #2442

refactor(ui-egui): move viewer tests to panels/viewer/tests.rs: 24 PRs

  • crates/ui-egui/src/panels/viewer.rs (24): #400, #855, #856, #949, #1036, #1107, #1287, #1289, #1300, #1304, #1342, #1370, #1581, #1739, #1772, #1821, #1851, #1911, #1951, #1978, #2111, #2255, #2270, #2284

refactor(ui-egui): move viewer frame, geometry, gestures, shapes, tools and view parts to panels/viewer/*.rs: 57 PRs

  • crates/ui-egui/src/i18n/ui.rs (37): #666, #802, #819, #981, #1150, #1289, #1291, #1298, #1336, #1340, #1418, #1508, #1514, #1515, #1529, #1541, #1581, #1772, #1774, #1775, #1779, #1829, #1830, #1974, #1978, #1980, #1981, #2000, #2054, #2230, #2253, #2281, #2343, #2366, #2422, #2427, #2442
  • crates/ui-egui/src/panels/viewer.rs (24): #400, #855, #856, #949, #1036, #1107, #1287, #1289, #1300, #1304, #1342, #1370, #1581, #1739, #1772, #1821, #1851, #1911, #1951, #1978, #2111, #2255, #2270, #2284

refactor(effects): split sim.rs into sim/*.rs: 4 PRs

  • crates/effects/src/sim.rs (4): #1382, #1390, #1610, #2222

refactor(pdf): split the PostScript interpreter ps.rs into ps/*.rs: 2 PRs

  • crates/pdf/src/ps.rs (2): #2247, #2284

style: cargo fmt on the moved files: 27 PRs

  • crates/script/src/tests.rs (9): #1107, #1164, #1380, #1848, #1858, #1980, #2355, #2450, #2471
  • crates/gpu/src/tests.rs (8): #1326, #1441, #1490, #1523, #1571, #1705, #1801, #1873
  • crates/render/src/tests.rs (8): #701, #1382, #1390, #1421, #1505, #1632, #2039, #2284
  • crates/engine/src/tests.rs (3): #1342, #2089, #2450

After the freeze

  • Split ui-egui/src/panels/timeline.rs (5,045 lines): show is one ~2,200-line function that needs a frame context struct and a draw_row first (a refactor PR, not a move).
  • Split show in ui-egui/src/panels/viewer.rs (1,323 lines) the same way.
  • Rewrite callers to the defining modules (rule 3) and remove the pub use aliases.
  • Split the test-only files over 1,500 lines: engine tests/menu_cmds.rs, script/src/tests.rs, ui-egui tests/it/ui_text_edit.rs and ui_viewer.rs.

Other targets

cargo check --tests --target x86_64-pc-windows-msvc and --target aarch64-apple-darwin pass for every touched crate except effectcraft-ui-egui, whose dependency ring runs a C build script that needs a cross C toolchain. For Windows, cargo xwin clippy -p effectcraft-ui-egui --all-targets --target x86_64-pc-windows-msvc -- -D warnings passes. On macOS, the OS-specific code in the split ui-egui files is cfg!(target_os = …) expressions, which the Linux build compiles. cargo xtask wasm passes.

pure-move-check

pure-move-check upstream/main..layout: 57 commits ok, 13 with unmatched lines. Every unmatched line in those is one of the edits listed above; none removes a ///, //! or #[…] line.

Commit Unmatched lines are
7ed8441 refactor(ui-egui): move src/panels/mod.rs to src/panels.rs include_str! path in i18n/ui.rs
a3ea645 refactor(engine): move commands/ to cmd/, keeping commands as an alias include_str! path in i18n/ui.rs
bcf34a0 refactor(ui-egui): move src/workspace_state.rs tests to src/workspace_state/tests.rs fixture include_str! depth
35e66b1 refactor(engine): move tests_.rs files to src/tests/, tests.rs content to tests/session.rs crate::tests_<x>:: paths and include_str! depths
959322d refactor(gpu): move loose test files to src/tests/ crate::tests_deferred:: path
3559c9b docs(gpu): name the moved test module in a comment the comment edit itself (non-move commit)
9991466 refactor(engine): move prefs, session_settings, config, shortcuts, autosave to settings/ include_str! path in i18n/ui.rs
770e30d refactor(engine): move settings model, page types and schema to settings/prefs/*.rs CONVERTED rows in i18n/ui.rs
4a5562c refactor(engine): move layer commands to cmd/layer/*.rs super:: paths rewritten to crate::cmd::…
e590481 refactor(ui-egui): move Effect Controls panel parts to panels/effect_controls/*.rs super:: paths rewritten to crate::panels::…, signatures rewrapped after pub(super), CONVERTED rows
319d2cb refactor(ui-egui): move menu commands, dispatch, entries, shortcuts and the menu bar to menus/*.rs CONVERTED rows
f5f51f8 refactor(ui-egui): move viewer frame, geometry, gestures, shapes, tools and view parts to panels/viewer/*.rs super:: paths, signatures rewrapped after pub(super), CONVERTED rows
b7b75ed style: cargo fmt on the moved files formatting only; checked by rerunning cargo fmt --all on its parent

aiongg added 30 commits October 26, 2026 21:49
nanox333 pushed a commit to nanox333/effectcraft-fork that referenced this pull request Oct 29, 2026
The parent-space code moved to cmd/layer/parent.rs (storytold#2491); this branch's changes to it are
carried over unchanged.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RDvxCS8xcR28VArjzn1x7U
nanox333 pushed a commit to nanox333/effectcraft-fork that referenced this pull request Oct 29, 2026
The Effect Controls viewer hook moved to effect_controls/viewer.rs and the frame loop to
app/frame.rs (storytold#2491); the popup eyedropper is carried over as its own function there.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RDvxCS8xcR28VArjzn1x7U
nanox333 pushed a commit to nanox333/effectcraft-fork that referenced this pull request Oct 29, 2026
The shape-tool double-click, Cmd+W handling and their tests move to the split header, menus/invoke
and engine test modules (storytold#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
nanox333 pushed a commit to nanox333/effectcraft-fork that referenced this pull request Oct 29, 2026
lib.rs and menus.rs were split (storytold#2491): the dialog_state accessors, the undimmed canvas while a
dialog previews, and Escape-as-Cancel for the Gradient Editor and Preview move to app/window.rs,
app/frame.rs and menus/shortcuts.rs. Layer Styles' rollback keeps main's text-editor handling inside
the shared restore(). The dialog preview integration test joins the tests/it binary.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RDvxCS8xcR28VArjzn1x7U
nanox333 pushed a commit to nanox333/effectcraft-fork that referenced this pull request Oct 29, 2026
Footage.markers is added to the split footage.rs (storytold#2491); the host integration test joins the
shared tests/it binary.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RDvxCS8xcR28VArjzn1x7U
nanox333 pushed a commit to nanox333/effectcraft-fork that referenced this pull request Oct 29, 2026
output_guard joins the split engine lib.rs; the overwrite tests move to tests/render_overwrite.rs
(storytold#2491) and the regression workflow's test filter follows.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RDvxCS8xcR28VArjzn1x7U
Kaedo17 added a commit to Kaedo17/effectcraft-mobile that referenced this pull request Oct 29, 2026
storytold#2491 moved the code this PR touches: the menu-side file-dialog dispatch
lands in menus/frontend.rs beside the async-hook block it extends, the
touch widening is called from the split app/frame.rs frame, the picker's
view preference lands in the settings module split (choices, section,
document validation), and media_panels keeps main's listing while its
thumbnails go through thumbs::media. Android-only Hooks cfgs came off (the
in-app browser serves any host that sets app_files_dir), egui 0.37's
deprecated Id::new became Id::unique in the new files, and the icon grid
bundles its content into Grid to hold storytold#2496's argument limit.
Kaedo17 added a commit to Kaedo17/effectcraft-mobile that referenced this pull request Oct 29, 2026
storytold#2491 moved the code this PR touches: the menu-side file-dialog dispatch
lands in menus/frontend.rs beside the async-hook block it extends, the
touch widening is called from the split app/frame.rs frame, the picker's
view preference lands in the settings module split (choices, section,
document validation), and media_panels keeps main's listing while its
thumbnails go through thumbs::media. Android-only Hooks cfgs came off (the
in-app browser serves any host that sets app_files_dir), egui 0.37's
deprecated Id::new became Id::unique in the new files, and the icon grid
bundles its content into Grid to hold storytold#2496's argument limit.
bflatastic added a commit to nanox333/effectcraft-fork that referenced this pull request Oct 29, 2026
Kaedo17 added a commit to Kaedo17/effectcraft-mobile that referenced this pull request Oct 29, 2026
storytold#2491 moved the code this PR touches: the menu-side file-dialog dispatch
lands in menus/frontend.rs beside the async-hook block it extends, the
touch widening is called from the split app/frame.rs frame, the picker's
view preference lands in the settings module split (choices, section,
document validation), and media_panels keeps main's listing while its
thumbnails go through thumbs::media. Android-only Hooks cfgs came off (the
in-app browser serves any host that sets app_files_dir), egui 0.37's
deprecated Id::new became Id::unique in the new files, and the icon grid
bundles its content into Grid to hold storytold#2496's argument limit.
Kaedo17 added a commit to Kaedo17/effectcraft-mobile that referenced this pull request Oct 29, 2026
The stamp moved out of the monolithic lib.rs with the storytold#2491 split, and its
file-private visibility did not move with it: on Android the app's
raw_input_hook could not call it. pub(crate), found by the Android target
check this branch's aarch64 verification needs.
Kaedo17 added a commit to Kaedo17/effectcraft-mobile that referenced this pull request Oct 29, 2026
The stamp moved out of the monolithic lib.rs with the storytold#2491 split, and its
file-private visibility did not move with it: on Android the app's
raw_input_hook could not call it. pub(crate), found by the Android target
check.
vangel76 added a commit to vangel76/effectcraft that referenced this pull request Oct 29, 2026
Removes the two committed __pycache__ files under tests/fixtures/tools and ignores __pycache__.
Moves src/container/mod.rs, src/import/mod.rs and the matching integration test modules to
their parent-named files, as main does since storytold#2491 (tests/it/common/mod.rs stays, as on main).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants