summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfalkTX <falktx@gmail.com>2018-08-21 21:07:35 +0200
committerfalkTX <falktx@gmail.com>2018-08-21 21:07:35 +0200
commitdee2b4a8548ce7779d987ab88c2ebb9acbcfa1f1 (patch)
treeb5a23ef89b26ceb74248a6beb0baf781cd7c199b
parent3bbbef19fe12ef5d68f2810510da1fae6fdd35ff (diff)
Update carla format code, fix license
-rw-r--r--distrho/src/DistrhoPluginCarla.cpp78
1 files changed, 67 insertions, 11 deletions
diff --git a/distrho/src/DistrhoPluginCarla.cpp b/distrho/src/DistrhoPluginCarla.cpp
index 08faff8c..a0d5bb76 100644
--- a/distrho/src/DistrhoPluginCarla.cpp
+++ b/distrho/src/DistrhoPluginCarla.cpp
@@ -1,17 +1,17 @@
/*
* DISTRHO Plugin Framework (DPF)
- * Copyright (C) 2012-2016 Filipe Coelho <falktx@falktx.com>
+ * Copyright (C) 2012-2018 Filipe Coelho <falktx@falktx.com>
*
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation.
+ * Permission to use, copy, modify, and/or distribute this software for any purpose with
+ * or without fee is hereby granted, provided that the above copyright notice and this
+ * permission notice appear in all copies.
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * For a full copy of the license see the LGPL.txt file
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
+ * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN
+ * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
+ * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#include "DistrhoPluginInternal.hpp"
@@ -30,6 +30,9 @@ START_NAMESPACE_DISTRHO
// -----------------------------------------------------------------------
// Carla UI
+#if ! DISTRHO_PLUGIN_WANT_MIDI_OUTPUT
+static const writeMidiFunc writeMidiCallback = nullptr;
+#endif
#if ! DISTRHO_PLUGIN_WANT_STATE
static const setStateFunc setStateCallback = nullptr;
#endif
@@ -104,15 +107,19 @@ protected:
fHost->ui_parameter_changed(fHost->handle, rindex, value);
}
+#if DISTRHO_PLUGIN_WANT_STATE
void handleSetState(const char* const key, const char* const value)
{
fHost->ui_custom_data_changed(fHost->handle, key, value);
}
+#endif
+#if DISTRHO_PLUGIN_IS_SYNTH
void handleSendNote(const uint8_t, const uint8_t, const uint8_t)
{
// TODO
}
+#endif
void handleSetSize(const uint width, const uint height)
{
@@ -175,7 +182,9 @@ class PluginCarla : public NativePluginClass
{
public:
PluginCarla(const NativeHostDescriptor* const host)
- : NativePluginClass(host)
+ : NativePluginClass(host),
+ fPlugin(this, writeMidiCallback),
+ fScalePointsCache(nullptr)
{
#if DISTRHO_PLUGIN_HAS_UI
fUiPtr = nullptr;
@@ -191,6 +200,12 @@ public:
fUiPtr = nullptr;
}
#endif
+
+ if (fScalePointsCache != nullptr)
+ {
+ delete[] fScalePointsCache;
+ fScalePointsCache = nullptr;
+ }
}
protected:
@@ -240,6 +255,32 @@ protected:
param.ranges.max = ranges.max;
}
+ {
+ const ParameterEnumerationValues& enumValues(fPlugin.getParameterEnumValues(index));
+
+ if (const uint32_t scalePointCount = enumValues.count)
+ {
+ NativeParameterScalePoint* const scalePoints = new NativeParameterScalePoint[scalePointCount];
+
+ for (uint32_t i=0; i<scalePointCount; ++i)
+ {
+ scalePoints[i].label = enumValues.values[i].label.buffer();
+ scalePoints[i].value = enumValues.values[i].value;
+ }
+
+ param.scalePoints = scalePoints;
+ param.scalePointCount = scalePointCount;
+
+ if (enumValues.restrictedMode)
+ param.hints = static_cast<NativeParameterHints>(param.hints|::NATIVE_PARAMETER_USES_SCALEPOINTS);
+ }
+ else if (fScalePointsCache != nullptr)
+ {
+ delete[] fScalePointsCache;
+ fScalePointsCache = nullptr;
+ }
+ }
+
return &param;
}
@@ -440,6 +481,7 @@ protected:
private:
PluginExporter fPlugin;
+ mutable NativeParameterScalePoint* fScalePointsCache;
#if DISTRHO_PLUGIN_HAS_UI
// UI
@@ -455,6 +497,20 @@ private:
}
#endif
+#if DISTRHO_PLUGIN_WANT_MIDI_OUTPUT
+ static bool writeMidiCallback(void* ptr, const MidiEvent& midiEvent)
+ {
+ if (midiEvent.size > 4)
+ return;
+
+ const NativeMidiEvent event = {
+ midiEvent.frame, 0, midiEvent.size, midiEvent.data
+ };
+
+ return ((PluginCarla*)ptr)->fPlugin.writeMidiEvent(midiEvent);
+ }
+#endif
+
CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(PluginCarla)
// -------------------------------------------------------------------