Phase S FB1 (r11): Sample-view recomposition — knob deck + elastic full-width hero + curve popup w/ right-click delete + post-mixer master gain (ComponentState v8)

This commit is contained in:
2026-07-27 23:08:04 -04:00
parent 27b2661ef2
commit 43155cf320
17 changed files with 1942 additions and 324 deletions
+46 -2
View File
@@ -712,7 +712,9 @@ target_link_libraries(embed_strip PUBLIC editor_geometry)
# calls these; the process callback stays allocation-free.
add_library(sample_map STATIC src/vst/sample_map.cpp)
target_include_directories(sample_map PUBLIC src/vst src)
target_link_libraries(sample_map PUBLIC bank_book wav_trim sampler_core)
# master_gain: the v8 component-state master-gain field validates against the pure taper's
# linear cap at the (de)serialization boundary (one cap, shared with the knob + the processor).
target_link_libraries(sample_map PUBLIC bank_book wav_trim sampler_core master_gain)
# capture_browser (Phase S10) — PURE card-grid + bank-filter-tab layout + hit-test for the
# capture-first editor's default face. The mirror of mode_switch/editor_geometry: the fiddly
@@ -801,6 +803,29 @@ add_library(envelope_edit STATIC src/vst/envelope_edit.cpp)
target_include_directories(envelope_edit PUBLIC src/vst)
target_link_libraries(envelope_edit PUBLIC envelope_overlay)
# knob_deck (Wave B FB1, r11) — PURE knob-deck layout + hit-test for the recomposed Sample face:
# fenced groups (caption row + compact caption toggles + fixed 48x58 knob cells + optional row
# toggle), deterministic whole-group wrap, point -> control-id hit-test. The mirror of
# action_bar / param_slider; links editor_geometry for the shared Rect. Engine-free — cells and
# toggles carry opaque shell-owned control ids. NEITHER SDK.
add_library(knob_deck STATIC src/vst/knob_deck.cpp)
target_include_directories(knob_deck PUBLIC src/vst)
target_link_libraries(knob_deck PUBLIC editor_geometry)
# curve_popup (Wave B FB1, r11) — PURE centered-sheet geometry for the velocity-curve popup
# editor: size clamps (60%/55% of window, 360..520 x 260..380), title row + close button, the
# curve-box border rect, and the outside-sheet dismissal test. The mirror of overflow_menu;
# links editor_geometry for the shared Rect. NEITHER SDK.
add_library(curve_popup STATIC src/vst/curve_popup.cpp)
target_include_directories(curve_popup PUBLIC src/vst)
target_link_libraries(curve_popup PUBLIC editor_geometry)
# master_gain (Wave B FB1) — PURE dB<->linear<->knob-taper math for the post-mixer master gain
# (-inf..+24 dB; norm 0 = TRUE zero linear). One formula shared by the editor's Gain knob, the
# v8 component-state wire cap, and the processor's applied gain. Standard library only. NEITHER SDK.
add_library(master_gain STATIC src/vst/master_gain.cpp)
target_include_directories(master_gain PUBLIC src/vst)
add_executable(editor_geometry_tests tests/test_editor_geometry.cpp)
target_link_libraries(editor_geometry_tests PRIVATE editor_geometry)
add_test(NAME editor_geometry_tests COMMAND editor_geometry_tests)
@@ -875,6 +900,21 @@ add_executable(envelope_edit_tests tests/test_envelope_edit.cpp)
target_link_libraries(envelope_edit_tests PRIVATE envelope_edit)
add_test(NAME envelope_edit_tests COMMAND envelope_edit_tests)
# knob_deck (Wave B FB1): the pure r11 deck layout/wrap/hit-test. Links ONLY knob_deck — NEITHER SDK.
add_executable(knob_deck_tests tests/test_knob_deck.cpp)
target_link_libraries(knob_deck_tests PRIVATE knob_deck)
add_test(NAME knob_deck_tests COMMAND knob_deck_tests)
# curve_popup (Wave B FB1): the pure r11 popup-sheet geometry at the size clamps. NEITHER SDK.
add_executable(curve_popup_tests tests/test_curve_popup.cpp)
target_link_libraries(curve_popup_tests PRIVATE curve_popup)
add_test(NAME curve_popup_tests COMMAND curve_popup_tests)
# master_gain (Wave B FB1): the pure dB<->linear<->knob taper. NEITHER SDK.
add_executable(master_gain_tests tests/test_master_gain.cpp)
target_link_libraries(master_gain_tests PRIVATE master_gain)
add_test(NAME master_gain_tests COMMAND master_gain_tests)
# ---------------------------------------------------------------------------
# 4) The REAPER extension — a loadable module (dlopen'd by REAPER, not linked).
# ---------------------------------------------------------------------------
@@ -1081,10 +1121,14 @@ if(WIN32 AND EXISTS "${VST3_SDK}/public.sdk/source/main/pluginfactory.cpp")
# and the node hit-test + pixel-delta -> clamped-param inverse map the Sample-view envelope
# overlay draws + drags against; envelope_edit links envelope_overlay transitively (shared
# node vocabulary + timeToX/levelToY). Both engine-free, DAW-verified in the shell.
# knob_deck + curve_popup + master_gain (Wave B FB1, r11): the pure deck layout/hit-test,
# the curve-popup sheet geometry, and the master-gain taper the recomposed Sample face
# draws + routes against (master_gain also rides in via sample_map for the v8 wire cap).
target_link_libraries(reasampler_vst PRIVATE vst3_sdk editor_geometry bridge_marshal
sample_map capture_paths embed_strip app_version capture_browser keyboard_strip
waveform_view bank_sync browser_scroll note_entry param_slider
theme component_geometry bank_grid trigger_seam envelope_overlay envelope_edit)
theme component_geometry bank_grid trigger_seam envelope_overlay envelope_edit
knob_deck curve_popup master_gain)
# SDK_INC gives reaper_vst3_interfaces.h + reaper_plugin_functions.h for the bridge;
# WDL_INC gives LICE for the editor. The VST3 SDK headers come from vst3_sdk PUBLIC.
target_include_directories(reasampler_vst PRIVATE ${SDK_INC} ${WDL_INC})