v0.6.0 UI6-C4: band-column strip under spectrum - #18
Open
SeamusMullan wants to merge 1 commit into
Open
Conversation
Adds per-band gate-control columns directly under the spectrum so the layout reads top-to-bottom as "spectrum -> the bands inside it -> their controls", matching the threshold's spectral-identity requirement. - New BandGate::BandColumn — narrow vertical strip with a tinted header, a threshold slider, tilt + smoothing knobs, and F/S/M toggles. Owns its own APVTS attachments for a fixed bandIndex (no ACTIVE_BAND swap needed on this column path). - PluginEditor owns 6 BandColumns; only the first NUM_BANDS are visible. - layoutBandColumns() positions each column on the same log-frequency axis the spectrum uses (logX(fLo..fHi) per band), so columns align visually under their band region. CROSSOVER_n changes trigger a relayout via the new parameter listener. - Clicking a column header sets ACTIVE_BAND so the existing gate tab + relay strip still reflect that band's parameters. - Default editor size grows to 1000x868 to fit the new strip cleanly; minimum bumps to 820x860 with the spectrum still absorbing vertical shortfall down to 130 px. The existing gate / relay tabs stay in place — gate-tab edits and column edits both target the same per-band APVTS parameters, so the change is purely additive at the data layer. Refs v0.6.0-threshold.md UI6-C4. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
Pull request overview
Adds a new per-band “gate control column” strip directly under the spectrum display, aligning each band’s controls with its spectral region and enabling relayout when crossovers/NUM_BANDS change.
Changes:
- Introduces
BandGate::BandColumncomponent with per-band APVTS attachments and active-band highlighting. - Updates
PluginEditorto own/layout a fixed set of columns and relayout them onNUM_BANDSandCROSSOVER_nchanges. - Adjusts editor default/min sizes to accommodate the new strip.
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 5 comments.
| File | Description |
|---|---|
| source/PluginEditor.h | Adds BandColumn ownership, layout/refresh helpers, and required includes. |
| source/PluginEditor.cpp | Instantiates columns, listens for crossover changes, implements log-frequency layout, and updates sizing/layout. |
| source/Editor/BandColumn.h | New component interface for a per-band vertical control strip with fixed-band attachments. |
| source/Editor/BandColumn.cpp | New component implementation (controls, attachments, painting, and internal layout). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+408
to
+410
| xL = juce::jmax (xL + 1, stripArea.getX()); | ||
| if (xR - xL < 60) | ||
| xR = xL + 60; |
Comment on lines
+311
to
+314
| else if (parameterID.startsWith ("CROSSOVER_")) | ||
| { | ||
| safe->resized(); | ||
| } |
Comment on lines
+555
to
+556
| constexpr int bandColumnsH = 132; | ||
| layoutBandColumns (area.removeFromTop (bandColumnsH)); |
Comment on lines
+10
to
+17
| juce::Colour bandColourFor (int idx) | ||
| { | ||
| // Matches SpectrumVisualizer::bandColour so spectrum band lanes and the | ||
| // column header below them agree on the per-band tint. | ||
| static const juce::uint32 cols[] = { | ||
| 0xff4ecdc4, 0xffffe66d, 0xffff6b6b, 0xffa29bfe, 0xff95e1d3, 0xfff38181 | ||
| }; | ||
| return juce::Colour (cols[(size_t) idx % (sizeof (cols) / sizeof (cols[0]))]); |
Comment on lines
+553
to
+557
| // UI6-C4: band-column strip directly under the spectrum so the gate controls | ||
| // sit visually beneath the band region they affect. | ||
| constexpr int bandColumnsH = 132; | ||
| layoutBandColumns (area.removeFromTop (bandColumnsH)); | ||
| area.removeFromTop (Layout::gap); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds per-band gate-control columns directly under the spectrum so the editor reads top-to-bottom as "spectrum → the bands inside it → their controls", matching the threshold's spectral-identity requirement.
BandGate::BandColumn— narrow vertical strip with a tinted header (same colour the spectrum uses for that band's lane), a threshold slider, tilt + smoothing knobs, and F/S/M toggles. Owns its own APVTS attachments for a fixed band index — noACTIVE_BANDswap.PluginEditorowns 6 columns; only the firstNUM_BANDSare visible.layoutBandColumns()positions each column on the same log-frequency axis the spectrum uses, so columns line up under their band region.CROSSOVER_nchanges trigger a relayout via the new parameter listener.ACTIVE_BANDso the existing gate tab + relay strip continue to reflect that band's parameters.The existing gate / relay tabs stay in place — both the gate tab and the columns target the same per-band APVTS parameters, so this is purely additive at the data layer.
Layout impact
Refs
v0.6.0-threshold.mdUI6-C4.Dependencies
Test plan
cmake --build build --target BandGate_VST3succeeds.NUM_BANDS = 5, each tinted to match its band lane.NUM_BANDS: confirm columns appear / disappear from the right.🤖 Generated with Claude Code