Commit Graph
511 Commits
Author SHA1 Message Date
Royce 0c19777c8a fix(ui): add Fedora font paths so DejaVu and Liberation load on Fedora (#45)
The Linux font search list in `crates/ui-egui/src/fonts.rs` covered
Debian/Ubuntu (`/usr/share/fonts/truetype/dejavu`, `/usr/share/fonts/TTF`,
`/usr/share/fonts/dejavu`) and Arch (`/usr/local/share/fonts/dejavu`)
for DejaVu, and a single path for Liberation Sans. It did not cover
Fedora's package layout:

- `/usr/share/fonts/dejavu-sans-fonts/DejaVuSans.ttf` (and -Bold)
- `/usr/share/fonts/liberation-sans-fonts/LiberationSans-Regular.ttf`

On Fedora, neither path matched, the `load_from_fontconfig` path returned
None (e.g. the user only has Liberation Sans installed, not DejaVu), and
the UI fell back to egui's built-in fonts. Those don't cover the menu
glyphs (`→ ▸ ▾ ♯ ✕`), so the symbols showed as empty boxes.

Add the two Fedora paths to the REGULAR and BOLD candidates, in the same
order as the existing Debian and Arch paths. `load` still tries
fontconfig first; the direct paths are the fallback.

cargo test -p soundcraft-ui-egui: 105 passed, 0 failed.
2026-10-13 22:50:49 +08:00
Brandon Thomas c0cb993408 Merge pull request #413 from mikkelkonyher/checkbox-drag
Drag across checkboxes to check or uncheck several (#399)
2026-10-13 06:54:02 -04:00
Brandon Thomas cf755b8cd2 Merge pull request #410 from Silvertree2010/fix/instrument-params-render
Engine: mix.instrument takes the instrument's parameters and refuses unknown fields (#265)
2026-10-13 06:53:58 -04:00
Brandon Thomas 9ad9eb88e4 Merge pull request #408 from Silvertree2010/fix/bus-bounce-aux-latency
Mix: a bus bounce compensates the aux returns onto it (#246)
2026-10-13 06:53:54 -04:00
Brandon Thomas fca728501f Merge pull request #409 from Silvertree2010/fix/master-insert-latency
Mix: delay compensation covers the master faders' inserts (#351)
2026-10-13 06:53:50 -04:00
Brandon Thomas 55eff096ac Merge pull request #417 from Momentum96/fix/hangul-ui-fallback
Fall back to a system Hangul font so Korean names render in the UI
2026-10-13 06:53:46 -04:00
Brandon Thomas c2788c50d4 Merge pull request #415 from grovebit/tab-to-transient
Tab to Transient: every selected track, Alt+Tab back, Shift+Tab extends
2026-10-13 06:53:42 -04:00
Brandon Thomas fe573bb31f Merge pull request #416 from grovebit/transient-detection
Transient detection: find quiet and legato onsets, place them on the attack
2026-10-13 06:53:38 -04:00
Brandon Thomas 87db8f4048 Merge pull request #414 from grovebit/midi-double-click
Double-click a MIDI clip with the Grabber to open it in the MIDI Editor
2026-10-13 06:53:33 -04:00
Brandon Thomas ddb874e399 Merge pull request #407 from vbasky/fix/midi-editor-tool-insertion
Require the Pencil tool to insert MIDI notes
2026-10-13 06:53:29 -04:00
Brandon ThomasandClaude Opus 5.5 f4ed9919e6 Merge main into #413
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 06:46:08 -04:00
Brandon ThomasandClaude Opus 5.5 b32d7bd926 Merge main into #410; put the mix.instrument note in the Instruments row's 'have' cell
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 06:45:33 -04:00
Brandon ThomasandClaude Opus 5.5 14862a5139 Merge main into #408
render_bus moved into RangeRender (#393); the bus-latency fix now applies there.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 06:45:20 -04:00
Brandon Thomas 6d4f9a41a5 Merge main into #409
# Conflicts:
#	ROADMAP.md
#	docs/architecture.md
2026-10-13 06:44:55 -04:00
Brandon Thomas a96cf50a3a Merge pull request #380 from grovebit/controls-look
Draw faders and meters more like Pro Tools
2026-10-13 06:38:28 -04:00
Momentum96 49abc39806 Fall back to a system Hangul font so Korean names render in the UI
No UI font family had Hangul, so Korean session, file, track and clip names drew as boxes in every interface language. Following the guidance on #141 (system fonts at runtime, nothing bundled), borrow an installed Korean face (fontconfig lang=ko, Apple SD Gothic Neo, Malgun Gothic, Noto Sans CJK KR, NanumGothic) and append it to every family.
2026-10-13 19:34:21 +09:00
Brandon Thomas afa850d697 Merge main into #319
# Conflicts:
#	ROADMAP.md
2026-10-13 06:32:14 -04:00
Brandon Thomas 844830bf6f Merge main into #322
# Conflicts:
#	ROADMAP.md
2026-10-13 06:31:36 -04:00
Brandon Thomas acbc3411e5 Merge pull request #334 from scottcampbelldata/sampler-ui
Sampler UI: load samples, waveform with loop points, instrument sliders
2026-10-13 06:31:27 -04:00
Brandon Thomas 13316cf60e Merge pull request #315 from Limestudio90/plugin-editors-windows
Plugin editor windows on Windows (VST3 and embedded CLAP)
2026-10-13 06:31:24 -04:00
Brandon Thomas 9176296e96 Merge pull request #390 from woodgrain816/open-recent
File › Open Recent: the last 10 sessions, newest first
2026-10-13 06:31:20 -04:00
Brandon Thomas 18dcb7b870 Merge pull request #219 from Jafz2001/feat/routing-folders
Complete routing folder management
2026-10-13 06:31:16 -04:00
Brandon Thomas 58a0482712 Merge pull request #335 from reoniazx/fix/fade-drag-waveform-preview
Fix clip fade editing and add live waveform previews
2026-10-13 06:31:12 -04:00
Brandon Thomas 751a5755cb Merge pull request #338 from grovebit/menu-search
Type to search as soon as a plugin or bus menu opens
2026-10-13 06:31:05 -04:00
Brandon Thomas 430c6a9e4e Merge pull request #332 from grovebit/corrupt-sessions
Keep corrupt sessions and imports from hanging, crashing or filling memory
2026-10-13 06:31:01 -04:00
Brandon Thomas cc1bf5a62d Merge pull request #296 from grovebit/new-midi-clip
Create MIDI clips with the Pencil, Consolidate and the MIDI Editor
2026-10-13 06:30:57 -04:00
Brandon Thomas 123ae65e2b Merge pull request #306 from grovebit/plugin-safety
Plugin safety: read plugin state off the audio thread, keep refused settings, contain NaN plugins
2026-10-13 06:30:53 -04:00
Brandon Thomas 5b824e46c8 Merge pull request #209 from grovebit/zoom-toggle
Zoom Toggle: E zooms in on the edit selection and back out, as in Pro Tools
2026-10-13 06:30:49 -04:00
Brandon Thomas d438c753e1 Merge pull request #360 from grovebit/session-copies
Share the session with the UI instead of copying it every frame
2026-10-13 06:30:45 -04:00
Brandon Thomas 69aea8fad3 Merge pull request #384 from grovebit/track-height-drag
Track height: resize live while dragging, Pro Tools modifiers and Ctrl+Up/Down
2026-10-13 06:30:40 -04:00
Brandon Thomas 768629a8ce Merge pull request #365 from grovebit/edit-modes
Make the Shuffle, Slip, Spot and Grid edit modes work like Pro Tools
2026-10-13 06:30:33 -04:00
Brandon Thomas a8594684a1 Merge pull request #393 from grovebit/bounce-streaming
Stream bounces to disk and keep the app responsive while bouncing
2026-10-13 06:30:29 -04:00
Brandon ThomasandClaude Opus 5.5 e65a66c539 Keep one build_input after merging #319's latest (the guarded one with device-loss detection)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 06:27:17 -04:00
Brandon ThomasandClaude Opus 5.5 baea184bd1 Keep one VST3 controller-sync path after merging #306's latest
The landing branch already syncs host-set values to the controller before
saving state (lock-free atomics + EditorLink::sync_param); the PR's later
ControllerPending table did the same, so keep one. Keeps the PR's new
'a loaded state replaces earlier edits' assertion, which passes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 06:26:54 -04:00
Brandon Thomas 94390f49fa Merge #319's latest into the landing branch 2026-10-13 06:25:57 -04:00
Brandon Thomas 0c30ecffcc Merge #367's latest into the landing branch 2026-10-13 06:25:56 -04:00
Brandon Thomas 7a6df4cbbd Merge #306's latest into the landing branch 2026-10-13 06:25:56 -04:00
Brandon Thomas c2f052715d Merge main into #319 2026-10-13 06:16:54 -04:00
Brandon Thomas edd1787353 Merge main into #322 2026-10-13 06:13:17 -04:00
Brandon ThomasandClaude Opus 5.5 bec0cca48d Fix build after merging main into #334
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 06:12:51 -04:00
Brandon Thomas 00faedcbd0 Merge main into #334 2026-10-13 06:09:17 -04:00
Brandon Thomas b0daf3213e Merge main into #315 2026-10-13 06:08:18 -04:00
grovebit 2895fa7dd0 Merge origin/main into plugin-transport-midi
#304's MIDI Track Offset shifts the block schedule_notes reads, which
now carries this branch's controllers too. chase_controllers takes the
same offset, so a seek chases the controller values in effect where the
offset puts the track, not at the raw transport position. New test: with
the track 0.5 s late, starting at 1.25 s chases the sustain pedal still
down (without the offset it sent the pedal-up that only plays at 1.5 s).

Also: reset() sets the chase flag beside #301's alignment flush, the
VST3 Instance keeps #400's set_normalized beside midi_mapping, and the
mix tests keep #210's Keys plugin beside this branch's Clock and Ears.
2026-10-13 11:06:09 +01:00
Brandon Thomas 5686d61f45 Merge main into #390 2026-10-13 06:04:00 -04:00
Brandon Thomas 82eff0f561 Merge main into #219 2026-10-13 06:01:05 -04:00
Brandon ThomasandClaude Opus 5.5 6409a8cbbd Fix build after merging main into #335
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 06:00:30 -04:00
grovebit 776a7af06c Merge origin/main into plugin-safety
#400 (fixes #257) made Vst3Plugin::save_state tell the edit controller
the values the host set before taking the snapshot. This branch reads
plugin state on the UI thread through EditorLink instead, and removes
Vst3Plugin::save_state, so keeping its side of that conflict would have
dropped the fix.

The values now wait in a ControllerPending table shared by the instance
and its EditorLink: one AtomicU64 slot per parameter, which set_param
fills on the audio thread without locking or allocating.
EditorLink::save_state sends the waiting values with setParamNormalized
under its lock, before it reads the controller's state. A state load
clears them, as #400's refresh did. Instance::set_normalized, which only
the old save_state used, is gone. #400's round-trip test passes, plus a
check that a loaded state replaces earlier host edits.

#327's a_new_instance_replaces_a_matching_one_in_its_slot told the two
instances apart through MixEngine::capture_states, which this branch
removes (states are read on the UI thread). The two instances now
differ in gain instead (-6 and -20 dB), and the test checks that the new
level plays and that the old instance is retired.

Also: Side::new sets #210's old_sessions field.
2026-10-13 10:58:07 +01:00
grovebit 46bef836a3 Merge remote-tracking branch 'origin/main' into controls-look
# Conflicts:
#	crates/ui-egui/src/mix_window.rs
#	crates/ui-egui/src/widgets.rs
2026-10-13 10:56:01 +01:00
Brandon Thomas e0deb3f4e5 Merge main into #335 2026-10-13 05:55:06 -04:00
Brandon Thomas bae80849dd Merge main into #338 2026-10-13 05:51:51 -04:00