Widen the deck row block to 1028 so the filter tie-line is exact, and accumulate the meter's block peaks instead of sampling one in 47
This commit is contained in:
@@ -28,6 +28,7 @@
|
||||
#include "core/audio/peaks.h" // Envelope (the cached peak thumbnail)
|
||||
#include "core/instrument/map/sample_map.h" // SampleChoice, BankChoice, InstrumentParams
|
||||
#include "core/instrument/engine/velocity_curve.h" // VelocityCurve (transfer-curve editor state)
|
||||
#include "shell/instrument/editor_interaction.h" // DragKind / HoverKind / HoverTarget
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <windows.h>
|
||||
@@ -79,15 +80,6 @@ private:
|
||||
// picker overlaid on it.
|
||||
enum class View { kSample, kBrowse };
|
||||
|
||||
// What a mouse drag is currently editing. kWaveMarker/kEnvNode/kCurveNode track their
|
||||
// grabbed item in waveMarker_/envNode_/curvePointIndex_; kDeckKnob is a grab-anchored
|
||||
// knob drag (control in dragParamId_, grab value in dragKnobStartValue_).
|
||||
// kSplineNode is the overlay's peer of kCurveNode: the same VelocityCurve point drag, over
|
||||
// the waveform overlay's box and the overlay-active envelope's contour rather than the
|
||||
// popup's box and curve.
|
||||
enum class DragKind { kNone, kRootMarker, kWaveMarker, kScrollThumb, kEnvNode,
|
||||
kCurveNode, kSplineNode, kDeckKnob };
|
||||
|
||||
// Which envelope the waveform overlay is drawing and editing. The selection type and its
|
||||
// whole state machine are the pure deck_groups module's; this alias keeps the shell's
|
||||
// spelling.
|
||||
@@ -115,41 +107,6 @@ private:
|
||||
// What those four marks are showing — see pickedMarkers.
|
||||
using SetupMarkers = instrument::ui::LoopMarks;
|
||||
|
||||
// The interactive element under the pointer, resolved live in WM_MOUSEMOVE. `index`
|
||||
// disambiguates within a kind (tab ordinal, visible-card index, control-row id); -1 when
|
||||
// not applicable.
|
||||
enum class HoverKind {
|
||||
kNone,
|
||||
kNavBrowse, // the chrome "Browse" toolbar button (opens the Browse modal)
|
||||
kBack, // the Browse "back" affordance (returns to Sample)
|
||||
kSearchBox, // the browser search box
|
||||
kFilterTab, // a bank-filter tab (index = tab ordinal, 0 = All)
|
||||
kCard, // a capture card (index = visible_ index)
|
||||
kBrowseConfirm, // the Browse modal "Load" confirm button
|
||||
kBrowseCancel, // the Browse modal "Cancel" button
|
||||
kChanMono, // the mono channel-mode segment
|
||||
kChanStereo, // the stereo channel-mode segment
|
||||
kLoopOff, // the loop enable's Off segment
|
||||
kLoopOn, // the loop enable's On segment
|
||||
kWaveMark, // a waveform overlay mark (index = WaveMark ordinal); promotes its label
|
||||
kPreview, // the preview-trigger button
|
||||
kBake, // the resample-bake trigger
|
||||
kControl, // a knob-deck element (index = control id)
|
||||
kInnerDial, // a knob cell's inner curve dial (index = the OUTER control id)
|
||||
kEnvRadio, // an envelope deck's overlay-select radio (index = radio control id)
|
||||
kCurveNode, // a velocity-curve control point (index = point index)
|
||||
kVelKnob, // the chrome preview-velocity radial knob
|
||||
kHoldKnob, // the chrome bake-Hold radial knob
|
||||
kStripKey, // a piano-strip key (index = MIDI note); carries the name tooltip
|
||||
kPopupClose, // the curve popup's Close (x) button
|
||||
};
|
||||
struct HoverTarget {
|
||||
HoverKind kind = HoverKind::kNone;
|
||||
int index = -1;
|
||||
bool operator==(const HoverTarget& o) const { return kind == o.kind && index == o.index; }
|
||||
bool operator!=(const HoverTarget& o) const { return !(*this == o); }
|
||||
};
|
||||
|
||||
// The three-band stack for the current client size, plus the chrome interior. Every
|
||||
// paint/hit-test path derives both through this one call so draw and hit-test can never
|
||||
// disagree about where a band is.
|
||||
@@ -489,6 +446,11 @@ private:
|
||||
std::string bakeMessage_; // last outcome, shown in the title band
|
||||
int bakeMessageTicks_ = 0; // sync ticks the message survives
|
||||
|
||||
// The limiter toggle, armed by the click and run on the sync tick — the commit requests a
|
||||
// host latency restart, which is the same nested-inside-a-mouse-handler hazard the bake
|
||||
// defers for. Empty = nothing armed.
|
||||
std::optional<bool> limiterPending_;
|
||||
|
||||
// The editor-drop -> extension-ingest relay is not shipped (the bridge is read-only):
|
||||
// an OS drop just flashes a "drop on the panel instead" banner (dropHintTicks_ counts
|
||||
// down via the sync tick). Never ingests, never inserts a timeline item.
|
||||
|
||||
Reference in New Issue
Block a user