One taper, one modifier law: extract param_taper, raise the stage ceiling to 10 s, and make the AHDSR schematic axis the taper itself
This commit is contained in:
@@ -35,9 +35,8 @@ bool ReaSamplerEditor::mouseDownWaveform(const FaceLayout& fl, int x, int y) {
|
||||
|
||||
const DeckEnableState gates = deckEnableState();
|
||||
const bool splineLive = overlayIsSpline() && overlayEnvEnabled(overlayEnv_, gates);
|
||||
const SplineGesture gesture = (GetKeyState(VK_CONTROL) & 0x8000) != 0
|
||||
? SplineGesture::kControlLeft
|
||||
: SplineGesture::kLeft;
|
||||
const SplineGesture gesture =
|
||||
dragModifiers().ctrl ? SplineGesture::kControlLeft : SplineGesture::kLeft;
|
||||
|
||||
// The staged envelope's draggable node and the drawn contour's node are mutually exclusive
|
||||
// (overlayEnvInert flips the staged one inert exactly when its envelope is in Spline mode),
|
||||
@@ -107,6 +106,7 @@ bool ReaSamplerEditor::mouseDownWaveform(const FaceLayout& fl, int x, int y) {
|
||||
envNode_ = envNodeHit.node;
|
||||
dragStartX_ = x;
|
||||
dragStartY_ = y;
|
||||
dragMods_ = dragModifiers();
|
||||
dragStartEnv_ = env;
|
||||
dragSampleFrames_ = frames;
|
||||
dragStartParams_ = params_;
|
||||
@@ -213,9 +213,20 @@ void ReaSamplerEditor::dragWaveform(const FaceLayout& fl, int x, int y) {
|
||||
const double rate = liveSampleRate();
|
||||
if (frames <= 0 || rate <= 0.0) return;
|
||||
const double totalSeconds = static_cast<double>(frames) / rate;
|
||||
const StageEnvelope edited = resolveNodeDrag(dragStartEnv_, envNode_, overlay,
|
||||
totalSeconds, envClampBounds(), dx,
|
||||
y - dragStartY_);
|
||||
const DragModifiers mods = dragModifiers();
|
||||
if (mods != dragMods_) {
|
||||
// Re-anchor (see dragMods_): the node's CURRENT params and the cursor's current
|
||||
// position become the origin, so the flip changes only the rate. Re-packing the
|
||||
// grab envelope is what makes that true for the delta this resolver measures.
|
||||
dragStartEnv_ =
|
||||
packEnvelope(overlayEnv_, params_.play, frames, params_.startPoint.value_or(0));
|
||||
dragStartX_ = x;
|
||||
dragStartY_ = y;
|
||||
dragMods_ = mods;
|
||||
}
|
||||
const StageEnvelope edited =
|
||||
resolveNodeDrag(dragStartEnv_, envNode_, overlay, totalSeconds, envClampBounds(),
|
||||
x - dragStartX_, y - dragStartY_, mods);
|
||||
unpackEnvelope(overlayEnv_, edited, params_.play);
|
||||
if (dragCommitsLive(DragKind::kEnvNode)) commitLive();
|
||||
invalidate(); // live feedback; commit on WM_LBUTTONUP
|
||||
|
||||
Reference in New Issue
Block a user