Ψ-W1-T4: resolve drop targets per move, not once — every surface gets a defined outcome, a cue, and no silent no-op

This commit is contained in:
2026-08-01 19:43:37 -04:00
parent 8bf6841f7b
commit fe3ac79ab5
17 changed files with 842 additions and 398 deletions
+9 -4
View File
@@ -87,11 +87,16 @@ DropOutcome decideDropOutcome(const DropAttempt& attempt) {
return out;
}
bool infoNamesFxHotspot(const std::string& info) {
// See the header contract for the prefix rule and the embed-strip exclusion.
ui::ReaperSurface classifyReaperSurface(const std::string& info, bool haveTrack) {
// See the header contract for the prefix rule and the ordering it depends on.
auto startsWith = [&info](const char* p) { return info.rfind(p, 0) == 0; };
if (startsWith("tcp.fxembed") || startsWith("mcp.fxembed")) return false;
return startsWith("fx_") || startsWith("tcp.fx") || startsWith("mcp.fx");
if (info.empty()) return haveTrack ? ui::ReaperSurface::Other : ui::ReaperSurface::OffReaper;
if (startsWith("tcp.fxembed") || startsWith("mcp.fxembed")) return ui::ReaperSurface::FxEmbed;
if (startsWith("fx_")) return ui::ReaperSurface::FxSurface;
if (startsWith("tcp") || startsWith("mcp")) return ui::ReaperSurface::TrackPanel;
if (startsWith("arrange")) return ui::ReaperSurface::Arrange;
return ui::ReaperSurface::Other;
}
} // namespace reasampler::wire