commit e889c58115b182364b095d60d0018c009163728f
parent 939dcf2e1512a0a2a91ceccb96fd801e40853f78
Author: falkTX <falktx@falktx.com>
Date: Sun, 4 Jul 2021 11:55:49 +0100
Invert LV2 bypass/enabled parameter on UI events
Fixes #150
Diffstat:
1 file changed, 17 insertions(+), 3 deletions(-)
diff --git a/distrho/src/DistrhoUILV2.cpp b/distrho/src/DistrhoUILV2.cpp
@@ -89,11 +89,14 @@ public:
bgColor,
fgColor),
fUridMap(uridMap),
+ fUiPortMap(getLv2Feature<LV2UI_Port_Map>(features, LV2_UI__portMap)),
fUiRequestValue(getLv2Feature<LV2UI_Request_Value>(features, LV2_UI__requestValue)),
fUiTouch(getLv2Feature<LV2UI_Touch>(features, LV2_UI__touch)),
fController(controller),
fWriteFunction(writeFunc),
fURIDs(uridMap),
+ fBypassParameterIndex(fUiPortMap != nullptr ? fUiPortMap->port_index(fUiPortMap->handle, "lv2_enabled")
+ : LV2UI_INVALID_PORT_INDEX),
fWinIdWasNull(winId == 0)
{
if (widget != nullptr)
@@ -159,7 +162,11 @@ public:
DISTRHO_SAFE_ASSERT_RETURN(bufferSize == sizeof(float),)
- const float value = *(const float*)buffer;
+ float value = *(const float*)buffer;
+
+ if (rindex == fBypassParameterIndex)
+ value = 1.0f - value;
+
fUI.parameterChanged(rindex-parameterOffset, value);
}
#if DISTRHO_PLUGIN_WANT_STATE
@@ -253,10 +260,13 @@ protected:
fUiTouch->touch(fUiTouch->handle, rindex, started);
}
- void setParameterValue(const uint32_t rindex, const float value)
+ void setParameterValue(const uint32_t rindex, float value)
{
DISTRHO_SAFE_ASSERT_RETURN(fWriteFunction != nullptr,);
+ if (rindex == fBypassParameterIndex)
+ value = 1.0f - value;
+
fWriteFunction(fController, rindex, sizeof(float), 0, &value);
}
@@ -345,6 +355,7 @@ private:
// LV2 features
const LV2_URID_Map* const fUridMap;
+ const LV2UI_Port_Map* const fUiPortMap;
const LV2UI_Request_Value* const fUiRequestValue;
const LV2UI_Touch* const fUiTouch;
@@ -383,8 +394,11 @@ private:
}
} fURIDs;
+ // index of bypass parameter, if present
+ const uint32_t fBypassParameterIndex;
+
// using ui:showInterface if true
- bool fWinIdWasNull;
+ const bool fWinIdWasNull;
// -------------------------------------------------------------------
// Callbacks