diff --git a/distrho/src/DistrhoPluginCLAP.cpp b/distrho/src/DistrhoPluginCLAP.cpp index 6cbef2ce..52d72162 100644 --- a/distrho/src/DistrhoPluginCLAP.cpp +++ b/distrho/src/DistrhoPluginCLAP.cpp @@ -83,6 +83,10 @@ struct ClapEventQueue } fEventQueue; #endif + #if DISTRHO_PLUGIN_HAS_UI && DISTRHO_PLUGIN_WANT_STATE + virtual void setStateFromUI(const char* key, const char* value) = 0; + #endif + struct CachedParameters { uint numParams; bool* changed; @@ -134,6 +138,7 @@ class ClapUI : public IdleCallback public: ClapUI(PluginExporter& plugin, ClapEventQueue* const eventQueue, const bool isFloating) : fPlugin(plugin), + fPluinEventQueue(eventQueue), fEventQueue(eventQueue->fEventQueue), fCachedParameters(eventQueue->fCachedParameters), fUI(), @@ -352,6 +357,7 @@ public: private: // Plugin and UI PluginExporter& fPlugin; + ClapEventQueue* const fPluinEventQueue; ClapEventQueue::Queue& fEventQueue; ClapEventQueue::CachedParameters& fCachedParameters; ScopedPointer fUI; @@ -454,8 +460,9 @@ private: } #if DISTRHO_PLUGIN_WANT_STATE - void setState(const char*, const char*) + void setState(const char* const key, const char* const value) { + fPluinEventQueue->setStateFromUI(key, value); } static void setStateCallback(void* const ptr, const char* key, const char* value) @@ -752,12 +759,13 @@ public: const uint32_t groupId = fPlugin.getParameterGroupId(index); info->flags = 0; - if (hints & kParameterIsAutomatable) + if (hints & kParameterIsOutput) + info->flags |= CLAP_PARAM_IS_READONLY; + else if (hints & kParameterIsAutomatable) info->flags |= CLAP_PARAM_IS_AUTOMATABLE; + if (hints & (kParameterIsBoolean|kParameterIsInteger)) info->flags |= CLAP_PARAM_IS_STEPPED; - if (hints & kParameterIsOutput) - info->flags |= CLAP_PARAM_IS_READONLY; DISTRHO_NAMESPACE::strncpy(info->name, fPlugin.getParameterName(index), CLAP_NAME_SIZE); @@ -921,6 +929,15 @@ public: } #endif + #if DISTRHO_PLUGIN_HAS_UI && DISTRHO_PLUGIN_WANT_STATE + void setStateFromUI(const char* const key, const char* const value) override + { + fPlugin.setState(key, value); + + // TODO check if we want to save this key, and save it + } + #endif + // ---------------------------------------------------------------------------------------------------------------- private: diff --git a/distrho/src/DistrhoPluginVST2.cpp b/distrho/src/DistrhoPluginVST2.cpp index 4882bf2b..1c257ce9 100644 --- a/distrho/src/DistrhoPluginVST2.cpp +++ b/distrho/src/DistrhoPluginVST2.cpp @@ -117,7 +117,7 @@ struct ParameterAndNotesHelper } #if DISTRHO_PLUGIN_WANT_STATE - virtual void setStateFromUI(const char* const newKey, const char* const newValue) = 0; + virtual void setStateFromUI(const char* key, const char* value) = 0; #endif }; @@ -1238,12 +1238,12 @@ private: // functions called from the UI side, may block # if DISTRHO_PLUGIN_HAS_UI - void setStateFromUI(const char* const key, const char* const newValue) override + void setStateFromUI(const char* const key, const char* const value) override # else - void setStateFromUI(const char* const key, const char* const newValue) + void setStateFromUI(const char* const key, const char* const value) # endif { - fPlugin.setState(key, newValue); + fPlugin.setState(key, value); // check if we want to save this key if (! fPlugin.wantStateKey(key)) @@ -1256,7 +1256,7 @@ private: if (dkey == key) { - it->second = newValue; + it->second = value; return; } }