L2: task-grouped action bar + kit-drawn dock panel

New pure action_bar module (clusters, keybinding sub-labels, overflow, hit-test) supersedes the flat M11 strip; bank_panel chrome/buttons/tabs/grid now draw through the L1 kit by role with hover. Expose draw_kit::toLice in header to fix drawThumbnail forward-refs. CTest 27/27.
This commit is contained in:
2026-07-26 20:52:37 -04:00
parent a20cb46d65
commit 54f37be0bb
7 changed files with 1128 additions and 292 deletions
+21 -1
View File
@@ -355,6 +355,21 @@ target_include_directories(theme PUBLIC src)
add_library(component_geometry STATIC src/component_geometry.cpp)
target_include_directories(component_geometry PUBLIC src)
# ---------------------------------------------------------------------------
# 2o) Pure action_bar library — NO REAPER, NO SWELL, NO LICE. The Phase L (L2)
# dock-panel layout redesign core: the TASK-GROUPED action bar geometry that
# supersedes the flat M11 action_buttons strip for the panel's action inventory —
# clusters (capture / placement / maintenance) tile the bar at a fixed button
# width with intra/inter-cluster gaps, each button carrying a label + keybinding
# micro sub-rect, whole trailing buttons dropped (never clipped) on a narrow panel,
# and point -> flat action index hit-test. Split out so the layout + hit-test math
# is unit-tested outside the DAW; the bank_panel L1-kit draw + NamedCommandLookup/
# Main_OnCommand dispatch + kbd_getTextFromCmd query are DAW-verified. Mirror of
# mode_switch / action_buttons / prune_button.
# ---------------------------------------------------------------------------
add_library(action_bar STATIC src/action_bar.cpp)
target_include_directories(action_bar PUBLIC src)
# ---------------------------------------------------------------------------
# 3) Standalone tests for the pure modules (run without launching REAPER).
# ---------------------------------------------------------------------------
@@ -465,6 +480,10 @@ add_executable(component_geometry_tests tests/test_component_geometry.cpp)
target_link_libraries(component_geometry_tests PRIVATE component_geometry)
add_test(NAME component_geometry_tests COMMAND component_geometry_tests)
add_executable(action_bar_tests tests/test_action_bar.cpp)
target_link_libraries(action_bar_tests PRIVATE action_bar)
add_test(NAME action_bar_tests COMMAND action_bar_tests)
# ---------------------------------------------------------------------------
# 4) The REAPER extension — a loadable module (dlopen'd by REAPER, not linked).
# ---------------------------------------------------------------------------
@@ -508,8 +527,9 @@ add_library(reaper_reasampler MODULE
src/bank_book.cpp
src/owned_manifest.cpp
src/drag_out_win.cpp
src/action_bar.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)
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)
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'