@@ -17,7 +17,7 @@ struct Knob : ParamWidget { | |||||
bool horizontal = false; | bool horizontal = false; | ||||
/** Enables per-sample value smoothing while dragging. */ | /** Enables per-sample value smoothing while dragging. */ | ||||
bool smooth = true; | bool smooth = true; | ||||
/** DEPRECATED. Use `ParamQuantity::snapEnabled`. */ | |||||
/** Enables value snapping to the nearest integer. */ | |||||
bool snap = false; | bool snap = false; | ||||
/** Multiplier for mouse movement to adjust knob value */ | /** Multiplier for mouse movement to adjust knob value */ | ||||
float speed = 1.f; | float speed = 1.f; | ||||
@@ -58,6 +58,8 @@ struct ParamQuantity : Quantity { | |||||
Unbounded (infinite) parameters are not randomizable, regardless of this setting. | Unbounded (infinite) parameters are not randomizable, regardless of this setting. | ||||
*/ | */ | ||||
bool randomizeEnabled = true; | bool randomizeEnabled = true; | ||||
/** Enables per-sample Engine parameter smoothing when setSmoothValue() is called. */ | |||||
bool smoothEnabled = false; | |||||
/** Rounds values to the nearest integer. */ | /** Rounds values to the nearest integer. */ | ||||
bool snapEnabled = false; | bool snapEnabled = false; | ||||
@@ -40,6 +40,8 @@ void Knob::initParamQuantity() { | |||||
if (pq) { | if (pq) { | ||||
if (snap) | if (snap) | ||||
pq->snapEnabled = true; | pq->snapEnabled = true; | ||||
if (smooth) | |||||
pq->smoothEnabled = true; | |||||
} | } | ||||
} | } | ||||
@@ -133,7 +135,7 @@ void Knob::onDragMove(const DragMoveEvent& e) { | |||||
engine::ParamQuantity* pq = getParamQuantity(); | engine::ParamQuantity* pq = getParamQuantity(); | ||||
if (pq) { | if (pq) { | ||||
float value = smooth ? pq->getSmoothValue() : pq->getValue(); | |||||
float value = pq->getSmoothValue(); | |||||
// Ratio between parameter value scale / (angle range / 2*pi) | // Ratio between parameter value scale / (angle range / 2*pi) | ||||
float rangeRatio; | float rangeRatio; | ||||
@@ -206,10 +208,7 @@ void Knob::onDragMove(const DragMoveEvent& e) { | |||||
} | } | ||||
// Set value | // Set value | ||||
if (smooth) | |||||
pq->setSmoothValue(value); | |||||
else | |||||
pq->setValue(value); | |||||
pq->setSmoothValue(value); | |||||
} | } | ||||
ParamWidget::onDragMove(e); | ParamWidget::onDragMove(e); | ||||
@@ -230,7 +229,7 @@ void Knob::onHoverScroll(const HoverScrollEvent& e) { | |||||
if (settings::knobScroll) { | if (settings::knobScroll) { | ||||
engine::ParamQuantity* pq = getParamQuantity(); | engine::ParamQuantity* pq = getParamQuantity(); | ||||
if (pq) { | if (pq) { | ||||
float value = smooth ? pq->getSmoothValue() : pq->getValue(); | |||||
float value = pq->getSmoothValue(); | |||||
float rangeRatio; | float rangeRatio; | ||||
if (pq->isBounded()) { | if (pq->isBounded()) { | ||||
@@ -254,10 +253,7 @@ void Knob::onHoverScroll(const HoverScrollEvent& e) { | |||||
} | } | ||||
value += delta; | value += delta; | ||||
if (smooth) | |||||
pq->setSmoothValue(value); | |||||
else | |||||
pq->setValue(value); | |||||
pq->setSmoothValue(value); | |||||
e.consume(this); | e.consume(this); | ||||
} | } | ||||
@@ -14,6 +14,7 @@ void Switch::initParamQuantity() { | |||||
engine::ParamQuantity* pq = getParamQuantity(); | engine::ParamQuantity* pq = getParamQuantity(); | ||||
if (pq) { | if (pq) { | ||||
pq->snapEnabled = true; | pq->snapEnabled = true; | ||||
pq->smoothEnabled = false; | |||||
if (momentary) { | if (momentary) { | ||||
pq->resetEnabled = false; | pq->resetEnabled = false; | ||||
pq->randomizeEnabled = false; | pq->randomizeEnabled = false; | ||||
@@ -22,13 +22,19 @@ void ParamQuantity::setSmoothValue(float value) { | |||||
value = math::clampSafe(value, getMinValue(), getMaxValue()); | value = math::clampSafe(value, getMinValue(), getMaxValue()); | ||||
if (snapEnabled) | if (snapEnabled) | ||||
value = std::round(value); | value = std::round(value); | ||||
APP->engine->setParamSmoothValue(module, paramId, value); | |||||
if (smoothEnabled) | |||||
APP->engine->setParamSmoothValue(module, paramId, value); | |||||
else | |||||
APP->engine->setParamValue(module, paramId, value); | |||||
} | } | ||||
float ParamQuantity::getSmoothValue() { | float ParamQuantity::getSmoothValue() { | ||||
if (!module) | if (!module) | ||||
return 0.f; | return 0.f; | ||||
return APP->engine->getParamSmoothValue(module, paramId); | |||||
if (smoothEnabled) | |||||
return APP->engine->getParamSmoothValue(module, paramId); | |||||
else | |||||
return APP->engine->getParamValue(module, paramId); | |||||
} | } | ||||
void ParamQuantity::setSmoothScaledValue(float scaledValue) { | void ParamQuantity::setSmoothScaledValue(float scaledValue) { | ||||