Ξ-W2-T1: the resample bake chain — instrument renders, extension banks, one click re-points and resets

This commit is contained in:
2026-08-01 16:26:28 -04:00
parent 6c982cd617
commit 60308a3655
52 changed files with 2212 additions and 55 deletions
@@ -112,6 +112,9 @@ void ReaSamplerEditor::paintChrome(LICE_IBitmap* bmp, const FaceLayout& fl, bool
} else {
title += " [host: no bridge]";
}
// A bake outcome outranks the identity readout while it lasts: the click's only other
// feedback is the sound itself, which is by design indistinguishable from before.
if (bakeMessageTicks_ > 0 && !bakeMessage_.empty()) title = bakeMessage_;
kitText(bmp, cr.title, title.c_str(), kToolbarFont, Role::TextPrimary);
// Browse: the picker. When nothing is loaded it is the empty state's dominant
@@ -128,6 +131,20 @@ void ReaSamplerEditor::paintChrome(LICE_IBitmap* bmp, const FaceLayout& fl, bool
// nothing picked there is no root, no preview and no channel decision to make.
if (empty) return;
// Resample bake. Disabled without the extension: the bank is the extension's surface,
// so with it absent there is no writer and the control must read unavailable rather
// than accept a click it cannot honour.
{
const KitButtonBox box{toKitBox(cr.bake)};
const InteractionState st =
!bakeAvailable_ ? InteractionState::Disabled
: (bakePending_ ? InteractionState::Active
: (isHovered(HoverKind::kBake, -1)
? InteractionState::Hover
: InteractionState::Rest));
drawButton(bmp, box, "Bake", st, /*warn=*/false);
}
// Preview-trigger button (fires the loaded capture at root through the live voice engine).
// A drawn play triangle rather than a label or an embedded image: it inherits the button's
// own foreground role, so it stays legible in every interaction state at no build cost.