Q-W1 code-review follow-ups: restore 104 trailing newlines, relocate reasampler_uid.h to core/wire, drop ext_keys namespaces shim, add slot_map_tests, golden serialize literals for 4 modules, namespaces.h/pragma-once ordering sweep. 60/60 green.
This commit is contained in:
+17
-2
@@ -249,6 +249,16 @@ target_include_directories(tail_control PUBLIC src)
|
||||
target_link_libraries(tail_control PUBLIC render_settings)
|
||||
target_link_libraries(tail_control PRIVATE json)
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 2g''') Pure slot_map library — NO REAPER, NO SWELL. The L7 gap-preserving
|
||||
# display-position carrier for one bank (extracted from bank_book, Q-W1
|
||||
# T4-05): sample id -> slot, gap-preserving append/remove/reorder/reconcile,
|
||||
# JSON round-trip. Mirror of bank_model; wrapped (not merged) by bank_book.
|
||||
# ---------------------------------------------------------------------------
|
||||
add_library(slot_map STATIC src/core/model/slot_map.cpp)
|
||||
target_include_directories(slot_map PUBLIC src)
|
||||
target_link_libraries(slot_map PRIVATE json)
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 2g') Pure bank_book library — NO REAPER, NO SWELL. The multi-bank phase heart
|
||||
# (Phase B1): an ordered registry of banks (pool seeded as bank-zero + named
|
||||
@@ -257,9 +267,10 @@ target_link_libraries(tail_control PRIVATE json)
|
||||
# sample between banks, JSON round-trip + legacy-bank_index→pool migration.
|
||||
# Mirror of bank_model / view_mode_model; wraps BankIndex (bank_model untouched).
|
||||
# ---------------------------------------------------------------------------
|
||||
add_library(bank_book STATIC src/core/model/bank_book.cpp src/core/model/slot_map.cpp)
|
||||
add_library(bank_book STATIC src/core/model/bank_book.cpp)
|
||||
target_include_directories(bank_book PUBLIC src)
|
||||
target_link_libraries(bank_book PUBLIC bank_model)
|
||||
target_link_libraries(bank_book PUBLIC slot_map)
|
||||
target_link_libraries(bank_book PRIVATE json)
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
@@ -404,7 +415,7 @@ target_include_directories(drag_out PUBLIC src)
|
||||
# parallel byte writer — so the cross-artifact contract cannot drift; links
|
||||
# sample_map (which pulls bank_book/wav_trim/sampler_core transitively) and
|
||||
# NEITHER SDK. The class-ID string derives from the FROZEN UID macros
|
||||
# (src/shell/instrument/reasampler_uid.h, SDK-free), channel-selected via the generated
|
||||
# (src/core/wire/reasampler_uid.h, SDK-free), channel-selected via the generated
|
||||
# version header — hence the generated include dir. The round-trip test parses
|
||||
# the container and decodes back through the instrument's own reader. Mirror of
|
||||
# assignment_request.
|
||||
@@ -645,6 +656,10 @@ add_executable(bank_book_tests tests/test_bank_book.cpp)
|
||||
target_link_libraries(bank_book_tests PRIVATE bank_book)
|
||||
add_test(NAME bank_book_tests COMMAND bank_book_tests)
|
||||
|
||||
add_executable(slot_map_tests tests/test_slot_map.cpp)
|
||||
target_link_libraries(slot_map_tests PRIVATE slot_map json)
|
||||
add_test(NAME slot_map_tests COMMAND slot_map_tests)
|
||||
|
||||
add_executable(wav_trim_tests tests/test_wav_trim.cpp)
|
||||
target_link_libraries(wav_trim_tests PRIVATE wav_trim)
|
||||
add_test(NAME wav_trim_tests COMMAND wav_trim_tests)
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
#include "core/namespaces.h"
|
||||
#pragma once
|
||||
#include "core/namespaces.h"
|
||||
// actions — the Design View action family (Phase D4). Registers the bindable
|
||||
// actions that drive the mode workflow and wires them end-to-end: toggle/activate
|
||||
// a mode, tag/untag/show-both the current track selection. Each action mutates the
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
#include "core/namespaces.h"
|
||||
#pragma once
|
||||
#include "core/namespaces.h"
|
||||
// bank_panel — the docked grid window (M5, Wave A). REAPER-facing shell: it owns
|
||||
// a SWELL dialog docked via DockWindowAddEx, and paints the current project's
|
||||
// bank as a grid of LICE-drawn waveform thumbnails. The panel itself NEVER inserts
|
||||
|
||||
@@ -123,4 +123,4 @@ std::size_t lastFrameAboveThreshold(const std::vector<AudioSample>& interleaved,
|
||||
return kNoFrameAboveThreshold;
|
||||
}
|
||||
|
||||
} // namespace reasampler::audio
|
||||
} // namespace reasampler::audio
|
||||
|
||||
@@ -119,4 +119,4 @@ std::size_t lastFrameAboveThreshold(const std::vector<AudioSample>& interleaved,
|
||||
std::size_t frameCount,
|
||||
AudioSample linearThreshold);
|
||||
|
||||
} // namespace reasampler::audio
|
||||
} // namespace reasampler::audio
|
||||
|
||||
@@ -73,4 +73,4 @@ std::string BatchOutcome::summaryLine(const std::string& noun) const {
|
||||
return line;
|
||||
}
|
||||
|
||||
} // namespace reasampler::capture
|
||||
} // namespace reasampler::capture
|
||||
|
||||
@@ -97,4 +97,4 @@ private:
|
||||
std::vector<BatchUnitResult> results_;
|
||||
};
|
||||
|
||||
} // namespace reasampler::capture
|
||||
} // namespace reasampler::capture
|
||||
|
||||
@@ -284,4 +284,4 @@ ProjectTransition classifyProjectTransition(bool sameProjectObject,
|
||||
return ProjectTransition::NoOp;
|
||||
}
|
||||
|
||||
} // namespace reasampler::capture
|
||||
} // namespace reasampler::capture
|
||||
|
||||
@@ -212,4 +212,4 @@ ProjectTransition classifyProjectTransition(bool sameProjectObject,
|
||||
const std::string& currentGuid,
|
||||
const std::string& currentPath);
|
||||
|
||||
} // namespace reasampler::capture
|
||||
} // namespace reasampler::capture
|
||||
|
||||
@@ -46,4 +46,4 @@ int computeInsertMode(const InsertOptions& opts) {
|
||||
return mode;
|
||||
}
|
||||
|
||||
} // namespace reasampler::capture
|
||||
} // namespace reasampler::capture
|
||||
|
||||
@@ -72,4 +72,4 @@ int computeInsertMode(const InsertOptions& opts);
|
||||
// any computed mode (the "no silent time-stretch" invariant, made checkable).
|
||||
inline constexpr int kStretchToTimeSelBit = 4;
|
||||
|
||||
} // namespace reasampler::capture
|
||||
} // namespace reasampler::capture
|
||||
|
||||
@@ -124,4 +124,4 @@ bool isTerminalPhase(RecordPhase phase) {
|
||||
return phase == RecordPhase::Done || phase == RecordPhase::Failed;
|
||||
}
|
||||
|
||||
} // namespace reasampler::capture
|
||||
} // namespace reasampler::capture
|
||||
|
||||
@@ -235,4 +235,4 @@ bool isStopRequested(RecordPhase phase);
|
||||
// Only Done and Failed are terminal; Recording and Finalizing are live.
|
||||
bool isTerminalPhase(RecordPhase phase);
|
||||
|
||||
} // namespace reasampler::capture
|
||||
} // namespace reasampler::capture
|
||||
|
||||
@@ -221,4 +221,4 @@ const std::vector<CaptureActionDef>& captureActionTable() {
|
||||
return table;
|
||||
}
|
||||
|
||||
} // namespace reasampler::capture
|
||||
} // namespace reasampler::capture
|
||||
|
||||
@@ -262,4 +262,4 @@ struct CaptureActionDef {
|
||||
// capture applies is read from the docked-panel setting, not baked into the row.
|
||||
const std::vector<CaptureActionDef>& captureActionTable();
|
||||
|
||||
} // namespace reasampler::capture
|
||||
} // namespace reasampler::capture
|
||||
|
||||
@@ -128,4 +128,4 @@ std::optional<TailSetting> deserializeTailSetting(const std::string& blob) {
|
||||
return out;
|
||||
}
|
||||
|
||||
} // namespace reasampler::capture
|
||||
} // namespace reasampler::capture
|
||||
|
||||
@@ -67,4 +67,4 @@ std::string tailToggleLabel(const TailSetting& setting);
|
||||
std::string serializeTailSetting(const TailSetting& setting);
|
||||
std::optional<TailSetting> deserializeTailSetting(const std::string& json);
|
||||
|
||||
} // namespace reasampler::capture
|
||||
} // namespace reasampler::capture
|
||||
|
||||
@@ -157,4 +157,4 @@ WavTruncatePlan planWavTruncate(const WavLayout& layout, std::size_t keptFrames)
|
||||
return plan;
|
||||
}
|
||||
|
||||
} // namespace reasampler::capture
|
||||
} // namespace reasampler::capture
|
||||
|
||||
@@ -100,4 +100,4 @@ struct WavTruncatePlan {
|
||||
// truncate the file to newFileByteLength.
|
||||
WavTruncatePlan planWavTruncate(const WavLayout& layout, std::size_t keptFrames);
|
||||
|
||||
} // namespace reasampler::capture
|
||||
} // namespace reasampler::capture
|
||||
|
||||
@@ -48,4 +48,4 @@ void formatMasterGainLabel(double norm, char* buf, std::size_t len) {
|
||||
std::snprintf(buf, len, "%+.1fdB", db);
|
||||
}
|
||||
|
||||
} // namespace reasampler::instrument::engine
|
||||
} // namespace reasampler::instrument::engine
|
||||
|
||||
@@ -55,4 +55,4 @@ double masterGainNormFromLinear(double linear);
|
||||
// including the terminator. Pure.
|
||||
void formatMasterGainLabel(double norm, char* buf, std::size_t len);
|
||||
|
||||
} // namespace reasampler::instrument::engine
|
||||
} // namespace reasampler::instrument::engine
|
||||
|
||||
@@ -431,4 +431,4 @@ AudioSample PitchShifter::processImpl(AudioSample in, const SpliceEvent* linked)
|
||||
return static_cast<AudioSample>(out);
|
||||
}
|
||||
|
||||
} // namespace reasampler::instrument::engine
|
||||
} // namespace reasampler::instrument::engine
|
||||
|
||||
@@ -227,4 +227,4 @@ private:
|
||||
// live fade by that rate.
|
||||
};
|
||||
|
||||
} // namespace reasampler::instrument::engine
|
||||
} // namespace reasampler::instrument::engine
|
||||
|
||||
@@ -269,4 +269,4 @@ bool VelocityCurve::equals(const VelocityCurve& other, double eps) const {
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace reasampler::instrument::engine
|
||||
} // namespace reasampler::instrument::engine
|
||||
|
||||
@@ -168,4 +168,4 @@ private:
|
||||
std::vector<VelocityPoint> points_;
|
||||
};
|
||||
|
||||
} // namespace reasampler::instrument::engine
|
||||
} // namespace reasampler::instrument::engine
|
||||
|
||||
@@ -60,4 +60,4 @@ AssignConsumeDecision consumeDecision(const std::optional<AssignmentRequest>& re
|
||||
return d;
|
||||
}
|
||||
|
||||
} // namespace reasampler::instrument::map
|
||||
} // namespace reasampler::instrument::map
|
||||
|
||||
@@ -104,4 +104,4 @@ AssignConsumeDecision consumeDecision(const std::optional<AssignmentRequest>& re
|
||||
std::int64_t lastConsumed, bool resolves,
|
||||
bool isFocusedTarget);
|
||||
|
||||
} // namespace reasampler::instrument::map
|
||||
} // namespace reasampler::instrument::map
|
||||
|
||||
@@ -13,4 +13,4 @@ std::optional<std::string> decodeGetProjExtState(int apiReturn,
|
||||
return buffer;
|
||||
}
|
||||
|
||||
} // namespace reasampler::instrument::map
|
||||
} // namespace reasampler::instrument::map
|
||||
|
||||
@@ -34,4 +34,4 @@ namespace reasampler::instrument::map {
|
||||
std::optional<std::string> decodeGetProjExtState(int apiReturn,
|
||||
const std::string& buffer);
|
||||
|
||||
} // namespace reasampler::instrument::map
|
||||
} // namespace reasampler::instrument::map
|
||||
|
||||
@@ -110,4 +110,4 @@ std::optional<int> parseNoteEntry(const std::string& text) {
|
||||
return parseNoteName(s);
|
||||
}
|
||||
|
||||
} // namespace reasampler::instrument::map
|
||||
} // namespace reasampler::instrument::map
|
||||
|
||||
@@ -30,4 +30,4 @@ namespace reasampler::instrument::map {
|
||||
// into [0,127]; empty or unparseable input returns nullopt (no change). Pure — no host types.
|
||||
std::optional<int> parseNoteEntry(const std::string& text);
|
||||
|
||||
} // namespace reasampler::instrument::map
|
||||
} // namespace reasampler::instrument::map
|
||||
|
||||
@@ -24,4 +24,4 @@ std::int64_t fadeFractionToFrames(double fadeFraction, std::int64_t playLength)
|
||||
return static_cast<std::int64_t>(fadeFraction * static_cast<double>(playLength) + 0.5);
|
||||
}
|
||||
|
||||
} // namespace reasampler::instrument::map
|
||||
} // namespace reasampler::instrument::map
|
||||
|
||||
@@ -48,4 +48,4 @@ double framesToFadeFraction(std::int64_t fadeFrames, std::int64_t playLength);
|
||||
// Rounds to nearest integer frame. Returns 0 when playLength == 0.
|
||||
std::int64_t fadeFractionToFrames(double fadeFraction, std::int64_t playLength);
|
||||
|
||||
} // namespace reasampler::instrument::map
|
||||
} // namespace reasampler::instrument::map
|
||||
|
||||
@@ -155,4 +155,4 @@ std::vector<int> filterNameIndices(const std::vector<std::string>& names,
|
||||
return out;
|
||||
}
|
||||
|
||||
} // namespace reasampler::instrument::ui
|
||||
} // namespace reasampler::instrument::ui
|
||||
|
||||
@@ -104,4 +104,4 @@ bool nameMatchesQuery(const std::string& name, const std::string& query);
|
||||
std::vector<int> filterNameIndices(const std::vector<std::string>& names,
|
||||
const std::string& query);
|
||||
|
||||
} // namespace reasampler::instrument::ui
|
||||
} // namespace reasampler::instrument::ui
|
||||
|
||||
@@ -93,4 +93,4 @@ int filterTabHitTest(const BrowserLayout& layout, int tabCount, int x, int y) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
} // namespace reasampler::instrument::ui
|
||||
} // namespace reasampler::instrument::ui
|
||||
|
||||
@@ -89,4 +89,4 @@ Rect filterTabRect(const BrowserLayout& layout, int tabCount, int index);
|
||||
// tab strip. Pure.
|
||||
int filterTabHitTest(const BrowserLayout& layout, int tabCount, int x, int y);
|
||||
|
||||
} // namespace reasampler::instrument::ui
|
||||
} // namespace reasampler::instrument::ui
|
||||
|
||||
@@ -38,4 +38,4 @@ bool popupOutsideSheet(const CurvePopupLayout& layout, int x, int y) {
|
||||
return !contains(layout.sheet, x, y);
|
||||
}
|
||||
|
||||
} // namespace reasampler::instrument::ui
|
||||
} // namespace reasampler::instrument::ui
|
||||
|
||||
@@ -45,4 +45,4 @@ CurvePopupLayout computeCurvePopup(int w, int h);
|
||||
// The shell additionally gates on "no drag in flight" (spec). Pure.
|
||||
bool popupOutsideSheet(const CurvePopupLayout& layout, int x, int y);
|
||||
|
||||
} // namespace reasampler::instrument::ui
|
||||
} // namespace reasampler::instrument::ui
|
||||
|
||||
@@ -159,4 +159,4 @@ bool addZoneHitTest(const KeymapEditorLayout& layout, int x, int y) {
|
||||
return contains(layout.addZoneButton, x, y);
|
||||
}
|
||||
|
||||
} // namespace reasampler::instrument::ui
|
||||
} // namespace reasampler::instrument::ui
|
||||
|
||||
@@ -139,4 +139,4 @@ ZoneHit zoneHitTest(const KeymapEditorLayout& layout, int zoneCount, int x, int
|
||||
// True if (x, y) lands on the "Add Zone" button. Pure.
|
||||
bool addZoneHitTest(const KeymapEditorLayout& layout, int x, int y);
|
||||
|
||||
} // namespace reasampler::instrument::ui
|
||||
} // namespace reasampler::instrument::ui
|
||||
|
||||
@@ -83,4 +83,4 @@ Rect levelFillRect(const EmbedLayout& layout, double level) {
|
||||
return Rect::ltrb(band.x, band.y, band.x + fillW, band.bottom());
|
||||
}
|
||||
|
||||
} // namespace reasampler::instrument::ui
|
||||
} // namespace reasampler::instrument::ui
|
||||
|
||||
@@ -73,4 +73,4 @@ int zoneAtPoint(const EmbedLayout& layout, const EmbedZone* zones, int zoneCount
|
||||
// (rounded down). level <= 0 -> empty rect; level >= 1 -> the whole band. Pure.
|
||||
Rect levelFillRect(const EmbedLayout& layout, double level);
|
||||
|
||||
} // namespace reasampler::instrument::ui
|
||||
} // namespace reasampler::instrument::ui
|
||||
|
||||
@@ -177,4 +177,4 @@ AmpEnvelope resolveNodeDrag(const AmpEnvelope& grabEnv, EnvNode node, const Rect
|
||||
return out;
|
||||
}
|
||||
|
||||
} // namespace reasampler::instrument::ui
|
||||
} // namespace reasampler::instrument::ui
|
||||
|
||||
@@ -105,4 +105,4 @@ AmpEnvelope resolveNodeDrag(const AmpEnvelope& grabEnv, EnvNode node, const Rect
|
||||
double totalSeconds, const EnvClampBounds& bounds,
|
||||
int dxPixels, int dyPixels);
|
||||
|
||||
} // namespace reasampler::instrument::ui
|
||||
} // namespace reasampler::instrument::ui
|
||||
|
||||
@@ -55,7 +55,6 @@ int levelToY(const Rect& area, double level) {
|
||||
|
||||
namespace {
|
||||
|
||||
|
||||
EnvVertex vtx(EnvNode node, const Rect& area, double totalSeconds, double t, double level) {
|
||||
EnvVertex v;
|
||||
v.node = node;
|
||||
@@ -172,4 +171,4 @@ std::vector<EnvVertex> buildEnvelopePolyline(const AmpEnvelope& env, const Rect&
|
||||
: triggerPolyline(env, area, totalSeconds);
|
||||
}
|
||||
|
||||
} // namespace reasampler::instrument::ui
|
||||
} // namespace reasampler::instrument::ui
|
||||
|
||||
@@ -226,4 +226,4 @@ int timeToX(const Rect& area, double totalSeconds, double t);
|
||||
// and the node hit-test share.
|
||||
int levelToY(const Rect& area, double level);
|
||||
|
||||
} // namespace reasampler::instrument::ui
|
||||
} // namespace reasampler::instrument::ui
|
||||
|
||||
@@ -146,4 +146,4 @@ int resolveDragNote(const StripLayout& layout, int startNote, int dxPixels) {
|
||||
return clampNote(startNote + shift);
|
||||
}
|
||||
|
||||
} // namespace reasampler::instrument::ui
|
||||
} // namespace reasampler::instrument::ui
|
||||
|
||||
@@ -128,4 +128,4 @@ int resolveDragNote(const StripLayout& layout, int startNote, int dxPixels);
|
||||
// pastel spectral fill (S-VIEW-7). Pure — no layout required, no host types.
|
||||
bool isNaturalKey(int note);
|
||||
|
||||
} // namespace reasampler::instrument::ui
|
||||
} // namespace reasampler::instrument::ui
|
||||
|
||||
@@ -153,4 +153,4 @@ DeckHit hitTestDeck(const DeckLayout& layout, int x, int y) {
|
||||
return {};
|
||||
}
|
||||
|
||||
} // namespace reasampler::instrument::ui
|
||||
} // namespace reasampler::instrument::ui
|
||||
|
||||
@@ -130,4 +130,4 @@ struct DeckHit {
|
||||
// Pure — the shell's routing entry point.
|
||||
DeckHit hitTestDeck(const DeckLayout& layout, int x, int y);
|
||||
|
||||
} // namespace reasampler::instrument::ui
|
||||
} // namespace reasampler::instrument::ui
|
||||
|
||||
@@ -99,7 +99,6 @@ double normDeg(double deg) {
|
||||
return deg;
|
||||
}
|
||||
|
||||
|
||||
} // namespace
|
||||
|
||||
KnobGeometry computeKnob(const Rect& cell) {
|
||||
@@ -157,4 +156,4 @@ int controlAtPoint(const std::vector<ControlRow>& rows, int x, int y) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
} // namespace reasampler::instrument::ui
|
||||
} // namespace reasampler::instrument::ui
|
||||
|
||||
@@ -177,4 +177,4 @@ double knobDragValue(double startValue, int dyPixels,
|
||||
// toggleSegmentHitTest / knobDragValue over the ensuing drag) and commits.
|
||||
int controlAtPoint(const std::vector<ControlRow>& rows, int x, int y);
|
||||
|
||||
} // namespace reasampler::instrument::ui
|
||||
} // namespace reasampler::instrument::ui
|
||||
|
||||
@@ -96,4 +96,4 @@ std::int64_t nearestZeroCrossing(const AudioSample* pcm, std::int64_t frames,
|
||||
return t; // no sign change in the whole buffer -> keep the raw (clamped) target
|
||||
}
|
||||
|
||||
} // namespace reasampler::instrument::ui
|
||||
} // namespace reasampler::instrument::ui
|
||||
|
||||
@@ -82,4 +82,4 @@ std::int64_t resolveDragFrame(const Rect& area, std::int64_t frameCount, std::in
|
||||
std::int64_t nearestZeroCrossing(const AudioSample* pcm, std::int64_t frames,
|
||||
std::int64_t target);
|
||||
|
||||
} // namespace reasampler::instrument::ui
|
||||
} // namespace reasampler::instrument::ui
|
||||
|
||||
@@ -458,4 +458,4 @@ std::optional<BankModel> BankModel::deserialize(const std::string& blob) {
|
||||
return idx;
|
||||
}
|
||||
|
||||
} // namespace reasampler::model
|
||||
} // namespace reasampler::model
|
||||
|
||||
@@ -214,4 +214,4 @@ private:
|
||||
std::vector<Sample> samples_; // insertion order preserved
|
||||
};
|
||||
|
||||
} // namespace reasampler::model
|
||||
} // namespace reasampler::model
|
||||
|
||||
@@ -110,4 +110,4 @@ std::optional<OwnedFileManifest> OwnedFileManifest::deserialize(const std::strin
|
||||
return m;
|
||||
}
|
||||
|
||||
} // namespace reasampler::model
|
||||
} // namespace reasampler::model
|
||||
|
||||
@@ -88,4 +88,4 @@ private:
|
||||
std::vector<std::string> paths_; // insertion order; deduplicated
|
||||
};
|
||||
|
||||
} // namespace reasampler::model
|
||||
} // namespace reasampler::model
|
||||
|
||||
@@ -159,4 +159,4 @@ std::optional<std::string> detectParent(
|
||||
return parent;
|
||||
}
|
||||
|
||||
} // namespace reasampler::model
|
||||
} // namespace reasampler::model
|
||||
|
||||
@@ -146,4 +146,4 @@ std::optional<std::string> detectParent(
|
||||
const std::vector<std::string>& sourceItemFiles,
|
||||
const std::vector<BankFileRef>& bankFiles);
|
||||
|
||||
} // namespace reasampler::model
|
||||
} // namespace reasampler::model
|
||||
|
||||
@@ -83,4 +83,4 @@ std::vector<std::string> pruneDeletePlan(const std::vector<std::string>& confirm
|
||||
return plan;
|
||||
}
|
||||
|
||||
} // namespace reasampler::reclaim
|
||||
} // namespace reasampler::reclaim
|
||||
|
||||
@@ -175,4 +175,4 @@ PruneReport buildPruneReport(const std::vector<std::string>& orphans,
|
||||
std::vector<std::string> pruneDeletePlan(const std::vector<std::string>& confirmed,
|
||||
const std::vector<std::string>& freshOrphans);
|
||||
|
||||
} // namespace reasampler::reclaim
|
||||
} // namespace reasampler::reclaim
|
||||
|
||||
@@ -151,4 +151,4 @@ int hitTestActionBar(int px, int py, const ActionBarRect& bar,
|
||||
return -1; // inter-button/cluster gap or the overflow dead-zone — a clean miss
|
||||
}
|
||||
|
||||
} // namespace reasampler::ui
|
||||
} // namespace reasampler::ui
|
||||
|
||||
@@ -148,4 +148,4 @@ std::vector<ActionBarSlot> computeBarSlots(const ActionBarRect& bar,
|
||||
int hitTestActionBar(int px, int py, const ActionBarRect& bar,
|
||||
const std::vector<ClusterSpec>& clusters, const ActionBarSpec& spec);
|
||||
|
||||
} // namespace reasampler::ui
|
||||
} // namespace reasampler::ui
|
||||
|
||||
@@ -224,4 +224,4 @@ float compressAmplitudeForDisplay(float linear) {
|
||||
return linear < 0.0f ? -clamped : clamped;
|
||||
}
|
||||
|
||||
} // namespace reasampler::ui
|
||||
} // namespace reasampler::ui
|
||||
|
||||
@@ -175,4 +175,4 @@ constexpr float kDisplayFloorDb = -60.0f;
|
||||
// (stays on the midline). Full-scale (|linear| == 1.0f) returns exactly ±1.0f.
|
||||
float compressAmplitudeForDisplay(float linear);
|
||||
|
||||
} // namespace reasampler::ui
|
||||
} // namespace reasampler::ui
|
||||
|
||||
@@ -93,4 +93,4 @@ int hitTestSlot(int px, int py, const std::vector<SlotCellRect>& rects) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
} // namespace reasampler::ui
|
||||
} // namespace reasampler::ui
|
||||
|
||||
@@ -144,4 +144,4 @@ std::vector<SlotCellRect> computeSlotRectsForDrop(int maxSlot, int panelWidth,
|
||||
// callers reason in model slots.
|
||||
int hitTestSlot(int px, int py, const std::vector<SlotCellRect>& rects);
|
||||
|
||||
} // namespace reasampler::ui
|
||||
} // namespace reasampler::ui
|
||||
|
||||
@@ -61,4 +61,4 @@ std::string formatSecondsMs(double lengthSeconds) {
|
||||
return buf;
|
||||
}
|
||||
|
||||
} // namespace reasampler::ui
|
||||
} // namespace reasampler::ui
|
||||
|
||||
@@ -52,4 +52,4 @@ std::string formatBarsBeats(const MusicalLength& m);
|
||||
// * negative length is clamped to "0.000" (a length is never negative; defensive).
|
||||
std::string formatSecondsMs(double lengthSeconds);
|
||||
|
||||
} // namespace reasampler::ui
|
||||
} // namespace reasampler::ui
|
||||
|
||||
@@ -105,4 +105,4 @@ int waveformColumnCount(const KitBox& box) {
|
||||
return w > 0 ? w : 0;
|
||||
}
|
||||
|
||||
} // namespace reasampler::ui
|
||||
} // namespace reasampler::ui
|
||||
|
||||
@@ -126,4 +126,4 @@ int hitTestListRow(int px, int py, const KitBox& list, int rowHeight, int rowCou
|
||||
// identical whether bins == columns or bins == k*columns) and wastes memory and CPU.
|
||||
int waveformColumnCount(const KitBox& box);
|
||||
|
||||
} // namespace reasampler::ui
|
||||
} // namespace reasampler::ui
|
||||
|
||||
@@ -51,4 +51,4 @@ PathList assemblePathList(const std::vector<ResolvedSample>& resolved) {
|
||||
return out;
|
||||
}
|
||||
|
||||
} // namespace reasampler::ui
|
||||
} // namespace reasampler::ui
|
||||
|
||||
@@ -129,4 +129,4 @@ struct PathList {
|
||||
// case-insensitive dedup on Windows — the pure layer does not guess a platform rule).
|
||||
PathList assemblePathList(const std::vector<ResolvedSample>& resolved);
|
||||
|
||||
} // namespace reasampler::ui
|
||||
} // namespace reasampler::ui
|
||||
|
||||
@@ -66,4 +66,4 @@ FooterHit hitTestFooterBar(int px, int py, const FooterBarLayout& layout) {
|
||||
return FooterHit::None;
|
||||
}
|
||||
|
||||
} // namespace reasampler::ui
|
||||
} // namespace reasampler::ui
|
||||
|
||||
@@ -103,4 +103,4 @@ FooterBarLayout computeFooterBar(const FooterRect& footer, const FooterBarSpec&
|
||||
// mode_switch over the toggle box), then the Tail hit; this returns which region was struck.
|
||||
FooterHit hitTestFooterBar(int px, int py, const FooterBarLayout& layout);
|
||||
|
||||
} // namespace reasampler::ui
|
||||
} // namespace reasampler::ui
|
||||
|
||||
@@ -18,4 +18,4 @@ bool tagButtonEnabled(const std::string& activeModeId, TagTarget target) {
|
||||
return activeModeId != targetId;
|
||||
}
|
||||
|
||||
} // namespace reasampler::ui
|
||||
} // namespace reasampler::ui
|
||||
|
||||
@@ -36,4 +36,4 @@ enum class TagTarget {
|
||||
// disable an action the user can still reach), so a future added mode never dead-locks the bar.
|
||||
bool tagButtonEnabled(const std::string& activeModeId, TagTarget target);
|
||||
|
||||
} // namespace reasampler::ui
|
||||
} // namespace reasampler::ui
|
||||
|
||||
@@ -39,4 +39,4 @@ bool hitTestMenuButton(int px, int py, const MenuButtonRect& button) {
|
||||
py >= button.y && py < button.y + button.height;
|
||||
}
|
||||
|
||||
} // namespace reasampler::ui
|
||||
} // namespace reasampler::ui
|
||||
|
||||
@@ -65,4 +65,4 @@ MenuButtonRect computeMenuButton(const MenuBarRect& bar, const MenuButtonSpec& s
|
||||
// hit-test agree on the same pixels. An empty button never claims a point (always false).
|
||||
bool hitTestMenuButton(int px, int py, const MenuButtonRect& button);
|
||||
|
||||
} // namespace reasampler::ui
|
||||
} // namespace reasampler::ui
|
||||
|
||||
@@ -36,4 +36,4 @@ bool hitTestPruneButton(int px, int py, const ButtonRect& button) {
|
||||
py >= button.y && py < button.y + button.height;
|
||||
}
|
||||
|
||||
} // namespace reasampler::ui
|
||||
} // namespace reasampler::ui
|
||||
|
||||
@@ -79,4 +79,4 @@ ButtonRect computePruneButton(const FooterRect& footer, const PruneButtonSpec& s
|
||||
// so a suppressed button cannot be accidentally clicked.
|
||||
bool hitTestPruneButton(int px, int py, const ButtonRect& button);
|
||||
|
||||
} // namespace reasampler::ui
|
||||
} // namespace reasampler::ui
|
||||
|
||||
@@ -109,4 +109,4 @@ TabHit hitTestTabStrip(int px, int py, const TabStripRect& strip, int tabCount,
|
||||
return miss; // track dead space (no tab under the point)
|
||||
}
|
||||
|
||||
} // namespace reasampler::ui
|
||||
} // namespace reasampler::ui
|
||||
|
||||
@@ -124,4 +124,4 @@ struct TabHit {
|
||||
TabHit hitTestTabStrip(int px, int py, const TabStripRect& strip, int tabCount,
|
||||
const TabStripSpec& spec, int scrollOffset);
|
||||
|
||||
} // namespace reasampler::ui
|
||||
} // namespace reasampler::ui
|
||||
|
||||
@@ -190,4 +190,4 @@ double textFloor(TextClass cls) {
|
||||
return cls == TextClass::Body ? 4.5 : 3.0;
|
||||
}
|
||||
|
||||
} // namespace reasampler::ui
|
||||
} // namespace reasampler::ui
|
||||
|
||||
+1
-1
@@ -115,4 +115,4 @@ double contrastRatio(const KitColor& a, const KitColor& b);
|
||||
// pair the kit actually draws.
|
||||
double textFloor(TextClass cls);
|
||||
|
||||
} // namespace reasampler::ui
|
||||
} // namespace reasampler::ui
|
||||
|
||||
@@ -50,4 +50,4 @@ TooltipBox computeTooltip(int anchorX, int anchorY, int anchorW, int anchorH,
|
||||
return box;
|
||||
}
|
||||
|
||||
} // namespace reasampler::ui
|
||||
} // namespace reasampler::ui
|
||||
|
||||
@@ -59,4 +59,4 @@ TooltipBox computeTooltip(int anchorX, int anchorY, int anchorW, int anchorH,
|
||||
int textW, int textH, int clientW, int clientH,
|
||||
const TooltipSpec& spec);
|
||||
|
||||
} // namespace reasampler::ui
|
||||
} // namespace reasampler::ui
|
||||
|
||||
@@ -18,4 +18,4 @@ std::vector<std::uint8_t> readFileBytes(const std::string& path) {
|
||||
return bytes;
|
||||
}
|
||||
|
||||
} // namespace reasampler::util
|
||||
} // namespace reasampler::util
|
||||
|
||||
@@ -16,4 +16,4 @@ namespace reasampler::util {
|
||||
// "nothing to work with" branch.
|
||||
std::vector<std::uint8_t> readFileBytes(const std::string& path);
|
||||
|
||||
} // namespace reasampler::util
|
||||
} // namespace reasampler::util
|
||||
|
||||
@@ -166,4 +166,4 @@ WritingVersion classifyWritingVersion(const std::string& rawStamp) {
|
||||
return wv;
|
||||
}
|
||||
|
||||
} // namespace reasampler::version
|
||||
} // namespace reasampler::version
|
||||
|
||||
@@ -199,4 +199,4 @@ struct WritingVersion {
|
||||
// with the raw ext-state read and never has to reason about the cases itself.
|
||||
WritingVersion classifyWritingVersion(const std::string& rawStamp);
|
||||
|
||||
} // namespace reasampler::version
|
||||
} // namespace reasampler::version
|
||||
|
||||
@@ -41,4 +41,4 @@ void GuidBaseline::reset() {
|
||||
primed_ = false; // next observe() re-baselines (first-poll guard re-armed)
|
||||
}
|
||||
|
||||
} // namespace reasampler::view
|
||||
} // namespace reasampler::view
|
||||
|
||||
@@ -59,4 +59,4 @@ private:
|
||||
bool primed_ = false; // false ⇒ next observe() sets the baseline
|
||||
};
|
||||
|
||||
} // namespace reasampler::view
|
||||
} // namespace reasampler::view
|
||||
|
||||
@@ -48,4 +48,4 @@ bool isOnManualLane(bool isFixedLaneTrack, const std::string& laneName) {
|
||||
return !hasManagedPrefix(laneName);
|
||||
}
|
||||
|
||||
} // namespace reasampler::view
|
||||
} // namespace reasampler::view
|
||||
|
||||
@@ -82,4 +82,4 @@ std::optional<std::string> modeIdFromLaneName(const std::string& laneName);
|
||||
// inputs (I_FREEMODE result, P_LANENAME string) and never re-derives this logic.
|
||||
bool isOnManualLane(bool isFixedLaneTrack, const std::string& laneName);
|
||||
|
||||
} // namespace reasampler::view
|
||||
} // namespace reasampler::view
|
||||
|
||||
@@ -61,4 +61,4 @@ int hitTestSegment(int px, int py, const HeaderRect& header, int segmentCount) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
} // namespace reasampler::view
|
||||
} // namespace reasampler::view
|
||||
|
||||
@@ -46,4 +46,4 @@ std::vector<SegmentRect> computeSegmentRects(const HeaderRect& header,
|
||||
// the panel drew there.
|
||||
int hitTestSegment(int px, int py, const HeaderRect& header, int segmentCount);
|
||||
|
||||
} // namespace reasampler::view
|
||||
} // namespace reasampler::view
|
||||
|
||||
@@ -38,4 +38,4 @@ FolderTree buildFolderTree(const std::vector<TrackFolderEntry>& entries) {
|
||||
return tree;
|
||||
}
|
||||
|
||||
} // namespace reasampler::view
|
||||
} // namespace reasampler::view
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user