Browse Source

CLAP: send state from UI to DSP (not yet saved), fix param outputs

pull/321/merge
falkTX 3 years ago
parent
commit
650327e724
2 changed files with 26 additions and 9 deletions
  1. +21
    -4
      distrho/src/DistrhoPluginCLAP.cpp
  2. +5
    -5
      distrho/src/DistrhoPluginVST2.cpp

+ 21
- 4
distrho/src/DistrhoPluginCLAP.cpp View File

@@ -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<UIExporter> 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:


+ 5
- 5
distrho/src/DistrhoPluginVST2.cpp View File

@@ -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;
}
}


Loading…
Cancel
Save