DPF

DISTRHO Plugin Framework
Log | Files | Refs | Submodules | README | LICENSE

commit e3a4013f455c3ee46e03141f28cb35cee05fc422
parent 339d2fb4a0ddc5305aeaecabe88d92bf62976e5c
Author: falkTX <falktx@gmail.com>
Date:   Thu, 10 Apr 2014 20:54:12 +0100

Same stuff for DSP side; Update carla export code

Diffstat:
Mdistrho/src/DistrhoDefines.h | 27++++++++++++++++++---------
Mdistrho/src/DistrhoPluginCarla.cpp | 79+++++++++++++++++++++++++++++++++----------------------------------------------
Mdistrho/src/DistrhoUIInternal.hpp | 5+++++
3 files changed, 56 insertions(+), 55 deletions(-)

diff --git a/distrho/src/DistrhoDefines.h b/distrho/src/DistrhoDefines.h @@ -55,6 +55,15 @@ # error DISTRHO_PLUGIN_WANT_TIMEPOS undefined! #endif +/* Compatibility with non-clang compilers */ +#ifndef __has_feature +# define __has_feature(x) 0 +#endif +#ifndef __has_extension +# define __has_extension __has_feature +#endif + +/* Check OS */ #if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) # define DISTRHO_PLUGIN_EXPORT extern "C" __declspec (dllexport) # define DISTRHO_OS_WINDOWS 1 @@ -77,25 +86,25 @@ # define DISTRHO_DLL_EXTENSION "so" #endif +/* Check for C++11 support */ #if defined(HAVE_CPP11_SUPPORT) # define PROPER_CPP11_SUPPORT -#elif defined(__GNUC__) && (__cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__)) -# if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 -# define PROPER_CPP11_SUPPORT -# if (__GNUC__ * 100 + __GNUC_MINOR__) < 407 -# define override // gcc4.7+ only -# endif +#elif __cplusplus >= 201103L || (defined(__GNUC__) && defined(__GXX_EXPERIMENTAL_CXX0X__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 405) || __has_extension(cxx_noexcept) +# define PROPER_CPP11_SUPPORT +# if (defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) < 407) || ! __has_extension(cxx_override_control) +# define override // gcc4.7+ only +# define final // gcc4.7+ only # endif #endif #ifndef PROPER_CPP11_SUPPORT -# ifndef __clang__ -# define noexcept throw() -# endif +# define noexcept throw() # define override +# define final # define nullptr (0) #endif +/* Define namespace */ #ifndef DISTRHO_NO_NAMESPACE # ifndef DISTRHO_NAMESPACE # define DISTRHO_NAMESPACE DISTRHO diff --git a/distrho/src/DistrhoPluginCarla.cpp b/distrho/src/DistrhoPluginCarla.cpp @@ -46,6 +46,9 @@ public: fUI(this, 0, editParameterCallback, setParameterCallback, setStateCallback, sendNoteCallback, uiResizeCallback) { fUI.setTitle(host->uiName); + + if (host->uiParentId != 0) + fUI.setTransientWinId(host->uiParentId); } // --------------------------------------------- @@ -198,7 +201,7 @@ protected: const NativeParameter* getParameterInfo(const uint32_t index) const override { - CARLA_ASSERT(index < getParameterCount()); + CARLA_SAFE_ASSERT_RETURN(index < getParameterCount(), nullptr); static NativeParameter param; @@ -234,9 +237,6 @@ protected: param.ranges.def = ranges.def; param.ranges.min = ranges.min; param.ranges.max = ranges.max; - //param.ranges.step = ranges.step; - //param.ranges.stepSmall = ranges.stepSmall; - //param.ranges.stepLarge = ranges.stepLarge; } return &param; @@ -244,7 +244,7 @@ protected: float getParameterValue(const uint32_t index) const override { - CARLA_ASSERT(index < getParameterCount()); + CARLA_SAFE_ASSERT_RETURN(index < getParameterCount(), 0.0f); return fPlugin.getParameterValue(index); } @@ -260,10 +260,7 @@ protected: const NativeMidiProgram* getMidiProgramInfo(const uint32_t index) const override { - CARLA_ASSERT(index < getMidiProgramCount()); - - if (index >= fPlugin.getProgramCount()) - return nullptr; + CARLA_SAFE_ASSERT_RETURN(index < getMidiProgramCount(), nullptr); static NativeMidiProgram midiProgram; @@ -280,7 +277,7 @@ protected: void setParameterValue(const uint32_t index, const float value) override { - CARLA_ASSERT(index < getParameterCount()); + CARLA_SAFE_ASSERT_RETURN(index < getParameterCount(),); fPlugin.setParameterValue(index, value); } @@ -290,8 +287,7 @@ protected: { const uint32_t realProgram(bank * 128 + program); - if (realProgram >= fPlugin.getProgramCount()) - return; + CARLA_SAFE_ASSERT_RETURN(realProgram < getMidiProgramCount(),); fPlugin.setProgram(realProgram); } @@ -300,8 +296,8 @@ protected: #if DISTRHO_PLUGIN_WANT_STATE void setCustomData(const char* const key, const char* const value) override { - CARLA_ASSERT(key != nullptr); - CARLA_ASSERT(value != nullptr); + CARLA_SAFE_ASSERT_RETURN(key != nullptr && key[0] != '\0',); + CARLA_SAFE_ASSERT_RETURN(value != nullptr,); fPlugin.setState(key, value); } @@ -323,21 +319,20 @@ protected: #if DISTRHO_PLUGIN_IS_SYNTH void process(float** const inBuffer, float** const outBuffer, const uint32_t frames, const NativeMidiEvent* const midiEvents, const uint32_t midiEventCount) override { - uint32_t i; + MidiEvent realMidiEvents[midiEventCount]; - for (i=0; i < midiEventCount && i < kMaxMidiEvents; ++i) + for (uint32_t i=0; i < midiEventCount; ++i) { - const NativeMidiEvent* const midiEvent(&midiEvents[i]); - MidiEvent* const realMidiEvent(&fRealMidiEvents[i]); + const NativeMidiEvent& midiEvent(midiEvents[i]); + MidiEvent& realMidiEvent(realMidiEvents[i]); - realMidiEvent->frame = midiEvent->time; - realMidiEvent->size = midiEvent->size; + realMidiEvent.frame = midiEvent.time; + realMidiEvent.size = midiEvent.size; - for (uint8_t j=0; j < midiEvent->size; ++j) - realMidiEvent->buf[j] = midiEvent->data[j]; + carla_copy<uint8_t>(realMidiEvent.buf, midiEvent.data, midiEvent.size); } - fPlugin.run(inBuffer, outBuffer, frames, fRealMidiEvents, i); + fPlugin.run(inBuffer, outBuffer, frames, realMidiEvents, midiEventCount); } #else void process(float** const inBuffer, float** const outBuffer, const uint32_t frames, const NativeMidiEvent* const, const uint32_t) override @@ -361,45 +356,40 @@ protected: void uiIdle() override { - CARLA_ASSERT(fUiPtr != nullptr); + CARLA_SAFE_ASSERT_RETURN(fUiPtr != nullptr,); - if (fUiPtr != nullptr) - fUiPtr->carla_idle(); + fUiPtr->carla_idle(); } void uiSetParameterValue(const uint32_t index, const float value) override { - CARLA_ASSERT(fUiPtr != nullptr); - CARLA_ASSERT(index < getParameterCount()); + CARLA_SAFE_ASSERT_RETURN(fUiPtr != nullptr,); + CARLA_SAFE_ASSERT_RETURN(index < getParameterCount(),); - if (fUiPtr != nullptr) - fUiPtr->carla_setParameterValue(index, value); + fUiPtr->carla_setParameterValue(index, value); } # if DISTRHO_PLUGIN_WANT_PROGRAMS void uiSetMidiProgram(const uint8_t, const uint32_t bank, const uint32_t program) override { - CARLA_ASSERT(fUiPtr != nullptr); + CARLA_SAFE_ASSERT_RETURN(fUiPtr != nullptr,); const uint32_t realProgram(bank * 128 + program); - if (realProgram >= fPlugin.getProgramCount()) - return; + CARLA_SAFE_ASSERT_RETURN(realProgram < getMidiProgramCount(),); - if (fUiPtr != nullptr) - fUiPtr->carla_setMidiProgram(realProgram); + fUiPtr->carla_setMidiProgram(realProgram); } # endif # if DISTRHO_PLUGIN_WANT_STATE void uiSetCustomData(const char* const key, const char* const value) override { - CARLA_ASSERT(fUiPtr != nullptr); - CARLA_ASSERT(key != nullptr); - CARLA_ASSERT(value != nullptr); + CARLA_SAFE_ASSERT_RETURN(fUiPtr != nullptr,); + CARLA_SAFE_ASSERT_RETURN(key != nullptr && key[0] != '\0',); + CARLA_SAFE_ASSERT_RETURN(value != nullptr,); - if (fUiPtr != nullptr) - fUiPtr->carla_setCustomData(key, value); + fUiPtr->carla_setCustomData(key, value); } # endif #endif @@ -420,8 +410,9 @@ protected: #if DISTRHO_PLUGIN_HAS_UI void uiNameChanged(const char* const uiName) override { - if (fUiPtr != nullptr) - fUiPtr->carla_setUiTitle(uiName); + CARLA_SAFE_ASSERT_RETURN(fUiPtr != nullptr,); + + fUiPtr->carla_setUiTitle(uiName); } #endif @@ -430,10 +421,6 @@ protected: private: PluginExporter fPlugin; -#if DISTRHO_PLUGIN_IS_SYNTH - MidiEvent fRealMidiEvents[kMaxMidiEvents]; -#endif - #if DISTRHO_PLUGIN_HAS_UI // UI UICarla* fUiPtr; diff --git a/distrho/src/DistrhoUIInternal.hpp b/distrho/src/DistrhoUIInternal.hpp @@ -223,6 +223,11 @@ public: glWindow.setTitle(uiTitle); } + void setTransientWinId(const intptr_t winId) + { + glWindow.setTransientWinId(winId); + } + void setVisible(const bool yesNo) { glWindow.setVisible(yesNo);