Vital
Loading...
Searching...
No Matches
synth_slider.h
Go to the documentation of this file.
1
3
4#pragma once
5
6#include "JuceHeader.h"
7
11#include "open_gl_multi_quad.h"
12#include "synth_types.h"
13
14class FullInterface;
15class OpenGlSlider;
17class SynthSection;
18
26 public:
29 OpenGlSliderQuad(OpenGlSlider* slider) : OpenGlQuad(Shaders::kRotarySliderFragment), slider_(slider) { }
30
33 virtual void init(OpenGlWrapper& open_gl) override;
34
37 void paintBackground(Graphics& g) override;
38
39 private:
40 OpenGlSlider* slider_;
41
42 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(OpenGlSliderQuad)
43};
44
52class OpenGlSlider : public Slider {
53 public:
55 static constexpr float kRotaryAngle = 0.8f * vital::kPi;
56
59 OpenGlSlider(String name) : Slider(name), parent_(nullptr), modulation_knob_(false), modulation_amount_(0.0f),
60 paint_to_image_(false), active_(true), bipolar_(false), slider_quad_(this) {
61 slider_quad_.setTargetComponent(this);
63
64 image_component_.paintEntireComponent(false);
65 image_component_.setComponent(this);
66 image_component_.setScissor(true);
67
68 slider_quad_.setActive(false);
69 image_component_.setActive(false);
70 }
71
73 virtual void resized() override {
74 Slider::resized();
75 setColors();
77 }
78
80 virtual void valueChanged() override {
81 Slider::valueChanged();
82 redoImage();
83 }
84
86 void parentHierarchyChanged() override {
87 parent_ = findParentComponentOfClass<SynthSection>();
88 Slider::parentHierarchyChanged();
89 }
90
93 void paintToImage(bool paint) {
94 paint_to_image_ = paint;
95 }
96
99 bool isText() const {
100 return &getLookAndFeel() == TextLookAndFeel::instance();
101 }
102
105 bool isTextOrCurve() const {
106 return isText() || &getLookAndFeel() == CurveLookAndFeel::instance();
107 }
108
111 bool isModulationKnob() const {
112 return modulation_knob_;
113 }
114
117 bool isRotaryQuad() const {
118 return !paint_to_image_ && getSliderStyle() == RotaryHorizontalVerticalDrag && !isTextOrCurve();
119 }
120
123 bool isHorizontalQuad() const {
124 return !paint_to_image_ && getSliderStyle() == LinearBar && !isTextOrCurve();
125 }
126
129 bool isVerticalQuad() const {
130 return !paint_to_image_ && getSliderStyle() == LinearBarVertical && !isTextOrCurve();
131 }
132
136 return &image_component_;
137 }
138
142 return &slider_quad_;
143 }
144
147 void setMaxArc(float arc) {
148 slider_quad_.setMaxArc(arc);
149 }
150
152 void setModulationKnob() { modulation_knob_ = true; }
153
156 void setModulationAmount(float modulation) { modulation_amount_ = modulation; redoImage(); }
157
160 float getModulationAmount() const { return modulation_amount_; }
161
164 virtual float getKnobSizeScale() const { return 1.0f; }
165
168 bool isBipolar() const { return bipolar_; }
169
172 bool isActive() const { return active_; }
173
176 void setBipolar(bool bipolar = true) {
177 if (bipolar_ == bipolar)
178 return;
179
180 bipolar_ = bipolar;
181 redoImage();
182 }
183
186 void setActive(bool active = true) {
187 if (active_ == active)
188 return;
189
190 active_ = active;
191 setColors();
192 redoImage();
193 }
194
197 virtual Colour getModColor() const {
198 return findColour(Skin::kModulationMeterControl, true);
199 }
200
203 virtual Colour getBackgroundColor() const {
204 return findColour(Skin::kWidgetBackground, true);
205 }
206
209 virtual Colour getUnselectedColor() const {
210 if (isModulationKnob())
211 return findColour(Skin::kWidgetBackground, true);
212 if (isRotary()) {
213 if (active_)
214 return findColour(Skin::kRotaryArcUnselected, true);
215 return findColour(Skin::kRotaryArcUnselectedDisabled, true);
216 }
217
218 return findColour(Skin::kLinearSliderUnselected, true);
219 }
220
223 virtual Colour getSelectedColor() const {
224 if (isModulationKnob()) {
225 Colour background = findColour(Skin::kWidgetBackground, true);
226 if (active_)
227 return findColour(Skin::kRotaryArc, true).interpolatedWith(background, 0.5f);
228 return findColour(Skin::kRotaryArcDisabled, true).interpolatedWith(background, 0.5f);
229 }
230 if (isRotary()) {
231 if (active_)
232 return findColour(Skin::kRotaryArc, true);
233 return findColour(Skin::kRotaryArcDisabled, true);
234 }
235 if (active_)
236 return findColour(Skin::kLinearSlider, true);
237 return findColour(Skin::kLinearSliderDisabled, true);
238 }
239
242 virtual Colour getThumbColor() const {
243 if (isModulationKnob())
244 return findColour(Skin::kRotaryArc, true);
245 if (isRotary())
246 return findColour(Skin::kRotaryHand, true);
247 if (active_)
248 return findColour(Skin::kLinearSliderThumb, true);
249 return findColour(Skin::kLinearSliderThumbDisabled, true);
250 }
251
255
258
261 void redoImage(bool skip_image = false);
262
264 void setColors();
265
269 virtual float findValue(Skin::ValueId value_id) const {
270 if (parent_)
271 return parent_->findValue(value_id);
272 return 0.0f;
273 }
274
278 void setAlpha(float alpha, bool reset = false) { slider_quad_.setAlpha(alpha, reset); }
279
282 void setDrawWhenNotVisible(bool draw) { slider_quad_.setDrawWhenNotVisible(draw); }
283
287
288 protected:
290
291 private:
292 Colour thumb_color_;
293 Colour selected_color_;
294 Colour unselected_color_;
295 Colour background_color_;
296 Colour mod_color_;
297
298 bool modulation_knob_;
299 float modulation_amount_;
300 bool paint_to_image_;
301 bool active_;
302 bool bipolar_;
303 OpenGlSliderQuad slider_quad_;
304 OpenGlImageComponent image_component_;
305
306 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(OpenGlSlider)
307};
308
314class SynthSlider : public OpenGlSlider, public TextEditor::Listener {
315 public:
326
327 static constexpr int kDefaultFormatLength = 5;
328 static constexpr int kDefaultFormatDecimalPlaces = 5;
329 static constexpr float kDefaultTextEntryWidthPercent = 0.9f;
330 static constexpr float kDefaultTextEntryHeightPercent = 0.35f;
331 static constexpr float kModulationSensitivity = 0.003f;
332 static constexpr float kTextEntryHeightPercent = 0.6f;
333
334 static constexpr float kSlowDragMultiplier = 0.1f;
335 static constexpr float kDefaultSensitivity = 1.0f;
336
337 static constexpr float kDefaultTextHeightPercentage = 0.7f;
338 static constexpr float kDefaultRotaryDragLength = 200.0f;
339 static constexpr float kRotaryModulationControlPercent = 0.26f;
340
341 static constexpr float kLinearWidthPercent = 0.26f;
342 static constexpr float kLinearHandlePercent = 1.2f;
343 static constexpr float kLinearModulationPercent = 0.1f;
344
348 public:
349 virtual ~SliderListener() { }
350 virtual void hoverStarted(SynthSlider* slider) { }
351 virtual void hoverEnded(SynthSlider* slider) { }
352 virtual void mouseDown(SynthSlider* slider) { }
353 virtual void mouseUp(SynthSlider* slider) { }
354 virtual void beginModulationEdit(SynthSlider* slider) { }
355 virtual void endModulationEdit(SynthSlider* slider) { }
356 virtual void menuFinished(SynthSlider* slider) { }
357 virtual void focusLost(SynthSlider* slider) { }
358 virtual void doubleClick(SynthSlider* slider) { }
359 virtual void modulationsChanged(const std::string& name) { }
360 virtual void modulationAmountChanged(SynthSlider* slider) { }
361 virtual void modulationRemoved(SynthSlider* slider) { }
362 virtual void guiChanged(SynthSlider* slider) { }
363 };
364
367 SynthSlider(String name);
368
370 virtual void mouseDown(const MouseEvent& e) override;
371 virtual void mouseDrag(const MouseEvent& e) override;
372 virtual void mouseEnter(const MouseEvent& e) override;
373 virtual void mouseExit(const MouseEvent& e) override;
374 virtual void mouseUp(const MouseEvent& e) override;
375 virtual void mouseDoubleClick(const MouseEvent& e) override;
376 virtual void mouseWheelMove(const MouseEvent& e, const MouseWheelDetails& wheel) override;
377 virtual void focusLost(FocusChangeType cause) override;
378
380 virtual void valueChanged() override;
381
385 String getRawTextFromValue(double value);
386
390 String getSliderTextFromValue(double value);
391
395 String getTextFromValue(double value) override;
396
400 double getValueFromText(const String& text) override;
401
405 double getAdjustedValue(double value);
406
410 double getValueFromAdjusted(double value);
411
414 void setValueFromAdjusted(double value);
415
417 virtual void parentHierarchyChanged() override;
418
423 virtual double snapValue(double attemptedValue, DragMode dragMode) override;
424
426 void textEditorTextChanged(TextEditor&) override {
427 text_entry_->redoImage();
428 }
429 void textEditorReturnKeyPressed(TextEditor& editor) override;
430 void textEditorFocusLost(TextEditor& editor) override;
431
434
436 void showTextEntry();
437
440 virtual bool shouldShowPopup() { return true; }
441
444 virtual void drawShadow(Graphics& g);
445
448 void drawRotaryShadow(Graphics& g);
449
453 void snapToValue(bool snap, float value = 0.0) {
454 snap_to_value_ = snap;
455 snap_value_ = value;
456 }
457
461 details_.value_scale = scaling_type;
462 }
463
467
470 void setStringLookup(const std::string* lookup) {
471 string_lookup_ = lookup;
472 }
473
476 void setScrollEnabled(bool enabled) {
477 scroll_enabled_ = enabled;
478 setScrollWheelEnabled(enabled);
479 }
480
483 const std::string* getStringLookup() const { return string_lookup_; }
484
487 void setUnits(const String& units) { details_.display_units = units.toStdString(); }
488
491 String getUnits() const { return details_.display_units; }
492
496 String formatValue(float value);
497
499 void setDefaultRange();
500
503 void addSliderListener(SliderListener* listener);
504
507 void showPopup(bool primary);
508
511 void hidePopup(bool primary);
512
515 void setPopupPlacement(BubbleComponent::BubblePlacement placement) {
516 popup_placement_ = placement;
517 }
518
521 void setModulationPlacement(BubbleComponent::BubblePlacement placement) {
523 }
524
527 BubbleComponent::BubblePlacement getPopupPlacement() { return popup_placement_; }
528
531 BubbleComponent::BubblePlacement getModulationPlacement() { return modulation_control_placement_; }
532
534 void notifyGuis();
535
538 void handlePopupResult(int result);
539
542 void setSensitivity(double sensitivity) { sensitivity_ = sensitivity; }
543
546 double getSensitivity() { return sensitivity_; }
547
550 Rectangle<int> getModulationMeterBounds() const;
551
554 bool hasModulationArea() const {
555 return modulation_area_.getWidth();
556 }
557
560 Rectangle<int> getModulationArea() const {
561 if (modulation_area_.getWidth())
562 return modulation_area_;
563 return getLocalBounds();
564 }
565
568 void setModulationArea(Rectangle<int> area) { modulation_area_ = area; }
569
573
576 bool isModulationStereo() const { return stereo_modulation_; }
577
581
584 void setTextHeightPercentage(float percentage) { text_height_percentage_ = percentage; }
585
589
592 float mouseHovering() const { return hovering_; }
593
596 std::vector<vital::ModulationConnection*> getConnections();
597
600 void setMouseWheelMovement(double movement) { mouse_wheel_index_movement_ = movement; }
601
604 void setMaxDisplayCharacters(int characters) { max_display_characters_ = characters; }
605
608 void setMaxDecimalPlaces(int decimal_places) { max_decimal_places_ = decimal_places; }
609
613 void setTextEntrySizePercent(float width_percent, float height_percent) {
614 text_entry_width_percent_ = width_percent;
615 text_entry_height_percent_ = height_percent;
616 redoImage();
617 }
618
622
625 void setShiftIndexAmount(int shift_amount) { shift_index_amount_ = shift_amount; }
626
629 void setShowPopupOnHover(bool show) { show_popup_on_hover_ = show; }
630
633 void setPopupPrefix(String prefix) { popup_prefix_ = prefix; }
634
635 void setPopupSuffix(const juce::String& suffix) { popupSuffix_ = suffix; }
636
639 void setKnobSizeScale(float scale) { knob_size_scale_ = scale; }
640
641 float getKnobSizeScale() const override { return knob_size_scale_; }
642
645 void useSuffix(bool use) { use_suffix_ = use; }
646
649 void setExtraModulationTarget(Component* component) { extra_modulation_target_ = component; }
650
654
657 void setModulationBarRight(bool right) { modulation_bar_right_ = right; }
658
662
665 void setDisplayMultiply(float multiply) { display_multiply_ = multiply; }
666
670
674 void overrideValue(Skin::ValueId value_id, float value) {
675 value_lookup_[value_id] = value;
676 }
677
681 float findValue(Skin::ValueId value_id) const override {
682 if (value_lookup_.count(value_id))
683 return value_lookup_.at(value_id);
684 return OpenGlSlider::findValue(value_id);
685 }
686
692 alternate_display_setting_ = { id, value };
693 alternate_details_ = details;
694 }
695
699
702 OpenGlComponent* getTextEditorComponent() { return text_entry_->getImageComponent(); }
703
704 protected:
708
711
714
717
720
723
732 Rectangle<int> modulation_area_;
742 BubbleComponent::BubblePlacement popup_placement_;
743 BubbleComponent::BubblePlacement modulation_control_placement_;
751
752 std::map<Skin::ValueId, float> value_lookup_;
755
759
760 std::pair<Skin::ValueId, float> alternate_display_setting_;
762
763 const std::string* string_lookup_;
764
767 std::unique_ptr<OpenGlTextEditor> text_entry_;
768
769 std::vector<SliderListener*> slider_listeners_;
770
771// // This is what the popup actually displays:
772// virtual juce::String getPopupText() {
773// // Typically it’s something like:
774// // return prefix_ + getDisplayValueAsString();
775// // Modify it to:
776// juce::String text = prefix_ + getDisplayValueAsString();
777// if (popupSuffix_.isNotEmpty())
778// text += ("\n" + popupSuffix_); // or ("\n" + popupSuffix_), see below
779// return text;
780// }
781
782 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(SynthSlider)
783};
static CurveLookAndFeel * instance()
Gets the singleton instance of CurveLookAndFeel.
Definition curve_look_and_feel.h:52
The main GUI container for the entire synthesizer interface.
Definition full_interface.h:61
A base component class that integrates JUCE's Component with OpenGL rendering.
Definition open_gl_component.h:20
A component that uses OpenGL to render a cached image of a JUCE component or custom drawing.
Definition open_gl_image_component.h:18
void setComponent(Component *component)
Sets the component to be drawn into the OpenGL image. If not set, uses this component.
Definition open_gl_image_component.h:83
void setActive(bool active)
Sets whether this component is active (rendered) or not.
Definition open_gl_image_component.h:113
void paintEntireComponent(bool paint_entire_component)
Controls whether paintToImage should paint the entire component hierarchy or just itself.
Definition open_gl_image_component.h:125
void setScissor(bool scissor)
Enables or disables scissor testing when drawing the image.
Definition open_gl_image_component.h:89
void setActive(bool active)
Activates or deactivates rendering of this component.
Definition open_gl_multi_quad.h:331
void setTargetComponent(Component *target_component)
Sets a target component to help position the quads.
Definition open_gl_multi_quad.h:358
void setDrawWhenNotVisible(bool draw)
Sets whether to draw even if the component is not visible.
Definition open_gl_multi_quad.h:391
force_inline void setMaxArc(float max_arc)
Sets the maximum arc angle or similar parameter used by some shaders.
Definition open_gl_multi_quad.h:158
void setAlpha(float alpha, bool reset=false)
Sets the alpha blending multiplier, can reset to this alpha.
Definition open_gl_multi_quad.h:382
A convenience class for a single quad rendered via OpenGL.
Definition open_gl_multi_quad.h:447
An extended JUCE Slider that leverages OpenGL for rendering.
Definition synth_slider.h:52
void setMaxArc(float arc)
Definition synth_slider.h:147
bool isRotaryQuad() const
Definition synth_slider.h:117
bool isText() const
Definition synth_slider.h:99
virtual Colour getUnselectedColor() const
Definition synth_slider.h:209
virtual float findValue(Skin::ValueId value_id) const
Definition synth_slider.h:269
void setModulationAmount(float modulation)
Definition synth_slider.h:156
bool isBipolar() const
Definition synth_slider.h:168
virtual float getKnobSizeScale() const
Definition synth_slider.h:164
virtual Colour getModColor() const
Definition synth_slider.h:197
float getModulationAmount() const
Definition synth_slider.h:160
virtual void resized() override
Called when the component is resized. Updates colors and display values.
Definition synth_slider.h:73
bool isHorizontalQuad() const
Definition synth_slider.h:123
bool isTextOrCurve() const
Definition synth_slider.h:105
virtual Colour getBackgroundColor() const
Definition synth_slider.h:203
virtual void valueChanged() override
Called when the slider value changes. Redraws the image to reflect the new value.
Definition synth_slider.h:80
virtual Colour getThumbColor() const
Definition synth_slider.h:242
void parentHierarchyChanged() override
Called when the parent hierarchy changes. Used for retrieving parent sections.
Definition synth_slider.h:86
void setActive(bool active=true)
Definition synth_slider.h:186
OpenGlSlider(String name)
Definition synth_slider.h:59
void setColors()
Updates internal colors based on the current skin and state.
Definition synth_slider.cpp:144
int getLinearSliderWidth()
Definition synth_slider.cpp:33
void setDrawWhenNotVisible(bool draw)
Definition synth_slider.h:282
OpenGlComponent * getImageComponent()
Definition synth_slider.h:135
void setSliderDisplayValues()
Sets the slider display values (positions, sizes) based on current style.
Definition synth_slider.cpp:39
void redoImage(bool skip_image=false)
Definition synth_slider.cpp:64
SynthSection * getSectionParent()
Definition synth_slider.h:286
void paintToImage(bool paint)
Definition synth_slider.h:93
virtual Colour getSelectedColor() const
Definition synth_slider.h:223
static constexpr float kRotaryAngle
The default rotary arc angle used for rotary sliders.
Definition synth_slider.h:55
void setAlpha(float alpha, bool reset=false)
Definition synth_slider.h:278
bool isVerticalQuad() const
Definition synth_slider.h:129
void setBipolar(bool bipolar=true)
Definition synth_slider.h:176
void setModulationKnob()
Marks this slider as a modulation knob.
Definition synth_slider.h:152
OpenGlComponent * getQuadComponent()
Definition synth_slider.h:141
bool isModulationKnob() const
Definition synth_slider.h:111
SynthSection * parent_
The parent SynthSection.
Definition synth_slider.h:289
bool isActive() const
Definition synth_slider.h:172
A specialized OpenGlQuad for rendering a slider using OpenGL.
Definition synth_slider.h:25
OpenGlSliderQuad(OpenGlSlider *slider)
Definition synth_slider.h:29
virtual void init(OpenGlWrapper &open_gl) override
Definition synth_slider.cpp:16
void paintBackground(Graphics &g) override
Definition synth_slider.cpp:29
Manages and provides access to vertex and fragment shaders used by the OpenGL rendering pipeline.
Definition shaders.h:19
ValueId
Identifiers for various UI scaling/spacing values and configuration constants.
Definition skin.h:70
@ kRotaryArcUnselectedDisabled
Definition skin.h:153
@ kLinearSliderThumb
Definition skin.h:161
@ kRotaryArcDisabled
Definition skin.h:151
@ kWidgetBackground
Definition skin.h:173
@ kRotaryArcUnselected
Definition skin.h:152
@ kLinearSliderDisabled
Definition skin.h:159
@ kRotaryArc
Definition skin.h:150
@ kModulationMeterControl
Definition skin.h:178
@ kRotaryHand
Definition skin.h:154
@ kLinearSliderThumbDisabled
Definition skin.h:162
@ kLinearSlider
Definition skin.h:158
@ kLinearSliderUnselected
Definition skin.h:160
An interface class linking the Vital synthesizer backend (SynthBase) with a GUI.
Definition synth_gui_interface.h:56
Base class for all synthesizer sections, providing UI layout, painting, and interaction logic.
Definition synth_section.h:193
float findValue(Skin::ValueId value_id) const
Finds a value in the skin overrides or from the parent if not found locally.
Definition synth_section.cpp:18
Listener interface for receiving slider events such as mouse interactions, modulation changes,...
Definition synth_slider.h:347
virtual void menuFinished(SynthSlider *slider)
Definition synth_slider.h:356
virtual void modulationAmountChanged(SynthSlider *slider)
Definition synth_slider.h:360
virtual void modulationRemoved(SynthSlider *slider)
Definition synth_slider.h:361
virtual void focusLost(SynthSlider *slider)
Definition synth_slider.h:357
virtual void hoverStarted(SynthSlider *slider)
Definition synth_slider.h:350
virtual void mouseUp(SynthSlider *slider)
Definition synth_slider.h:353
virtual void guiChanged(SynthSlider *slider)
Definition synth_slider.h:362
virtual void doubleClick(SynthSlider *slider)
Definition synth_slider.h:358
virtual void beginModulationEdit(SynthSlider *slider)
Definition synth_slider.h:354
virtual ~SliderListener()
Definition synth_slider.h:349
virtual void hoverEnded(SynthSlider *slider)
Definition synth_slider.h:351
virtual void modulationsChanged(const std::string &name)
Definition synth_slider.h:359
virtual void mouseDown(SynthSlider *slider)
Definition synth_slider.h:352
virtual void endModulationEdit(SynthSlider *slider)
Definition synth_slider.h:355
A specialized slider with extended functionality for modulation, parameter control,...
Definition synth_slider.h:314
float snap_value_
Definition synth_slider.h:738
void setScalingType(vital::ValueDetails::ValueScale scaling_type)
Definition synth_slider.h:460
void setShowPopupOnHover(bool show)
Definition synth_slider.h:629
float knob_size_scale_
Definition synth_slider.h:740
Point< int > mouse_down_position_
Definition synth_slider.h:754
void setKnobSizeScale(float scale)
Definition synth_slider.h:639
double getAdjustedValue(double value)
Definition synth_slider.cpp:430
void setTextEntryWidthPercent(float percent)
Definition synth_slider.h:621
void setModulationBarRight(bool right)
Definition synth_slider.h:657
void textEditorReturnKeyPressed(TextEditor &editor) override
Definition synth_slider.cpp:516
const std::string * getStringLookup() const
Definition synth_slider.h:483
int shift_index_amount_
Definition synth_slider.h:746
virtual bool shouldShowPopup()
Definition synth_slider.h:440
Point< int > last_modulation_edit_position_
Definition synth_slider.h:753
double getValueFromAdjusted(double value)
Definition synth_slider.cpp:466
virtual void parentHierarchyChanged() override
Called when the parent hierarchy changes, updates references to synthesizer.
Definition synth_slider.cpp:499
void setStringLookup(const std::string *lookup)
Definition synth_slider.h:470
void setModulationPlacement(BubbleComponent::BubblePlacement placement)
Definition synth_slider.h:521
void setDisplayMultiply(float multiply)
Definition synth_slider.h:665
BubbleComponent::BubblePlacement popup_placement_
Definition synth_slider.h:742
void setAlternateDisplay(Skin::ValueId id, float value, vital::ValueDetails details)
Definition synth_slider.h:691
bool has_parameter_assignment_
Definition synth_slider.h:736
static constexpr float kDefaultTextEntryWidthPercent
Definition synth_slider.h:329
virtual void focusLost(FocusChangeType cause) override
Definition synth_slider.cpp:370
void setLinearTextEntryBounds()
Sets bounds for text entry in linear mode.
Definition synth_slider.cpp:742
BubbleComponent::BubblePlacement modulation_control_placement_
Definition synth_slider.h:743
virtual void valueChanged() override
Called when the slider value changes. Notifies GUIs.
Definition synth_slider.cpp:375
virtual void mouseDrag(const MouseEvent &e) override
Definition synth_slider.cpp:264
static constexpr float kDefaultTextHeightPercentage
Definition synth_slider.h:337
String formatValue(float value)
Definition synth_slider.cpp:644
Rectangle< int > getModulationArea() const
Definition synth_slider.h:560
void setMouseWheelMovement(double movement)
Definition synth_slider.h:600
vital::ValueDetails * getDisplayDetails()
Definition synth_slider.cpp:767
String popup_prefix_
Definition synth_slider.h:725
Component * extra_modulation_target_
Definition synth_slider.h:765
PopupItems createPopupMenu()
Definition synth_slider.cpp:204
int max_display_characters_
Definition synth_slider.h:744
bool isModulationBypassed() const
Definition synth_slider.h:580
vital::ValueDetails alternate_details_
Definition synth_slider.h:761
String getRawTextFromValue(double value)
Definition synth_slider.cpp:380
bool bypass_modulation_
Definition synth_slider.h:730
void setRotaryTextEntryBounds()
Sets bounds for text entry in rotary mode.
Definition synth_slider.cpp:730
virtual void mouseDown(const MouseEvent &e) override
Mouse event overrides for custom behavior.
Definition synth_slider.cpp:234
bool shift_is_multiplicative_
Definition synth_slider.h:747
static constexpr float kSlowDragMultiplier
Definition synth_slider.h:334
void setDefaultRange()
Sets the default parameter range based on the parameter details.
Definition synth_slider.cpp:621
void setShiftIndexAmount(int shift_amount)
Definition synth_slider.h:625
void useSuffix(bool use)
Definition synth_slider.h:645
void snapToValue(bool snap, float value=0.0)
Definition synth_slider.h:453
SynthSlider(String name)
Definition synth_slider.cpp:155
void textEditorFocusLost(TextEditor &editor) override
Definition synth_slider.cpp:520
float getTextHeightPercentage()
Definition synth_slider.h:588
static constexpr int kDefaultFormatLength
Definition synth_slider.h:327
float findValue(Skin::ValueId value_id) const override
Definition synth_slider.h:681
void setExtraModulationTarget(Component *component)
Definition synth_slider.h:649
String getTextFromValue(double value) override
Definition synth_slider.cpp:404
Rectangle< int > getModulationMeterBounds() const
Definition synth_slider.cpp:673
bool stereo_modulation_
Definition synth_slider.h:729
static constexpr float kRotaryModulationControlPercent
Definition synth_slider.h:339
std::vector< vital::ModulationConnection * > getConnections()
Definition synth_slider.cpp:695
void notifyModulationAmountChanged()
Notifies listeners that modulation amount has changed.
Definition synth_slider.cpp:752
static constexpr int kDefaultFormatDecimalPlaces
Definition synth_slider.h:328
static constexpr float kLinearWidthPercent
Definition synth_slider.h:341
bool isModulationBarRight()
Definition synth_slider.h:661
String getSliderTextFromValue(double value)
Definition synth_slider.cpp:387
void setMaxDisplayCharacters(int characters)
Definition synth_slider.h:604
double mouse_wheel_index_movement_
Definition synth_slider.h:748
bool show_popup_on_hover_
Definition synth_slider.h:724
void setPopupPrefix(String prefix)
Definition synth_slider.h:633
float text_entry_width_percent_
Definition synth_slider.h:749
bool bipolar_modulation_
Definition synth_slider.h:728
float mouseHovering() const
Definition synth_slider.h:592
void setUnits(const String &units)
Definition synth_slider.h:487
void setScrollEnabled(bool enabled)
Definition synth_slider.h:476
void addSliderListener(SliderListener *listener)
Definition synth_slider.cpp:631
void notifyModulationRemoved()
Notifies listeners that a modulation was removed.
Definition synth_slider.cpp:757
float display_exponential_base_
Definition synth_slider.h:758
void setTextEntrySizePercent(float width_percent, float height_percent)
Definition synth_slider.h:613
void setSensitivity(double sensitivity)
Definition synth_slider.h:542
void hidePopup(bool primary)
Definition synth_slider.cpp:640
bool hasModulationArea() const
Definition synth_slider.h:554
std::map< Skin::ValueId, float > value_lookup_
Definition synth_slider.h:752
virtual void mouseExit(const MouseEvent &e) override
Definition synth_slider.cpp:327
void handlePopupResult(int result)
Definition synth_slider.cpp:703
double sensitivity_
Definition synth_slider.h:741
int max_decimal_places_
Definition synth_slider.h:745
virtual double snapValue(double attemptedValue, DragMode dragMode) override
Definition synth_slider.cpp:504
vital::ValueDetails::ValueScale getScalingType() const
Definition synth_slider.h:466
void overrideValue(Skin::ValueId value_id, float value)
Definition synth_slider.h:674
double getSensitivity()
Definition synth_slider.h:546
Component * getExtraModulationTarget()
Definition synth_slider.h:653
float text_entry_height_percent_
Definition synth_slider.h:750
void showPopup(bool primary)
Definition synth_slider.cpp:635
virtual void mouseUp(const MouseEvent &e) override
Definition synth_slider.cpp:302
std::unique_ptr< OpenGlTextEditor > text_entry_
Definition synth_slider.h:767
String getUnits() const
Definition synth_slider.h:491
bool isModulationStereo() const
Definition synth_slider.h:576
BubbleComponent::BubblePlacement getPopupPlacement()
Definition synth_slider.h:527
void setPopupSuffix(const juce::String &suffix)
Definition synth_slider.h:635
static constexpr float kDefaultRotaryDragLength
Definition synth_slider.h:338
void setPopupPlacement(BubbleComponent::BubblePlacement placement)
Definition synth_slider.h:515
SynthGuiInterface * synth_interface_
Definition synth_slider.h:766
static constexpr float kModulationSensitivity
Definition synth_slider.h:331
bool snap_to_value_
Definition synth_slider.h:734
bool scroll_enabled_
Definition synth_slider.h:727
static constexpr float kDefaultSensitivity
Definition synth_slider.h:335
virtual void mouseEnter(const MouseEvent &e) override
Definition synth_slider.cpp:315
virtual void mouseDoubleClick(const MouseEvent &e) override
Definition synth_slider.cpp:337
void setMaxDecimalPlaces(int decimal_places)
Definition synth_slider.h:608
BubbleComponent::BubblePlacement getModulationPlacement()
Definition synth_slider.h:531
void textEditorTextChanged(TextEditor &) override
TextEditor::Listener overrides for handling text entry.
Definition synth_slider.h:426
bool modulation_bar_right_
Definition synth_slider.h:731
float display_multiply_
Definition synth_slider.h:757
void showTextEntry()
Shows the text entry box for manual value entry.
Definition synth_slider.cpp:533
void notifyGuis()
Notifies GUI listeners of a value change.
Definition synth_slider.cpp:668
virtual void mouseWheelMove(const MouseEvent &e, const MouseWheelDetails &wheel) override
Definition synth_slider.cpp:346
String popupSuffix_
Definition synth_slider.h:726
bool hovering_
Definition synth_slider.h:735
void setDisplayExponentialBase(float base)
Definition synth_slider.h:669
static constexpr float kLinearModulationPercent
Definition synth_slider.h:343
void setSliderPositionFromText()
Sets the slider position from the current text in the text editor.
Definition synth_slider.cpp:524
std::vector< SliderListener * > slider_listeners_
Definition synth_slider.h:769
Rectangle< int > modulation_area_
Definition synth_slider.h:732
static constexpr float kTextEntryHeightPercent
Definition synth_slider.h:332
bool use_suffix_
Definition synth_slider.h:737
std::pair< Skin::ValueId, float > alternate_display_setting_
Definition synth_slider.h:760
float getKnobSizeScale() const override
Definition synth_slider.h:641
MenuId
Menu item IDs for the right-click popup menu.
Definition synth_slider.h:317
@ kDefaultValue
Definition synth_slider.h:321
@ kClearModulations
Definition synth_slider.h:323
@ kModulationList
Definition synth_slider.h:324
@ kClearMidiLearn
Definition synth_slider.h:320
@ kManualEntry
Definition synth_slider.h:322
@ kCancel
Definition synth_slider.h:318
@ kArmMidiLearn
Definition synth_slider.h:319
void setTextHeightPercentage(float percentage)
Definition synth_slider.h:584
void notifyModulationsChanged()
Notifies listeners that modulations changed.
Definition synth_slider.cpp:762
double getValueFromText(const String &text) override
Definition synth_slider.cpp:415
vital::ValueDetails details_
Definition synth_slider.h:756
OpenGlComponent * getTextEditorComponent()
Definition synth_slider.h:702
bool isModulationBipolar() const
Definition synth_slider.h:572
float text_height_percentage_
Definition synth_slider.h:739
bool sensitive_mode_
Definition synth_slider.h:733
virtual void drawShadow(Graphics &g)
Definition synth_slider.cpp:553
void setValueFromAdjusted(double value)
Definition synth_slider.cpp:495
void drawRotaryShadow(Graphics &g)
Definition synth_slider.cpp:563
const std::string * string_lookup_
Definition synth_slider.h:763
static constexpr float kDefaultTextEntryHeightPercent
Definition synth_slider.h:330
static constexpr float kLinearHandlePercent
Definition synth_slider.h:342
void setModulationArea(Rectangle< int > area)
Definition synth_slider.h:568
static TextLookAndFeel * instance()
Singleton instance access.
Definition text_look_and_feel.h:106
constexpr mono_float kPi
Pi constant.
Definition common.h:36
A helper struct containing references to OpenGL context, shaders, and display scale.
Definition shaders.h:174
A hierarchical structure of popup menu items for a selector component.
Definition synth_section.h:29
Holds metadata about a single parameter (control) in the Vital synthesizer.
Definition synth_parameters.h:23
ValueScale
Describes the scaling mode used to interpret and display parameter values.
Definition synth_parameters.h:28
ValueScale value_scale
The scaling mode of the parameter value.
Definition synth_parameters.h:45
std::string display_units
Units to display next to the parameter (e.g., "Hz", "dB").
Definition synth_parameters.h:47