33#define STONEYVCV_HPP_INCLUDED 1
38#include <StoneyDSP/Core.hpp>
44 #define DBG(msg, ...) do { ::std::cerr << std::string(msg, ##__VA_ARGS__) << std::endl; } while (0)
46 #define DBG(msg, ...) ::StoneyDSP::ignoreUnused(msg, ##__VA_ARGS__)
50 #define assert_message(condition, message) assert((condition) && (message))
52 #define assert_message(condition, message) ::StoneyDSP::ignoreUnused(condition, message)
107const extern ::StoneyDSP::float_t
vMin;
108const extern ::StoneyDSP::float_t
vMax;
109const extern ::StoneyDSP::float_t
vNominal;
110const extern ::StoneyDSP::float_t
vBias;
111const extern ::StoneyDSP::float_t
vGround;
112const extern ::StoneyDSP::float_t
vFloor;
135 DBG(
"Constructing StoneyDSP::StoneyVCV::Engine");
138 virtual ~Engine() noexcept = 0;
158 DBG(
"Destroying StoneyDSP::StoneyVCV::Engine");
162template struct ::StoneyDSP::StoneyVCV::Engine<double>;
163template struct ::StoneyDSP::StoneyVCV::Engine<float>;
174template <
class TW
idget = ::rack::w
idget::W
idget>
177 static_assert(::std::is_base_of<::rack::widget::Widget, TWidget>::value,
"TWidget must be derived from rack::widget::Widget");
195template <
class TW
idget = ::rack::w
idget::W
idget>
199 o->box.pos =
o->box.pos.minus(
o->box.size.div(2));
216template <
class TW
idget = ::rack::w
idget::W
idget>
236template <
class TW
idget = ::rack::w
idget::W
idget>
259template <
class TParamW
idget = ::rack::app::ParamW
idget>
262 using namespace rack;
264 static_assert(::std::is_base_of<::rack::app::ParamWidget, TParamWidget>::value,
"TParamWidget must be derived from rack::app::ParamWidget");
268 o->app::ParamWidget::module =
module;
269 o->app::ParamWidget::paramId =
paramId;
270 o->initParamQuantity();
289template <
class TParamW
idget = ::rack::app::ParamW
idget>
293 o->box.pos =
o->box.pos.minus(
o->box.size.div(2));
312template <
class TPortW
idget = ::rack::app::PortW
idget>
316 using namespace ::rack;
318 static_assert(::std::is_base_of<::rack::app::PortWidget, TPortWidget>::value,
"TPortWidget must be derived from rack::app::PortWidget");
322 o->app::PortWidget::module =
module;
323 o->app::PortWidget::type = ::rack::engine::Port::INPUT;
324 o->app::PortWidget::portId =
inputId;
343template <
class TPortW
idget = ::rack::app::PortW
idget>
347 o->box.pos =
o->box.pos.minus(
o->box.size.div(2));
366template <
class TPortW
idget = ::rack::app::PortW
idget>
370 using namespace ::rack;
372 static_assert(::std::is_base_of<::rack::app::PortWidget, TPortWidget>::value,
"TPortWidget must be derived from rack::app::PortWidget");
376 o->app::PortWidget::module =
module;
377 o->app::PortWidget::type = ::rack::engine::Port::OUTPUT;
397template <
class TPortW
idget = ::rack::app::PortW
idget>
401 o->box.pos =
o->box.pos.minus(
o->box.size.div(2));
426#define STONEYVCV_DECLARE_WIDGET_FACTORY_FUNCTIONS(ClassName) \
428 template <class TWidget> \
429 friend TWidget *::rack::createWidget(::rack::math::Vec pos); \
431 template <class TWidget> \
432 friend TWidget *::rack::createWidgetCentered(::rack::math::Vec pos); \
434 template <class TWidget> \
435 friend TWidget *::StoneyDSP::StoneyVCV::createWidget(::rack::math::Vec pos); \
437 template <class TWidget> \
438 friend TWidget *::StoneyDSP::StoneyVCV::createWidgetCentered(::rack::math::Vec pos); \
440 template <class TWidget> \
441 friend TWidget *::StoneyDSP::StoneyVCV::createWidgetSized(::rack::math::Vec pos, ::rack::math::Vec size); \
443 template <class TWidget> \
444 friend TWidget *::StoneyDSP::StoneyVCV::createWidgetCenteredSized(::rack::math::Vec pos, ::rack::math::Vec size);
#define DBG(msg,...)
Definition StoneyVCV.hpp:46
template::rack::app::PortWidget * ::StoneyDSP::StoneyVCV::createOutputCentered<::rack::app::PortWidget >(::rack::math::Vec pos, ::rack::engine::Module *module, int inputId)
virtual ~Engine() noexcept=0
Definition StoneyVCV.hpp:156
TParamWidget * createParamWidgetCentered(::rack::math::Vec pos, ::rack::engine::Module *module, int paramId)
Definition StoneyVCV.hpp:290
TPortWidget * createOutputCentered(::rack::math::Vec pos, ::rack::engine::Module *module, int outputId)
Definition StoneyVCV.hpp:398
template::rack::app::PortWidget * ::StoneyDSP::StoneyVCV::createInputCentered<::rack::app::PortWidget >(::rack::math::Vec pos, ::rack::engine::Module *module, int inputId)
TWidget * createWidgetCenteredSized(::rack::math::Vec pos, ::rack::math::Vec size)
Creates a Widget subclass with its top-left at a position.
Definition StoneyVCV.hpp:237
template::rack::widget::Widget * ::StoneyDSP::StoneyVCV::createWidget<::rack::widget::Widget >(::rack::math::Vec pos)
TPortWidget * createOutput(::rack::math::Vec pos, ::rack::engine::Module *module, int outputId)
Definition StoneyVCV.hpp:367
template::rack::widget::Widget * ::StoneyDSP::StoneyVCV::createWidgetCentered<::rack::widget::Widget >(::rack::math::Vec pos)
template::rack::widget::Widget * ::StoneyDSP::StoneyVCV::createWidgetSized<::rack::widget::Widget >(::rack::math::Vec pos, ::rack::math::Vec size)
TWidget * createWidgetCentered(::rack::math::Vec pos)
Creates a Widget subclass with its center at a position.
Definition StoneyVCV.hpp:196
template::rack::app::ParamWidget * ::StoneyDSP::StoneyVCV::createParamWidgetCentered<::rack::app::ParamWidget >(::rack::math::Vec pos, ::rack::engine::Module *module, int paramId)
TWidget * createWidget(::rack::math::Vec pos)
Creates a Widget subclass with its top-left at a position.
Definition StoneyVCV.hpp:175
TPortWidget * createInputCentered(::rack::math::Vec pos, ::rack::engine::Module *module, int inputId)
Definition StoneyVCV.hpp:344
template::rack::app::PortWidget * ::StoneyDSP::StoneyVCV::createOutput<::rack::app::PortWidget >(::rack::math::Vec pos, ::rack::engine::Module *module, int inputId)
TPortWidget * createInput(::rack::math::Vec pos, ::rack::engine::Module *module, int inputId)
Definition StoneyVCV.hpp:313
template::rack::widget::Widget * ::StoneyDSP::StoneyVCV::createWidgetCenteredSized<::rack::widget::Widget >(::rack::math::Vec pos, ::rack::math::Vec size)
template::rack::app::ParamWidget * ::StoneyDSP::StoneyVCV::createParamWidget<::rack::app::ParamWidget >(::rack::math::Vec pos, ::rack::engine::Module *module, int paramId)
TWidget * createWidgetSized(::rack::math::Vec pos, ::rack::math::Vec size)
Creates a Widget subclass with its top-left at a position and its size set.
Definition StoneyVCV.hpp:217
TParamWidget * createParamWidget(::rack::math::Vec pos, ::rack::engine::Module *module, int paramId)
Definition StoneyVCV.hpp:260
template::rack::app::PortWidget * ::StoneyDSP::StoneyVCV::createInput<::rack::app::PortWidget >(::rack::math::Vec pos, ::rack::engine::Module *module, int inputId)
The StoneyDSP namespace.
Definition StoneyVCV.hpp:78
Definition StoneyVCV.hpp:125
Engine()
Definition StoneyVCV.hpp:133
virtual void processSample(T *sample)=0