commit fe68e6ac98da35c5acdbaf4fc19a48014f49827e
parent d1f8cd904eec3aa36093d2933165622b901a5b8b
Author: falkTX <falktx@gmail.com>
Date: Sun, 25 May 2014 23:30:27 +0100
ImageKnob: Only reset to default if one is set; Check timePos
Diffstat:
4 files changed, 20 insertions(+), 7 deletions(-)
diff --git a/dgl/ImageKnob.hpp b/dgl/ImageKnob.hpp
@@ -76,6 +76,7 @@ private:
float fValue;
float fValueDef;
float fValueTmp;
+ bool fUsingDefault;
bool fUsingLog;
Orientation fOrientation;
diff --git a/dgl/src/ImageKnob.cpp b/dgl/src/ImageKnob.cpp
@@ -32,6 +32,7 @@ ImageKnob::ImageKnob(Window& parent, const Image& image, Orientation orientation
fValue(0.5f),
fValueDef(fValue),
fValueTmp(fValue),
+ fUsingDefault(false),
fUsingLog(false),
fOrientation(orientation),
fRotationAngle(0),
@@ -58,6 +59,7 @@ ImageKnob::ImageKnob(Widget* widget, const Image& image, Orientation orientation
fValue(0.5f),
fValueDef(fValue),
fValueTmp(fValue),
+ fUsingDefault(false),
fUsingLog(false),
fOrientation(orientation),
fRotationAngle(0),
@@ -84,6 +86,7 @@ ImageKnob::ImageKnob(const ImageKnob& imageKnob)
fValue(imageKnob.fValue),
fValueDef(imageKnob.fValueDef),
fValueTmp(fValue),
+ fUsingDefault(imageKnob.fUsingDefault),
fUsingLog(imageKnob.fUsingLog),
fOrientation(imageKnob.fOrientation),
fRotationAngle(imageKnob.fRotationAngle),
@@ -131,6 +134,7 @@ float ImageKnob::getValue() const noexcept
void ImageKnob::setDefault(float value) noexcept
{
fValueDef = value;
+ fUsingDefault = true;
}
void ImageKnob::setRange(float min, float max) noexcept
@@ -162,11 +166,6 @@ void ImageKnob::setRange(float min, float max) noexcept
}
}
- if (fValueDef < min)
- fValueDef = min;
- else if (fValueDef > max)
- fValueDef = max;
-
fMinimum = min;
fMaximum = max;
}
@@ -313,7 +312,7 @@ bool ImageKnob::onMouse(const MouseEvent& ev)
if (! contains(ev.pos))
return false;
- if (ev.mod & MODIFIER_SHIFT)
+ if ((ev.mod & MODIFIER_SHIFT) != 0 && fUsingDefault)
{
setValue(fValueDef);
fValueTmp = fValue;
diff --git a/distrho/src/DistrhoPlugin.cpp b/distrho/src/DistrhoPlugin.cpp
@@ -80,6 +80,9 @@ double Plugin::d_getSampleRate() const noexcept
#if DISTRHO_PLUGIN_WANT_TIMEPOS
const TimePos& Plugin::d_getTimePos() const noexcept
{
+ // timePos outside run() may not be valid
+ DISTRHO_SAFE_ASSERT(pData->isProcessing);
+
return pData->timePos;
}
#endif
diff --git a/distrho/src/DistrhoPluginInternal.hpp b/distrho/src/DistrhoPluginInternal.hpp
@@ -36,6 +36,8 @@ extern double d_lastSampleRate;
// Plugin private data
struct Plugin::PrivateData {
+ bool isProcessing;
+
uint32_t parameterCount;
Parameter* parameters;
@@ -61,7 +63,8 @@ struct Plugin::PrivateData {
double sampleRate;
PrivateData() noexcept
- : parameterCount(0),
+ : isProcessing(false),
+ parameterCount(0),
parameters(nullptr),
#if DISTRHO_PLUGIN_WANT_PROGRAMS
programCount(0),
@@ -353,18 +356,25 @@ public:
#if DISTRHO_PLUGIN_IS_SYNTH
void run(const float** const inputs, float** const outputs, const uint32_t frames, const MidiEvent* const midiEvents, const uint32_t midiEventCount)
{
+ DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr,);
DISTRHO_SAFE_ASSERT_RETURN(fPlugin != nullptr,);
+ fData->isProcessing = true;
fPlugin->d_run(inputs, outputs, frames, midiEvents, midiEventCount);
+ fData->isProcessing = false;
}
#else
void run(const float** const inputs, float** const outputs, const uint32_t frames)
{
+ DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr,);
DISTRHO_SAFE_ASSERT_RETURN(fPlugin != nullptr,);
+ fData->isProcessing = true;
fPlugin->d_run(inputs, outputs, frames);
+ fData->isProcessing = false;
}
#endif
+
// -------------------------------------------------------------------
void setBufferSize(const uint32_t bufferSize, bool doCallback = false)