Vital
Loading...
Searching...
No Matches
slew_limiter_overlay.cpp
Go to the documentation of this file.
2
3#include "skin.h"
4#include "wave_frame.h"
5#include "synth_slider.h"
7
8SlewLimiterOverlay::SlewLimiterOverlay() : WavetableComponentOverlay("SLEW LIMITER"), slew_modifier_(nullptr) {
9 current_frame_ = nullptr;
10
11 // Create and configure up slew limit slider
12 up_slew_limit_ = std::make_unique<SynthSlider>("up_slew_limit");
14 up_slew_limit_->setAlwaysOnTop(true);
15 up_slew_limit_->getImageComponent()->setAlwaysOnTop(true);
16 up_slew_limit_->addListener(this);
17 up_slew_limit_->setRange(0.0f, 1.0f);
18 up_slew_limit_->setDoubleClickReturnValue(true, 0.0f);
20 up_slew_limit_->setSliderStyle(Slider::RotaryHorizontalVerticalDrag);
21
22 // Create and configure down slew limit slider
23 down_slew_limit_ = std::make_unique<SynthSlider>("down_slew_limit");
25 down_slew_limit_->setAlwaysOnTop(true);
26 down_slew_limit_->getImageComponent()->setAlwaysOnTop(true);
27 down_slew_limit_->addListener(this);
28 down_slew_limit_->setRange(0.0f, 1.0f);
29 down_slew_limit_->setDoubleClickReturnValue(true, 0.0f);
31 down_slew_limit_->setSliderStyle(Slider::RotaryHorizontalVerticalDrag);
32
33 // Add titles for controls
35 controls_background_.addTitle("DOWN LIMIT");
37}
38
40 if (keyframe == nullptr)
41 current_frame_ = nullptr;
42 else if (keyframe->owner() == slew_modifier_) {
44 up_slew_limit_->setValue(current_frame_->getSlewUpLimit(), dontSendNotification);
45 down_slew_limit_->setValue(current_frame_->getSlewDownLimit(), dontSendNotification);
46 up_slew_limit_->redoImage();
47 down_slew_limit_->redoImage();
48 }
49}
50
51void SlewLimiterOverlay::setEditBounds(Rectangle<int> bounds) {
52 static constexpr float kLimitWidthHeightRatio = 4.0f;
53
54 int padding = getPadding();
55 int limit_width = bounds.getHeight() * kLimitWidthHeightRatio;
56 int total_width = 2 * limit_width + padding;
57 setControlsWidth(total_width);
59
60 int x = bounds.getX() + (bounds.getWidth() - total_width) / 2;
61 int title_height = WavetableComponentOverlay::kTitleHeightRatio * bounds.getHeight();
62 int y = bounds.getY() + title_height;
63 int height = bounds.getHeight() - title_height;
64 up_slew_limit_->setBounds(x, y, limit_width, height);
65 down_slew_limit_->setBounds(up_slew_limit_->getRight() + padding, y, limit_width, height);
66
68 controls_background_.addLine(limit_width);
69
70 up_slew_limit_->redoImage();
71 down_slew_limit_->redoImage();
72}
73
74void SlewLimiterOverlay::sliderValueChanged(Slider* moved_slider) {
75 if (current_frame_ == nullptr)
76 return;
77
78 if (moved_slider == up_slew_limit_.get()) {
79 float value = up_slew_limit_->getValue();
81 }
82 else if (moved_slider == down_slew_limit_.get()) {
83 float value = down_slew_limit_->getValue();
85 }
86
87 notifyChanged(false);
88}
89
90void SlewLimiterOverlay::sliderDragEnded(Slider* moved_slider) {
91 notifyChanged(true);
92}
float getSlewUpLimit()
Gets the upward slew limit.
Definition slew_limit_modifier.h:49
float getSlewDownLimit()
Gets the downward slew limit.
Definition slew_limit_modifier.h:58
void setSlewDownLimit(float slew_down_limit)
Sets the downward slew limit parameter.
Definition slew_limit_modifier.h:72
void setSlewUpLimit(float slew_up_limit)
Sets the upward slew limit parameter.
Definition slew_limit_modifier.h:65
SlewLimitModifierKeyframe * getKeyframe(int index)
Retrieves a SlewLimitModifierKeyframe by index.
Definition slew_limit_modifier.cpp:85
SlewLimitModifier::SlewLimitModifierKeyframe * current_frame_
Currently selected frame.
Definition slew_limiter_overlay.h:75
std::unique_ptr< SynthSlider > down_slew_limit_
Slider for downward slew limit.
Definition slew_limiter_overlay.h:78
SlewLimitModifier * slew_modifier_
The assigned SlewLimitModifier.
Definition slew_limiter_overlay.h:74
virtual void frameSelected(WavetableKeyframe *keyframe) override
Called when a new frame is selected in the wavetable editor.
Definition slew_limiter_overlay.cpp:39
void sliderValueChanged(Slider *moved_slider) override
Called when a slider value changes.
Definition slew_limiter_overlay.cpp:74
virtual void setEditBounds(Rectangle< int > bounds) override
Sets the layout of the editing controls.
Definition slew_limiter_overlay.cpp:51
std::unique_ptr< SynthSlider > up_slew_limit_
Slider for upward slew limit.
Definition slew_limiter_overlay.h:77
void sliderDragEnded(Slider *moved_slider) override
Called when a slider drag operation ends.
Definition slew_limiter_overlay.cpp:90
SlewLimiterOverlay()
Constructor.
Definition slew_limiter_overlay.cpp:8
void addSlider(SynthSlider *slider, bool show=true, bool listen=true)
Definition synth_section.cpp:445
static TextLookAndFeel * instance()
Singleton instance access.
Definition text_look_and_feel.h:106
void addTitle(const std::string &title)
Adds a title string for the next control section.
Definition wavetable_component_overlay.h:94
void addLine(int position)
Adds a vertical line divider at the given position.
Definition wavetable_component_overlay.h:88
void clearTitles()
Clears all control section titles.
Definition wavetable_component_overlay.h:82
void clearLines()
Clears all line divider positions.
Definition wavetable_component_overlay.h:77
A base overlay component for editing and interacting with a wavetable component's parameters.
Definition wavetable_component_overlay.h:22
void setControlsWidth(int width)
Sets the total width for controls in the overlay.
Definition wavetable_component_overlay.h:267
ControlsBackground controls_background_
Definition wavetable_component_overlay.h:300
virtual void setEditBounds(Rectangle< int > bounds)
Sets the editing bounds within which controls and titles are placed.
Definition wavetable_component_overlay.cpp:67
static constexpr float kTitleHeightRatio
Definition wavetable_component_overlay.h:32
int getPadding()
Gets the current padding value.
Definition wavetable_component_overlay.h:248
void notifyChanged(bool mouse_up)
Notifies listeners that a change has occurred to the frame.
Definition wavetable_component_overlay.cpp:86
Represents a single state of a waveform at a specific position in a wavetable.
Definition wavetable_keyframe.h:35
int index()
Gets the index of this keyframe within its owner component.
Definition wavetable_keyframe.cpp:32
WavetableComponent * owner()
Gets the WavetableComponent that owns this keyframe.
Definition wavetable_keyframe.h:152
Declares the SynthSlider and related classes, providing various slider styles and functionality in th...