#pragma once #include #include "../Resources.h" #include "../Params.h" namespace serum { // =========================================================================== // LFO shape view. Step-sequencer and freehand shapes are click/drag editable. // =========================================================================== class LFODisplay : public juce::Component { public: void setShape (int s) { if (shape != s) { shape = s; repaint(); } } void setShapeData (const std::vector& data, int steps); void setOnShapeEdited (std::function&, int)> cb) { onEdited = std::move (cb); } void paint (juce::Graphics& g) override; void mouseDown (const juce::MouseEvent& e) override; void mouseDrag (const juce::MouseEvent& e) override; private: int shape = 0; std::vector shapeData; int steps = 16; std::function&, int)> onEdited; float valueAt (float phase) const noexcept; void editAt (float x, float y); }; } // namespace serum