refactor: group selection state into a Selection sub-struct + ClearSelection()
The box-selection state was 11 fields spread across three comment blocks (time sel, freq sel, drag state). Consolidate them into one Selection sub-struct (app.sel.*) and extract the 4-line 'clear to full range' block — duplicated in 5 places — into a ClearSelection() helper. Pure mechanical rename (anchored to app./spa-> so the ScopeView fields of the same name are untouched) + behavior-identical dedup. Fully-settled render verified pixel-identical (AE=0). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
+24
-15
@@ -91,6 +91,21 @@ typedef struct {
|
||||
int nextOrder;
|
||||
} FFTSizeCache;
|
||||
|
||||
// The time+frequency box selection and its drag/move interaction state.
|
||||
// All coordinates are 0-1 normalized. A "box-select" drags out a new box;
|
||||
// a "move" drags an existing box around.
|
||||
typedef struct {
|
||||
float timeStart, timeEnd; // selected time span
|
||||
float freqStart, freqEnd; // selected frequency span
|
||||
bool isTimeSelecting; // dragging out a new time span
|
||||
bool isFreqSelecting; // dragging out a new frequency span
|
||||
Vector2 selectStartPos; // mouse pos when a box-select began (min-drag check)
|
||||
bool isDragging; // moving an existing selection box
|
||||
Vector2 dragStartPos; // mouse pos when the move began
|
||||
float dragTimeStart; // selection start time when the move began
|
||||
float dragFreqStart; // selection freq start when the move began
|
||||
} Selection;
|
||||
|
||||
typedef struct {
|
||||
AudioSignal signal;
|
||||
StftResult stft;
|
||||
@@ -103,27 +118,14 @@ typedef struct {
|
||||
float playheadT; // 0-1 normalized position in selection
|
||||
float playheadElapsed; // Elapsed seconds since play started
|
||||
|
||||
// Time selection (0-1 normalized)
|
||||
float timeSelectionStart;
|
||||
float timeSelectionEnd;
|
||||
bool isTimeSelecting;
|
||||
|
||||
// Frequency selection (0-1 normalized)
|
||||
float freqSelectionStart;
|
||||
float freqSelectionEnd;
|
||||
bool isFreqSelecting;
|
||||
// Time + frequency box selection and its drag/move interaction state.
|
||||
Selection sel;
|
||||
|
||||
// Export settings
|
||||
float exportScale;
|
||||
char exportDir[4096];
|
||||
char exportMessage[256];
|
||||
|
||||
Vector2 selectStartPos; // For minimum drag distance check
|
||||
bool isDraggingSelection; // Dragging existing selection box
|
||||
Vector2 dragSelectionStartPos; // Mouse position when started dragging selection
|
||||
float dragSelectionTimeStart; // Selection start time when dragging
|
||||
float dragSelectionFreqStart; // Selection freq start when dragging
|
||||
|
||||
// Viewport/zoom controls
|
||||
float viewStart; // 0-1, start of visible time region
|
||||
float viewEnd; // 0-1, end of visible time region
|
||||
@@ -233,6 +235,13 @@ static inline bool UiModalOpen(void)
|
||||
return app.showFileBrowser || app.showAbout;
|
||||
}
|
||||
|
||||
// Reset the box selection to the full signal (the "no selection" state).
|
||||
static inline void ClearSelection(void)
|
||||
{
|
||||
app.sel.timeStart = 0.0f; app.sel.timeEnd = 1.0f;
|
||||
app.sel.freqStart = 0.0f; app.sel.freqEnd = 1.0f;
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// Keymap — single source of truth for global key bindings.
|
||||
// The dispatcher (DispatchKeymap in spectrogram.c) runs every entry whose
|
||||
|
||||
Reference in New Issue
Block a user