Commit Graph
2543 Commits
Author SHA1 Message Date
aiongg 6d063fc9de Merge upstream main into craft-ui-docking
craft-libs crates move to one rev, 37c907d2 (contains main's craft-update and craft-docpath pins).
Docs: native floating windows are Windows, macOS and X11 only; the UI estimate drops the
multi-monitor panel work that is done.
2026-10-26 01:59:50 +00:00
Dylan M. Taylor 938289fa9d packaging(linux): name the repeated sha256 check (S1192) (#2456)
Route the four identical sha256sum checks through verify_sha256.
2026-10-25 21:56:45 -04:00
Dylan M. Taylor f31a6b0aef sonar: optional chaining (S6582) and for-of loops (S4138) in engine-owned JS (#2273)
ExtendScript .jsx files are left alone (ES3, no ?. or for-of).
2026-10-25 19:37:04 -04:00
Dylan M. Taylor 966719d449 Merge pull request #2443 from WaldemarLehner/ui/resizehorizontal-cursor-on-workarea
fix(ui-egui): make hover over workarea selector set cursor to `ResizeHorizontal`
2026-10-25 19:25:35 -04:00
Dylan M. Taylor 8395da0fd6 Merge pull request #2441 from storytold/chore/deps-safe-refresh
chore(deps): safe dependency refresh
2026-10-25 19:19:03 -04:00
Waldemar Lehner 5c875cb240 fix(ui-egui): make hover over workarea selector set cursor to ResizeHorizontal 2026-10-25 23:43:02 +01:00
skylar c16a628849 chore(deps): refresh safe dependency bumps
serde_json 1.0.154, proptest 1.12.0, objc2 0.6.5, winresource 0.1.34, pollster 1.0.1, miniz_oxide 0.9.1, linesweeper 0.5.0, lz4_flex 0.14.0, muda 0.21.2.
2026-10-25 16:36:21 -06:00
Dylan M. Taylor f35634a4ec build: pin craft-update to craft-libs main (495e597) (#2439)
Picks up the startup prompt without the glyphs a font may lack (storytold/craft-libs#343, #344): the close mark is painted and the version pill is ASCII, so apps that panic on a missing glyph no longer take the prompt down.

Part of tracking issue storytold/craft-libs#319
2026-10-25 17:55:38 -04:00
Dylan M. TaylorandCodebuff 0f7dd6f992 build: pin craft-update to craft-libs main (495e597) (#2438)
Picks up the update prompt fix that draws its close mark and version pill
without glyphs a font may lack, so the prompt no longer takes the app down
when a bundled face has no ✕ or →.

Part of tracking issue storytold/craft-libs#319

🤖 Generated with Codebuff

Co-authored-by: Codebuff <noreply@codebuff.com>
2026-10-25 17:37:19 -04:00
Dylan M. Taylor e821feeec4 Merge pull request #2274 from storytold/sonar/rust-s4325-s1612
sonar: method paths instead of closures (rust:S1612)
2026-10-25 16:36:06 -04:00
aiongg 2d27fec81d Merge upstream main into craft-ui-docking
# Conflicts:
#	Cargo.toml
#	crates/ui-egui/Cargo.toml
2026-10-25 20:00:11 +00:00
Dylan M. Taylor dbe46d3ff8 Merge pull request #2435 from dylanmtaylor/chore/craft-update-pin
build: pin craft-update to craft-libs main (db19c37)
2026-10-25 15:34:53 -04:00
Dylan M. Taylor 632162c9a7 build: pin craft-update to craft-libs main (db19c37); localize the update status messages
Picks up the fix that keeps the close request pending while the app holds unsaved work, the executable-name check in the Windows update helper, and the zip 9 / dirs-free build.

Part of tracking issue storytold/craft-libs#319
2026-10-25 15:34:22 -04:00
Dylan M. Taylor a0ea5f5ab1 Merge pull request #2420 from dylanmtaylor/feat/startup-update-prompt
feat: startup update prompt modal and direct self-updating
2026-10-25 15:01:58 -04:00
aiongg 54a7435f2b Docking: a native floating window publishes its IME descriptor after its editor or its last body
finish_ime after a body drawn before the Viewer cleared the preedit and
made the Viewer's publication a new context, so a window with another
group before the Viewer interrupted the composition every pass. Each
native window now counts its bodies from the layout and publishes once
its editor has recorded its geometry, or after its last body. A window
that drew fewer bodies than counted publishes after every body in its
next pass.
2026-10-25 18:54:11 +00:00
Dylan M. Taylor 1be30a1607 refactor(updates): drive the flow with craft-update's Updater
The check at start is opt-in for the desktop app, a successful update closes through the app's own close path, and no update starts over unsaved work.
2026-10-25 14:23:52 -04:00
aiongg 58f4a4e36a Merge upstream main into craft-ui-docking 2026-10-25 18:16:57 +00:00
aiongg 26dd2ab814 Merge #2367 (egui 0.37) into craft-ui-docking
# Conflicts:
#	Cargo.lock
#	Cargo.toml
#	apps/effectcraft/src/main.rs
#	crates/ui-egui/src/control.rs
#	crates/ui-egui/src/dock.rs
#	crates/ui-egui/src/dock_ui.rs
#	crates/ui-egui/src/lib.rs
#	crates/ui-egui/tests/it/shared_docking_ui.rs
#	crates/ui-egui/tests/it/ui_dock_resize.rs
#	crates/ui-egui/tests/it/ui_panel_windows.rs
#	crates/ui-egui/tests/it/ui_workspace_focus.rs
2026-10-25 18:06:51 +00:00
Dylan M. Taylor 6f813b74e9 refactor(updates): drive the flow with craft-update's Updater
Startup check is opt-in for the desktop app, the Windows update helper is dispatched before argument parsing, and a successful update closes through the app's own close path.
2026-10-25 13:58:39 -04:00
Dylan M. Taylor 9932ca0cf2 build: pin craft-update to the dirs-free, zip 9 build
Satisfies cargo-deny: no MPL-2.0 option-ext, no zip 8 advisories, and a versioned git dependency instead of a wildcard.
2026-10-25 13:58:38 -04:00
Dylan M. Taylor 89a0313ab0 fix(updates): report self-update results to the prompt and finish through the app's close path
Keeps the worker's failure visible instead of leaving the prompt installing, repaints while a check runs, and no longer calls process::exit past the unsaved-work prompt.
2026-10-25 13:58:38 -04:00
Dylan M. Taylor adcc3b916b feat: startup update prompt modal and direct self-updating
Integrate `craft-update` pinned to storytold/craft-libs fe61243 to check for
updates on startup, display the standard suite update modal with changelog notes,
and support one-click in-app updating and restart.

Ref: storytold/craft-libs#319
2026-10-25 13:58:38 -04:00
Dylan M. Taylor 76402b1104 Merge pull request #2367 from storytold/codex/egui-037-effectcraft-20261023
Migrate EffectCraft to egui 0.37
2026-10-25 13:57:44 -04:00
Dylan M. Taylor e88feff569 engine.batch: drop the events a rolled-back atomic batch queued
A failing atomic batch restored the project, history and state but left the
events its steps had already published, so the UI could open the comp the
rollback had just undone. Snapshot the event count with the other snapshots and
truncate before the rollback bumps.

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
2026-10-25 13:14:28 -04:00
aiongg e5bb52cc35 craft-libs: pin every crate to 5bbe9f62 (craft-libs main with every shared docking fix) 2026-10-25 16:59:58 +00:00
aiongg 2c7cd6202b Merge upstream main into craft-ui-docking 2026-10-25 16:26:06 +00:00
aiongg 6ffb7778e9 craft-libs: pin every crate to d24e4bcc (Mac round 3: docking fixes, drop previews, native floats stay visible while inactive) 2026-10-25 14:02:31 +00:00
aiongg fdc22548d1 D2: file dialog sheets go on the main window; floating OS windows are blocked while one is up
On macOS rfd put an unparented sheet on AppKit's main window, which after a
click in a floating panel's OS window is that window. With the sheet holding
the keyboard no app window was focused, so craft-ui hid the floating window,
the sheet ended without answering, and later sheets queued behind it: Save As
flashed and closed, and Cmd-S did nothing after. The commands' dialogs now
open at the end of the frame with the main window as parent (macOS; Linux's
portal dialog stays unparented). While one is up the dock area blocks
floating OS windows, as for a modal dialog, and a dialog that ends without
answering never leaves them blocked.
2026-10-25 14:01:52 +00:00
Brandon ThomasandClaude Opus 5.5 362474a843 Release 0.17.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v0.17.0
2026-10-25 09:31:11 -04:00
aiongg de86a67348 craft-libs: pin every crate to 27e60765 (a minimized floating OS window shrinks to its bar) 2026-10-25 13:29:54 +00:00
skylar taylor-barrick dec327b98a egui037: Preserve text ownership across unrelated history changes 2026-10-25 13:03:14 +01:00
skylar taylor-barrick 18206c1014 Fix text ownership after composition removal and simplify playback helpers 2026-10-25 11:40:05 +01:00
skylar taylor-barrick 57220d4d6a Fix egui 0.37 text ownership and simplify UI lifecycle handlers 2026-10-25 10:18:26 +01:00
aiongg 0061eb6d5f craft-libs: pin every crate to a042cf26 (floating windows keep their ids; native key equivalents in floating text fields) 2026-10-25 08:07:28 +00:00
skylar taylor-barrick 0a570f7ddf M0.37: include complete bundled font notices 2026-10-25 08:51:03 +01:00
aiongg 0411cb205c D3: right columns are tab-group frames split vertically; migrated native windows keep their place
- Default's right column is a short Preview frame (fixed 76 pt: tab strip and a 46 pt body)
  over a Properties frame with Align, Audio and Effects & Presets as tabs. Essential Graphics'
  right column is one Properties / Effects & Presets frame. No built-in workspace uses
  accordions, so a frame there takes tabs and Maximize acts on one frame.
- Workspace files of version 1: a column of stacked frames becomes tab groups split top to
  bottom. Each open frame keeps all its tabs and its height as a fixed size; a closed frame's
  tabs join the open frame above it.
- Version 1 stored a native panel window's outer position; craft-ui places windows by their
  content. The migrated rect moves by the main window's frame offset once the main window
  reports it, and workspaces are not saved before.
2026-10-25 06:14:43 +00:00
aiongg e80aba8572 Merge D2b: workspace migration, native windows, dialogs block floating panels 2026-10-25 05:42:26 +00:00
aiongg 3eae1747ae D2a: ui-egui integration tests use craft-ui's docking ids, labels and geometry
- Focus and traversal tests use DockArea::hit_id for tabs and dividers; the
  focus outline is checked as craft-ui draws it (inset 2 pt, accent colour)
  while the tab has keyboard focus from traversal.
- Floating resize grips are checked under craft-ui's accessibility label.
- Stack resizes compare rendered heights: craft-ui shares a stack by the
  entries' heights as proportions, so the saved heights are checked as ratios.
- Drops into a split use the side zone depth (SIDE_EDGE_ZONE_DEPTH).
- Panels that need their whole area (scroll audit, automation audit) are
  docked alone: maximizing a stacked panel maximizes its whole stack.
- ui_tabs: dragging by the panel menu button is gone (craft-ui drags by tab,
  drag bar or border); the test docks by the tab. A stacked header's -/+
  button collapses and expands, a click on a closed header opens it; a
  click on an open header no longer collapses it.
- ui_tabs (#302): a panel dropped on a stacked panel joins the stack as its
  own entry below it; craft-ui stack entries hold one panel each.
- ui_panel_focus: a reopened Composition goes back to its own index
  ([Composition, Layer]), craft-ui's restore order.
- ui_menus probes the Effect menu with Remove All, since Effect Controls
  also names a tab.
2026-10-25 05:41:47 +00:00
aiongg e89aff1e99 D2a: dock tabs carry their drawn titles as automation labels; group top borders get panel.border ids
Tab and stacked-header automation labels name what the panel shows
("Composition A"), as the tabs do. The top border above a group's tabs,
a craft-ui drag source, registers panel.border.<Panel>, which the agent
audit found without an id.
2026-10-25 05:41:47 +00:00
aiongg 38be76ddc4 D2: floating panels open in OS windows of their own on desktop; dialogs block them
craft-ui's native-windows feature is on for every non-wasm build. Keys and
dropped files from a floating window reach the main window's next frame, and
while a modal dialog is open the dock area blocks input in floating windows.
Move Panel to Main Window docks the panel again. The web, Wayland and embedded
viewports keep floating windows in the main window.
2026-10-25 05:32:15 +00:00
aiongg 3014f03a81 D2: workspace files of earlier versions migrate to craft-ui workspaces
A version 1 file (craft-libs 5c874d51) and the unversioned named-workspace record
load with every panel in place, floating groups and their native window places
kept. The first save writes the current format and keeps the earlier file as
workspaces.old.json. The fixture is a file written by upstream main.
2026-10-25 05:15:35 +00:00
aiongg 85ffe0ca1c craft-libs: pin every crate to 8a503cfe (drop targets, craft-libs#310) 2026-10-25 04:42:39 +00:00
aiongg 72dcc3b4cc D1: tests for never-placed panels and native window places; Move Panel to New Window stays in the panel menu
A panel never laid out opens at EffectCraft's default place for it; a
closed panel reopens at its recorded place. The panel menu keeps Move
Panel to New Window, which records the window's place.
2026-10-25 04:39:17 +00:00
aiongg 038e5c03bf D1: panels dock in craft-ui's shared docking; craft-libs pinned to 2869b8cc
Every craft-libs crate and the hayro-syntax and hayro-jbig2 patches are
pinned to storytold/craft-libs 2869b8cc. The workspace is a craft-ui
Workspace<PanelKind>: craft-ui draws the frames, tab strips, stacked
panels, floating windows and drop previews and owns the gestures.
EffectCraft keeps PanelKind, its built-in workspaces, the panel bodies,
the Timeline's comp tabs, viewer locks and the panel menu in each group
header, and the rule that no move or float empties the docked area.

window.dockAction applies craft-ui Actions; craft-ui's window.panel.*
commands, ui.dock and ui.dock.reset parse as DockCommand. Saved
workspaces are version 2 snapshots of craft-ui Workspaces; an earlier
file loads as the default layout and is left untouched.
2026-10-25 03:23:32 +00: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 991904888a Merge pull request #1643 from arnav-hiwarkar/fix/1641-keep-cache-outside-edit
Preview: an edit keeps the cached frames outside the layers it changes (#1641)
2026-10-24 16:27:16 -04:00
Dylan M. TaylorandClaude Sonnet 5.5 c07604563e sonar: leave the duplicated cache blocks in object_matte and roto alone (new-code duplication gate)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-24 08:45:39 +00:00
Dylan M. TaylorandClaude Sonnet 5.5 4e9fa51f12 sonar: method paths instead of closures (rust:S1612)
Poison recovery, OsStr::to_str and char predicates only; S4325 casts are
f64 to f32 and stay.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-24 08:17:16 +00:00
aiongg eb5108786b PDF: repin craft-pdf, hayro-syntax and hayro-jbig2 to craft-libs 9f75d3dc for its xref, object-stream, graphics-state and JBIG2 input bounds (#2265) 2026-10-23 23:27:29 -04:00
aiongg 1400cf7c78 Merge pull request #2264 from aiongg/contrib-batch-4
Integration batch 4: 15 contributor PRs (interface, scripting, hardening, docs)
2026-10-23 22:57:03 -04:00