82 void mouseDown(
const MouseEvent& e)
override;
83 void mouseUp(
const MouseEvent& e)
override;
84 void mouseExit(
const MouseEvent& e)
override;
130 return color.withSaturation(0.0f);
170 bool hasAux() {
return !aux_name_.isEmpty(); }
204 std::vector<Listener*> listeners_;
206 Point<int> mouse_down_position_;
207 Component* color_component_;
214 bool current_modulator_;
218 bool draw_background_;
250 OpenGlQuad::focusLost(cause);
252 for (
Listener* listener : listeners_)
253 listener->expansionFocusLost();
260 void setAmountControls(std::vector<ModulationAmountKnob*> amount_controls) { amount_controls_ = amount_controls; }
269 std::vector<ModulationAmountKnob*> amount_controls_;
270 std::vector<Listener*> listeners_;
303 std::map<std::string, SynthSlider*> sliders,
383 void reset()
override;
409 hideModulationAmountCallout();
458 void makeCurrentModulatorAmountsVisible();
459 void makeModulationsVisible(
SynthSlider* destination,
bool visible);
460 void positionModulationAmountSlidersInside(
const std::string& source,
461 std::vector<vital::ModulationConnection*> connections);
462 void positionModulationAmountSlidersCallout(
const std::string& source,
463 std::vector<vital::ModulationConnection*> connections);
464 void showModulationAmountCallout(
const std::string& source);
465 void hideModulationAmountCallout();
466 void positionModulationAmountSliders(
const std::string& source);
467 void positionModulationAmountSliders();
468 bool enteringHoverValue();
470 void hideModulationAmountOverlay();
472 std::unique_ptr<Component> modulation_destinations_;
479 bool temporarily_set_bipolar_;
485 std::map<Viewport*, std::unique_ptr<OpenGlMultiQuad>> rotary_destinations_;
486 std::map<Viewport*, std::unique_ptr<OpenGlMultiQuad>> linear_destinations_;
487 std::map<Viewport*, std::unique_ptr<OpenGlMultiQuad>> rotary_meters_;
488 std::map<Viewport*, std::unique_ptr<OpenGlMultiQuad>> linear_meters_;
489 Point<int> mouse_drag_start_;
490 Point<int> mouse_drag_position_;
493 bool changing_hover_modulation_;
496 std::map<std::string, ModulationButton*> modulation_buttons_;
497 std::map<std::string, std::unique_ptr<ExpandModulationButton>> modulation_callout_buttons_;
498 std::map<std::string, const vital::StatusOutput*> modulation_source_readouts_;
499 std::map<std::string, vital::poly_float> smooth_mod_values_;
500 std::map<std::string, bool> active_mod_values_;
502 long long last_milliseconds_;
503 std::unique_ptr<BarRenderer> modulation_source_meters_;
505 std::map<std::string, ModulationDestination*> destination_lookup_;
506 std::map<std::string, SynthSlider*> slider_model_lookup_;
507 std::map<std::string, ModulationAmountKnob*> modulation_amount_lookup_;
509 std::vector<std::unique_ptr<ModulationDestination>> all_destinations_;
510 std::map<std::string, std::unique_ptr<ModulationMeter>> meter_lookup_;
511 std::map<int, int> aux_connections_from_to_;
512 std::map<int, int> aux_connections_to_from_;
Interface for objects interested in ModulationAmountKnob events.
Definition modulation_manager.h:44
virtual void setModulationBipolar(ModulationAmountKnob *modulation_knob, bool bipolar)=0
Called when modulation bipolar state changes.
virtual void setModulationBypass(ModulationAmountKnob *modulation_knob, bool bypass)=0
Called when modulation bypass state changes.
virtual ~Listener()
Definition modulation_manager.h:46
virtual void disconnectModulation(ModulationAmountKnob *modulation_knob)=0
Called when the modulation is disconnected.
virtual void setModulationStereo(ModulationAmountKnob *modulation_knob, bool stereo)=0
Called when modulation stereo state changes.
A specialized SynthSlider that represents a single modulation amount control.
Definition modulation_manager.h:27
void setStereo(bool stereo)
Definition modulation_manager.h:147
virtual Colour getUnselectedColor() const override
Definition modulation_manager.h:134
virtual Colour getThumbColor() const override
Definition modulation_manager.h:142
void setAux(String name)
Sets an auxiliary modulation name for this knob (for chained modulations).
Definition modulation_manager.h:160
bool isBypass()
Definition modulation_manager.h:149
bool enteringValue()
Definition modulation_manager.h:152
bool isCurrentModulator()
Definition modulation_manager.h:153
String getOriginalName()
Gets the knob's original name before auxiliary assignment.
Definition modulation_manager.h:185
void handleModulationMenuCallback(int result)
Handles a selection from the modulation context menu.
Definition modulation_manager.cpp:272
virtual Colour getSelectedColor() const override
Definition modulation_manager.h:138
void makeVisible(bool visible)
Toggles the knob's visibility smoothly or immediately.
Definition modulation_manager.cpp:298
bool isStereo()
Definition modulation_manager.h:150
void setBipolar(bool bipolar)
Definition modulation_manager.h:148
int index()
Definition modulation_manager.h:154
void setDestinationComponent(Component *component, const std::string &name)
Associates the knob with a destination component (slider or UI element).
Definition modulation_manager.cpp:322
void setSource(const std::string &name)
Sets the source parameter name for this modulation.
Definition modulation_manager.cpp:336
bool hasAux()
Checks if this knob currently has an auxiliary modulation.
Definition modulation_manager.h:170
void addModulationAmountListener(Listener *listener)
Adds a listener interested in this knob's modulation events.
Definition modulation_manager.h:199
ModulationAmountKnob(String name, int index)
Constructs a ModulationAmountKnob.
Definition modulation_manager.cpp:172
void setCurrentModulator(bool current)
Marks this knob as representing the currently selected modulator.
Definition modulation_manager.cpp:314
void hideImmediately()
Hides the knob immediately without animations.
Definition modulation_manager.cpp:307
void mouseExit(const MouseEvent &e) override
Definition modulation_manager.cpp:256
void mouseDown(const MouseEvent &e) override
Mouse event overrides for custom behavior.
Definition modulation_manager.cpp:191
Colour getInternalColor()
Returns the internal color for drawing this knob.
Definition modulation_manager.cpp:330
MenuOptions
Options in the context menu of the modulation amount knob.
Definition modulation_manager.h:33
@ kDisconnect
Removes the modulation connection.
Definition modulation_manager.h:34
@ kToggleBypass
Toggles bypassing the modulation.
Definition modulation_manager.h:35
@ kToggleBipolar
Toggles bipolar (positive and negative) modulation.
Definition modulation_manager.h:36
@ kToggleStereo
Toggles stereo modulation mode.
Definition modulation_manager.h:37
void setBypass(bool bypass)
Definition modulation_manager.h:146
void mouseUp(const MouseEvent &e) override
Definition modulation_manager.cpp:241
bool isBipolar()
Definition modulation_manager.h:151
void removeAux()
Removes the auxiliary modulation connection.
Definition modulation_manager.h:175
force_inline bool hovering() const
Checks if the mouse is currently hovering over this knob.
Definition modulation_manager.h:191
Colour withBypassSaturation(Colour color) const
Definition modulation_manager.h:128
Definition modulation_manager.cpp:97
Interface for objects interested in focus changes of the ModulationExpansionBox.
Definition modulation_manager.h:237
virtual ~Listener()
Definition modulation_manager.h:239
virtual void expansionFocusLost()=0
Called when the expansion box loses focus.
A popup box that displays multiple ModulationAmountKnob controls in a grid.
Definition modulation_manager.h:231
void focusLost(FocusChangeType cause) override
Definition modulation_manager.h:249
void setAmountControls(std::vector< ModulationAmountKnob * > amount_controls)
Sets the amount controls displayed inside this expansion box.
Definition modulation_manager.h:260
ModulationExpansionBox()
Definition modulation_manager.h:247
void addListener(Listener *listener)
Adds a Listener for expansion box focus events.
Definition modulation_manager.h:266
A top-level section for managing all modulation connections, amounts, and related UI components.
Definition modulation_manager.h:290
void modulationDragged(const MouseEvent &e) override
Called while modulation is being dragged out (during mouse drag).
Definition modulation_manager.cpp:866
void disconnectModulation(ModulationAmountKnob *modulation_knob) override
Called when the modulation is disconnected.
Definition modulation_manager.cpp:948
void renderMeters(OpenGlWrapper &open_gl, bool animate)
Definition modulation_manager.cpp:1084
void renderOpenGlComponents(OpenGlWrapper &open_gl, bool animate) override
Renders all OpenGL components in this section and sub-sections.
Definition modulation_manager.cpp:1052
void setModulationBipolar(ModulationAmountKnob *modulation_knob, bool bipolar) override
Called when modulation bipolar state changes.
Definition modulation_manager.cpp:983
void drawDraggingModulation(OpenGlWrapper &open_gl)
Definition modulation_manager.cpp:1031
void setModulationSliderValue(int index, float value)
Sets the modulation value for a given modulation index.
Definition modulation_manager.cpp:1439
static constexpr int kIndicesPerMeter
Definition modulation_manager.h:292
void removeModulation(std::string source, std::string destination)
Removes a modulation connection between a source and a destination.
Definition modulation_manager.cpp:1408
void drawModulationDestinations(OpenGlWrapper &open_gl)
Definition modulation_manager.cpp:1010
void modulationWheelMoved(const MouseEvent &e, const MouseWheelDetails &wheel) override
Called when the mouse wheel moves while interacting with the modulation button.
Definition modulation_manager.cpp:900
static constexpr float kDragImageWidthPercent
Definition modulation_manager.h:293
int getModulationIndex(std::string source, std::string destination)
Definition modulation_manager.cpp:1266
void modulationAmountChanged(SynthSlider *slider) override
Definition modulation_manager.cpp:604
void resized() override
Called when the component is resized. Arranges layout of child components.
Definition modulation_manager.cpp:516
void modulationsChanged(const std::string &name) override
Definition modulation_manager.cpp:1246
void initOpenGlComponents(OpenGlWrapper &open_gl) override
Initializes all OpenGL components in this section and sub-sections.
Definition modulation_manager.cpp:991
ModulationManager(std::map< std::string, ModulationButton * > modulation_buttons, std::map< std::string, SynthSlider * > sliders, vital::output_map mono_modulations, vital::output_map poly_modulations)
Constructs a ModulationManager.
Definition modulation_manager.cpp:341
void mouseDown(SynthSlider *slider) override
Definition modulation_manager.cpp:1318
void createModulationMeter(const vital::Output *mono_total, const vital::Output *poly_total, SynthSlider *slider, OpenGlMultiQuad *quads, int index)
Creates a modulation meter for a given slider and places it into an OpenGlMultiQuad for visualization...
Definition modulation_manager.cpp:491
void setModulationSliderValues(int index, float value)
Sets the modulation values and updates all connected auxiliary nodes.
Definition modulation_manager.cpp:1454
void mouseUp(SynthSlider *slider) override
Definition modulation_manager.cpp:1337
int getIndexForModulationSlider(Slider *slider)
Definition modulation_manager.cpp:1278
void startModulationMap(ModulationButton *source, const MouseEvent &e) override
Called when the user begins dragging out to map the modulation (dragging out of the button).
Definition modulation_manager.cpp:663
void clearTemporaryHoverModulation()
Definition modulation_manager.cpp:856
float getAuxMultiplier(int index)
Definition modulation_manager.cpp:1585
void modulationSelected(ModulationButton *source) override
Called when this modulation button is selected.
Definition modulation_manager.cpp:631
void setModulationSettings(ModulationAmountKnob *modulation_knob)
Definition modulation_manager.cpp:958
void setModulationSliderBipolar(int index, bool bipolar)
Sets the bipolar state for a given modulation index.
Definition modulation_manager.cpp:1448
void clearModulationSource()
Definition modulation_manager.cpp:939
void destroyOpenGlComponents(OpenGlWrapper &open_gl) override
Destroys all OpenGL components in this section and sub-sections.
Definition modulation_manager.cpp:1166
void reset() override
Resets the section and all sub-sections.
Definition modulation_manager.cpp:1546
void hoverEnded(SynthSlider *slider) override
Definition modulation_manager.cpp:1237
void doubleClick(SynthSlider *slider) override
Definition modulation_manager.cpp:1342
void modulationCleared() override
Called when all modulations associated with this button have been cleared.
Definition modulation_manager.cpp:648
void renderSourceMeters(OpenGlWrapper &open_gl, int index)
Definition modulation_manager.cpp:1107
void endModulationMap() override
Called when the user finishes dragging out modulation connections.
Definition modulation_manager.cpp:914
void modulationDraggedToHoverSlider(ModulationAmountKnob *hover_slider)
Definition modulation_manager.cpp:759
void modulationLostFocus(ModulationButton *source) override
Called when the modulation button loses keyboard focus.
Definition modulation_manager.cpp:934
void drawCurrentModulator(OpenGlWrapper &open_gl)
Definition modulation_manager.cpp:1018
void connectModulation(std::string source, std::string destination)
Connects a modulation source to a destination parameter.
Definition modulation_manager.cpp:1398
void hoverStarted(SynthSlider *slider) override
Definition modulation_manager.cpp:1223
void createModulationSlider(std::string name, SynthSlider *slider, bool poly)
Creates internal structures for handling modulation of a given parameter (slider).
Definition modulation_manager.cpp:503
void updateSmoothModValues()
Definition modulation_manager.cpp:1146
void setModulationBypass(ModulationAmountKnob *modulation_knob, bool bypass) override
Called when modulation bypass state changes.
Definition modulation_manager.cpp:979
void hideUnusedHoverModulations()
Definition modulation_manager.cpp:1566
void setVisibleMeterBounds()
Definition modulation_manager.cpp:1968
~ModulationManager()
Destructor.
Definition modulation_manager.cpp:514
void setModulationSliderScale(int index)
Adjusts the displayed range of a modulation slider based on parameter scaling.
Definition modulation_manager.cpp:1475
void setModulationAmounts()
Definition modulation_manager.cpp:1944
void expansionFocusLost() override
Called when the expansion box loses focus.
Definition modulation_manager.h:408
void modulationClicked(ModulationButton *source) override
Called when the modulation button is clicked (mouse up) without dragging out.
Definition modulation_manager.cpp:643
void initAuxConnections()
Definition modulation_manager.cpp:1520
void addAuxConnection(int from_index, int to_index)
Definition modulation_manager.cpp:1595
void buttonClicked(Button *button) override
Called when a button is clicked. Updates the synth parameter accordingly.
Definition modulation_manager.cpp:1384
void setTemporaryModulationBipolar(Component *component, bool bipolar)
Definition modulation_manager.cpp:822
void clearTemporaryModulation()
Definition modulation_manager.cpp:843
void paintBackground(Graphics &g) override
Paints the background of the section. Calls paintContainer, heading, knobs, children.
Definition modulation_manager.h:429
void modulationDisconnected(vital::ModulationConnection *connection, bool last) override
Called when a modulation connection is disconnected.
Definition modulation_manager.cpp:621
void menuFinished(SynthSlider *slider) override
Definition modulation_manager.cpp:1241
void removeAuxDestinationConnection(int to_index)
Definition modulation_manager.cpp:1617
void modulationRemoved(SynthSlider *slider) override
Definition modulation_manager.cpp:613
void modulationDraggedToComponent(Component *component, bool bipolar)
Definition modulation_manager.cpp:781
void parentHierarchyChanged() override
Definition modulation_manager.cpp:570
vital::ModulationConnection * getConnection(int index)
Definition modulation_manager.cpp:1296
void updateModulationMeterLocations()
Definition modulation_manager.cpp:588
bool hasFreeConnection()
Definition modulation_manager.cpp:652
void removeAuxSourceConnection(int from_index)
Definition modulation_manager.cpp:1606
void endModulationEdit(SynthSlider *slider) override
Definition modulation_manager.cpp:1357
void sliderValueChanged(Slider *slider) override
Called when a slider value changes. Updates the synth parameter accordingly.
Definition modulation_manager.cpp:1361
void setModulationValues(std::string source, std::string destination, vital::mono_float amount, bool bipolar, bool stereo, bool bypass)
Sets multiple modulation properties at once.
Definition modulation_manager.cpp:1504
vital::ModulationConnection * getConnectionForModulationSlider(Slider *slider)
Definition modulation_manager.cpp:1285
void setModulationStereo(ModulationAmountKnob *modulation_knob, bool stereo) override
Called when modulation stereo state changes.
Definition modulation_manager.cpp:987
void beginModulationEdit(SynthSlider *slider) override
Definition modulation_manager.cpp:1353
The main modulation matrix component displaying multiple modulation rows and related controls.
Definition modulation_matrix.h:361
A visual component that displays the current modulation amount applied to a slider parameter.
Definition modulation_meter.h:21
A component for rendering multiple quads using OpenGL, with customizable colors, rounding,...
Definition open_gl_multi_quad.h:16
A convenience class for a single quad rendered via OpenGL.
Definition open_gl_multi_quad.h:447
virtual Colour getUnselectedColor() const
Definition synth_slider.h:209
void setModulationAmount(float modulation)
Definition synth_slider.h:156
virtual Colour getThumbColor() const
Definition synth_slider.h:242
void setColors()
Updates internal colors based on the current skin and state.
Definition synth_slider.cpp:144
virtual Colour getSelectedColor() const
Definition synth_slider.h:223
Manages and provides access to vertex and fragment shaders used by the OpenGL rendering pipeline.
Definition shaders.h:19
Base class for all synthesizer sections, providing UI layout, painting, and interaction logic.
Definition synth_section.h:193
virtual void animate(bool animate)
Triggers animation state change in sub-sections if needed.
Definition synth_section.cpp:822
Listener interface for receiving slider events such as mouse interactions, modulation changes,...
Definition synth_slider.h:347
A specialized slider with extended functionality for modulation, parameter control,...
Definition synth_slider.h:314
std::unique_ptr< OpenGlTextEditor > text_entry_
Definition synth_slider.h:767
A helper class to track the "status" of a particular Output as a poly_float value.
Definition synth_module.h:35
#define force_inline
Definition common.h:23
std::map< std::string, Output * > output_map
Maps parameter names to Output pointers, representing output signals from various modules.
Definition synth_types.h:229
constexpr int kMaxModulationConnections
Maximum number of modulation connections allowed.
Definition synth_constants.h:49
float mono_float
Definition common.h:33
A helper struct containing references to OpenGL context, shaders, and display scale.
Definition shaders.h:174
A structure representing a single modulation connection between a modulation source and a destination...
Definition synth_types.h:30
Holds and manages a buffer of samples (poly_float) for a Processor's output.
Definition processor.h:35
Defines the SynthModule class which extends ProcessorRouter to form a building block of the Vital syn...
Declares the SynthSlider and related classes, providing various slider styles and functionality in th...