From dee2b4a8548ce7779d987ab88c2ebb9acbcfa1f1 Mon Sep 17 00:00:00 2001 From: falkTX Date: Tue, 21 Aug 2018 21:07:35 +0200 Subject: Update carla format code, fix license --- distrho/src/DistrhoPluginCarla.cpp | 78 ++++++++++++++++++++++++++++++++------ 1 file 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 + * Copyright (C) 2012-2018 Filipe Coelho * - * 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(param.hints|::NATIVE_PARAMETER_USES_SCALEPOINTS); + } + else if (fScalePointsCache != nullptr) + { + delete[] fScalePointsCache; + fScalePointsCache = nullptr; + } + } + return ¶m; } @@ -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) // ------------------------------------------------------------------- -- cgit v1.2.3