Revert "Added an alternative GUI based on JUCE; I like FLTK more..."

This reverts commit cd2f87a8b3.
This commit is contained in:
Johannes Findeisen 2026-11-06 23:22:44 +01:00
commit d6e46f67d7
58 changed files with 10 additions and 11136 deletions

View file

@ -11,8 +11,7 @@ the graph editor is an advanced view of the same project.
## Layers
1. **C++ GUI:** input, drawing, windows, view state. FLTK is the default;
`src/gui/JUCE` is an independently optional JUCE frontend using the same C API.
1. **FLTK/C++ GUI:** input, drawing, windows, view state.
2. **C core:** project model, commands, parameters, persistence, validation.
3. **C engine:** prepared processing graph, DSP, transport timing, event
delivery.
@ -219,16 +218,3 @@ files; unsupported native saves preserve files. See NATIVE_API.md and decision
0008. Release tooling lives outside the runtime, with source manifests,
deterministic exports and staged installation/consumer checks. See RELEASING.md
for reproducibility scope.
## JUCE frontend ownership
The optional `xtc-juce` application ports the complete retained GUI command
structure under `src/gui/JUCE`, without linking FLTK. `ui.*` supplies JUCE
components, native controls, graphics, event dispatch, timers, scrolling and
dialogs while preserving the original C-facing command boundaries. The master
sequencer owns JUCE ruler/track groups; tracks own header, instrument, clip and
velocity components. Group ownership, borrowed indexes, immutable copied C
metadata and deferred deletion follow the same rules as the FLTK frontend.
JUCE renders overlays after child components and routes callbacks on the message
thread. The audio backend and callbacks remain in C. See the
[JUCE source map](../src/gui/JUCE/README.md#components-and-maintenance).

View file

@ -79,7 +79,6 @@ lists, dependencies, SDK and packaging rules in CMake.
| Cache option | Default | Meaning |
| --- | --- | --- |
| `BUILD_TESTING` | `ON` | Build/register the test suite |
| `XTC_BUILD_JUCE_GUI` | `OFF` | Build the JUCE workstation frontend (`xtc-juce`), independently of FLTK; requires `XTC_JUCE_ROOT` |
| `XTC_BUILD_GUI` | `ON` | Discover FLTK and build the application when available |
| `XTC_WITH_JACK` | `ON` | Discover/build the JACK/PipeWire backend |
| `XTC_WITH_LADSPA` | `ON` | Enable LADSPA when the system header exists |
@ -192,21 +191,3 @@ Clean products with `cmake --build build --target clean`; to discard the cache,
remove only the selected build directory. Never configure in the source tree.
Historical validation entries in ROADMAP describe the build used at that time;
Phase 108 records the CMake migration and its verified results.
## Optional JUCE workstation frontend
See [src/gui/JUCE/README.md](../src/gui/JUCE/README.md) for the component map and
licence requirements. The SDK is supplied by the user; no download occurs.
```sh
cmake -S . -B build/juce-gui -DCMAKE_BUILD_TYPE=Debug \
-DXTC_BUILD_GUI=OFF -DXTC_BUILD_JUCE_GUI=ON -DXTC_JUCE_ROOT=/path/to/JUCE
cmake --build build/juce-gui --parallel 4 --target xtc-juce test_juce_gui
./build/juce-gui/xtc-juce examples/projects/playback-test.xtc
ctest --test-dir build/juce-gui -R juce-gui --output-on-failure -j1
```
`XTC_BUILD_GUI=ON` builds both frontends. `XTC_BUILD_JUCE` continues to mean
JUCE plugin/processor examples and can be enabled independently or alongside
the workstation frontend. A missing SDK is a configuration error only when a
JUCE option is enabled. The existing default FLTK build is unchanged.

View file

@ -1,10 +1,6 @@
# GUI Guidelines
The default frontend uses FLTK/C++ for windows, menus, dialogs, and the event loop.
An optional JUCE port is available under `src/gui/JUCE`; build `xtc-juce` with
`XTC_BUILD_JUCE_GUI=ON` and an external `XTC_JUCE_ROOT`. Both frontends can be
built together and use the same project files and C API. See
[JUCE build and component details](../src/gui/JUCE/README.md). Keep all audio
Use FLTK/C++ for windows, menus, dialogs, and the event loop. Keep all audio
engine and project-domain logic in C.
Main views:

View file

@ -1,8 +1,7 @@
# JUCE integration
# JUCE integration (Phase 107)
JUCE supplies an [optional workstation frontend](../src/gui/JUCE/README.md)
(`XTC_BUILD_JUCE_GUI`) as well as runnable plugin examples (`XTC_BUILD_JUCE`)
alongside xtc's C99 engine and FLTK application. The two options are independent. It is an external SDK dependency, not vendored, fetched, linked by
JUCE is used by optional, runnable examples alongside xtc's C99 engine and FLTK
application. It is an external SDK dependency, not vendored, fetched, linked by
normal builds or automatically installed. The integration uses:
| JUCE capability | Implemented use |

View file

@ -79,11 +79,3 @@ repository code; no Steinberg VST2 SDK or third-party plugin is bundled. Hosting
an installed binary is distinct from SDK, trademark and plugin redistribution
rights. Review those separately for any proposed distribution. Source archives
retain upstream notices; binary installs also ship both header licenses.
## Optional JUCE workstation frontend
`XTC_BUILD_JUCE_GUI` links the user-supplied JUCE SDK under its AGPLv3 or
commercial licence. It is off by default and separate from the MIT C core and
FLTK frontend. No SDK source is copied into this repository or downloaded by
normal configuration. Review the supplied SDK's licence and its graphics/text
dependencies when distributing `xtc-juce`. See [the frontend guide](../src/gui/JUCE/README.md).

View file

@ -3739,47 +3739,6 @@ Play/Stop/Space/stereo check also passed. See the integration-test guide for com
---
## Phase 113 — Optional JUCE workstation frontend
### Tasks and acceptance criteria
- [x] Preserve the FLTK sources and default build; add an independently optional
`XTC_BUILD_JUCE_GUI` workstation under `src/gui/JUCE`.
- [x] Require a user-supplied SDK through `XTC_JUCE_ROOT`, with an explicit error
when enabled without the SDK and no SDK discovery/download in normal builds.
- [x] Port the main window, sequencer/master and child views, graph, mixer,
automation, piano roll, velocity editing, sample editor, plugin dialogs,
insert chains, preferences, searchable commands and support widgets.
- [x] Use JUCE components, controls, graphics, native events, dialogs and timers;
keep project/history/DSP/backend/plugin APIs in C and preserve `.xtc` files.
- [x] Allow JUCE-only, FLTK-only, both and core-only configurations; share the
externally supplied SDK with the independently optional plugin examples.
- [x] Include the JUCE binary in the owned install/uninstall inventory when selected.
- [x] Pass the retained GUI regression workflows against JUCE, including failure
rollback, child ownership, gestures, preferences and MIDI device fallback.
- [x] Verify native JUCE transport events and finite stereo playback with the
bundled test song and missing saved MIDI devices.
- [x] Validate the original FLTK build/tests and document final build results.
### Implementation notes
The frontend retains the original C-facing command structure and filenames.
`ui.*` maps the retained coordinates and callback conventions to JUCE, with no
FLTK headers or runtime dependency. Native controls may look different. Both
frontends continue to use the existing JACK/PipeWire backend. See the
[frontend source and build guide](../src/gui/JUCE/README.md).
JUCE is an optional external AGPLv3/commercial SDK; normal builds do not link it.
Qualification is for Linux, rather than a new cross-platform audio backend.
The original 57 FLTK/core tests, core-only build, missing-SDK diagnostic, shared
SDK configuration and staged install/uninstall checks passed. The frontend was
built with warnings enabled against external JUCE 8.0.15. Native Play/Stop/Space,
expanded track rendering and finite stereo playback passed with missing saved
MIDI devices. All 12 JUCE GUI workflows passed, with focused reruns after the
native focus/blur adjustments. The [workstation capture](../screenshots/juce-workstation.png)
comes from this real-backend regression, with no physical routes changed.
---
## Recommended Execution Order
Reorder the phases when the audit reveals a blocking dependency. Do not mark a