S17 drop-and-load onto track FX button; S13 editor drop-accept (relay degraded)

S17: drag_out InstrumentDrop gesture + instrument_drop blob reusing the
instrument's own serializer; bank_panel FX hover-track + add-VST/vst_chunk
inject. S13 relay deferred (read-only bridge) — editor shows drop affordance.
This commit is contained in:
2026-07-27 03:52:26 -04:00
parent 06494c654e
commit 26e2bf2fc6
13 changed files with 779 additions and 54 deletions
+23 -1
View File
@@ -346,6 +346,20 @@ target_include_directories(action_buttons PUBLIC src)
add_library(drag_out STATIC src/drag_out.cpp)
target_include_directories(drag_out PUBLIC src)
# ---------------------------------------------------------------------------
# 2l') Pure instrument_drop library — NO REAPER, NO SWELL, NO VST3 SDK. The S17
# drop-and-load blob-construction core: turn the dragged capture id into the
# base64 "vst_chunk" the extension injects via TrackFX_SetNamedConfigParm so a
# freshly-added ReaSampler 9000 plays that capture. Reuses the instrument's OWN
# serializer (sample_map::serializeComponentState) — NOT a parallel byte writer —
# so the cross-artifact blob contract cannot drift; links sample_map (which pulls
# bank_book/wav_trim/sampler_core transitively) and NEITHER SDK. The round-trip
# test decodes back through the instrument's own reader. Mirror of assignment_request.
# ---------------------------------------------------------------------------
add_library(instrument_drop STATIC src/instrument_drop.cpp)
target_include_directories(instrument_drop PUBLIC src src/vst)
target_link_libraries(instrument_drop PUBLIC sample_map)
# ---------------------------------------------------------------------------
# 2m) Pure theme library — NO REAPER, NO SWELL, NO LICE. The Phase L (L1) palette
# core of the shared drawing kit: a ROLE-based color model (bg/base..warn), the
@@ -590,6 +604,13 @@ add_executable(drag_out_tests tests/test_drag_out.cpp)
target_link_libraries(drag_out_tests PRIVATE drag_out)
add_test(NAME drag_out_tests COMMAND drag_out_tests)
# instrument_drop (S17): the drop-and-load vst_chunk blob builder. The round-trip test
# decodes the base64 back through the instrument's OWN reader (deserializeComponentState) to
# prove the extension injects exactly what setState accepts — the cross-artifact contract guard.
add_executable(instrument_drop_tests tests/test_instrument_drop.cpp)
target_link_libraries(instrument_drop_tests PRIVATE instrument_drop)
add_test(NAME instrument_drop_tests COMMAND instrument_drop_tests)
add_executable(theme_tests tests/test_theme.cpp)
target_link_libraries(theme_tests PRIVATE theme)
add_test(NAME theme_tests COMMAND theme_tests)
@@ -840,6 +861,7 @@ add_library(reaper_reasampler MODULE
src/bank_book.cpp
src/owned_manifest.cpp
src/drag_out_win.cpp
src/instrument_drop_win.cpp
src/action_bar.cpp
src/footer_bar.cpp
src/overflow_menu.cpp
@@ -848,7 +870,7 @@ add_library(reaper_reasampler MODULE
src/card_meta.cpp
src/card_drag.cpp
)
target_link_libraries(reaper_reasampler PRIVATE bank_model capture_paths peaks bank_grid mode_switch tab_strip view_mode_model insert_plan render_settings batch_capture tail_control realtime_record bank_book wav_trim owned_manifest prune_reconcile prune_button app_version provenance action_buttons drag_out theme component_geometry action_bar footer_bar overflow_menu mode_enable tooltip card_meta card_drag assignment_request bank_sync)
target_link_libraries(reaper_reasampler PRIVATE bank_model capture_paths peaks bank_grid mode_switch tab_strip view_mode_model insert_plan render_settings batch_capture tail_control realtime_record bank_book wav_trim owned_manifest prune_reconcile prune_button app_version provenance action_buttons drag_out instrument_drop theme component_geometry action_bar footer_bar overflow_menu mode_enable tooltip card_meta card_drag assignment_request bank_sync)
target_include_directories(reaper_reasampler PRIVATE ${SDK_INC} ${WDL_INC})
# OUTPUT_NAME is channel-derived (Phase V, V4): "reaper_reasampler" (stable, default) or
# "reaper_reasampler_beta" (beta). REAPER dlopen's any reaper_* module, so both channels'