The command cleared every automation lane in the selection and left the clipboard empty, so the cut could not be pasted. It now uses the same copy-and-clear path as Cut Pan Automation.
engine.execute and app.run of ui.new_tracks_dialog and ui.bounce_dialog were opening modal dialogs, so a script could not create tracks or bounce without a window. Those ids now return an error unless the menu invokes them.
Export Clips as Files wrote every clip to {name}.wav, so the second clip replaced the first. A name that is already in the destination now gets a -2, -3, … suffix.
Snap to Next and Snap to Previous ignored other selected clips when looking for a destination, so a multi-clip selection piled onto the same later clip or left the gap between the selected clips in place.
The menu bar rebuilt and leaked a fresh alias string for every mix-view section on each redraw. Those fifteen paths are now created the first time the menu catalog is asked for them.
event.tempo_stretch accepts factor or length, and the Apply button was sending end_bpm, which the command ignored. A lower end tempo lengthens the selection, so the factor is the start BPM divided by the end BPM.
The bus row called mix.bus_rename and mix.bus_delete, which are not commands, so both buttons failed. setup.io already renames and deletes a bus by name.
Ctrl+Shift+Up/Down (#76) only worked on macOS. The registry's Ctrl there
is the Mac Control key, which has no key of its own on Windows and Linux
(#20), so the keys did nothing there, while the Shortcuts window and the
command palette still showed Ctrl+Shift+Up.
Pro Tools for Windows puts these on the Start key, but egui does not
report that key off macOS, and Windows and GNOME use Win/Super+Shift+
Up/Down to resize and move windows. So off macOS the nudge is
Ctrl+Shift+Up/Down: the same keys as on the Mac and what the labels
already say. No SoundCraft shortcut uses them there; Ctrl+Up/Down without
Shift still extends the selection.
Resolve System appearance from egui on every frame and fall back to Dark when the integration cannot report a theme. Keep receiving OS changes during manual modes and apply the selected palette to both widget style branches and the current root UI.
Remove the cached detector and its unused dependency. Cover startup, live transitions, manual overrides, saved System preferences, and user colors with an application-frame regression. Add reproducible offscreen system-theme inputs and document the fallback.
* Add a selectable Light theme
* Apply the active theme to the menu bar
* Use the system theme by default
* Expose Appearance in the Setup menu
* Add Light theme screenshot
* Remove the Light theme screenshot
Repo policy keeps large binary assets out of the tree, and the PNG had no
ATTRIBUTION row.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Appearance: ui.theme command, Dark default, non-blocking system lookup
- ThemeMode derives Default with Dark as the default (fixes clippy's
derivable_impls); System and Light are opt-in. LIGHT_THEME starts false.
- New UI command `ui.theme {"mode": "system|light|dark"}` (label
"Appearance") in UI_COMMANDS; with no mode it reports the current one.
The UI Customization combo box dispatches it instead of writing state.
- The choice lives in UiState.theme, so it persists with the existing UI
prefs (ui.json) and is exposed through ui.set / ui.inspect. Restoring a
window configuration keeps the current theme.
- dark_light::detect() is only called in System mode, on a background
thread (an AtomicU8 holds the answer; dark until it arrives, then a
repaint). On the web it is the synchronous matchMedia lookup.
- theme::apply runs only when the effective palette changes, not every
frame.
- window.ui_customization keeps its catalog path (Window > UI
Customization) so parity is unchanged; Setup > Appearance still opens
it. The combo row is labelled "Theme" so it no longer repeats the title.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Light theme: move hard-coded colours to theme tokens
The Light palette left dark islands and unreadable text where colours
were Color32 literals. New tokens (Dark values are the old literals, so
the Dark theme renders pixel-identical to main):
- menu bar; toolbar group outline; edit-mode cells (no more dark block
around Shuffle/Spot/Slip/Grid); counter panel outlines, dividers and
off toggles; Smart-tool bracket
- selected rows in the Tracks/Groups/Clips lists, track-visible dot,
selected Edit track header, selected Mix strip
- marker names, alternate-playlist lanes, Universe background/outline,
Big Counter background
- meter background and clip lamp, pan knob body/ring/pointer, Mix insert
and send slots, Mix section captions
In Light, clip bodies are a paler tint and waveforms a deep shade of the
clip colour instead of black.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Light theme: instrument slot and plugin window text use the current tokens
The instrument picker (#23) landed with Tokens::DARK literals.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
---------
Co-authored-by: t <t@t>
Co-authored-by: Claude Opus 5.5 <[email protected]>
Co-authored-by: Brandon Thomas <[email protected]>