| @@ -31,7 +31,6 @@ | |||
| }, | |||
| { | |||
| "slug": "HostCV", | |||
| "disabled": false, | |||
| "name": "Host CV", | |||
| "description": "Exposes host-provided CV ports in a module", | |||
| "tags": [ | |||
| @@ -40,7 +39,6 @@ | |||
| }, | |||
| { | |||
| "slug": "HostMIDI", | |||
| "disabled": false, | |||
| "name": "Host MIDI", | |||
| "description": "Exposes host-provided MIDI in a module", | |||
| "tags": [ | |||
| @@ -49,9 +47,35 @@ | |||
| "Polyphonic" | |||
| ] | |||
| }, | |||
| { | |||
| "slug": "HostMIDICC", | |||
| "name": "Host MIDI CC", | |||
| "description": "Exposes host-provided MIDI CC in a module", | |||
| "tags": [ | |||
| "External", | |||
| "MIDI" | |||
| ] | |||
| }, | |||
| { | |||
| "slug": "HostMIDIGate", | |||
| "name": "Host MIDI Gate", | |||
| "description": "Exposes host-provided MIDI as gates in a module", | |||
| "tags": [ | |||
| "External", | |||
| "MIDI" | |||
| ] | |||
| }, | |||
| { | |||
| "slug": "HostMIDIMap", | |||
| "name": "Host MIDI Map", | |||
| "description": "Allows host-provided MIDI to control other module parameters", | |||
| "tags": [ | |||
| "External", | |||
| "MIDI" | |||
| ] | |||
| }, | |||
| { | |||
| "slug": "HostParameters", | |||
| "disabled": false, | |||
| "name": "Host Parameters", | |||
| "description": "Exposes host-controlled plugin parameters in a module", | |||
| "tags": [ | |||
| @@ -60,7 +84,6 @@ | |||
| }, | |||
| { | |||
| "slug": "HostTime", | |||
| "disabled": false, | |||
| "name": "Host Time", | |||
| "description": "Exposes host-provided time/transport information in a module", | |||
| "tags": [ | |||
| @@ -69,7 +92,6 @@ | |||
| }, | |||
| { | |||
| "slug": "glBars", | |||
| "disabled": false, | |||
| "name": "glBars", | |||
| "description": "OpenGL bars visualization, as seen in XMMS and XBMC/Kodi", | |||
| "tags": [ | |||
| @@ -78,7 +100,6 @@ | |||
| }, | |||
| { | |||
| "slug": "Blank", | |||
| "disabled": false, | |||
| "name": "Blank", | |||
| "description": "Cardinal's own blank panel, featuring Hatsune Miku", | |||
| "tags": [ | |||
| @@ -87,7 +108,6 @@ | |||
| }, | |||
| { | |||
| "slug": "AudioFile", | |||
| "disabled": false, | |||
| "name": "Audio File", | |||
| "description": "Audio file player as a module", | |||
| "tags": [ | |||
| @@ -96,7 +116,6 @@ | |||
| }, | |||
| { | |||
| "slug": "Carla", | |||
| "disabled": false, | |||
| "name": "Carla Plugin Host", | |||
| "description": "A modular plugin host within Cardinal", | |||
| "tags": [ | |||
| @@ -105,7 +124,6 @@ | |||
| }, | |||
| { | |||
| "slug": "Ildaeil", | |||
| "disabled": false, | |||
| "name": "Ildaeil Plugin Host", | |||
| "description": "A mini plugin host within Cardinal for loading any FX", | |||
| "tags": [ | |||
| @@ -114,7 +132,6 @@ | |||
| }, | |||
| { | |||
| "slug": "MPV", | |||
| "disabled": false, | |||
| "name": "MPV", | |||
| "description": "An embed video player inside Cardinal", | |||
| "tags": [ | |||
| @@ -123,7 +140,6 @@ | |||
| }, | |||
| { | |||
| "slug": "TextEditor", | |||
| "disabled": false, | |||
| "name": "Text Editor", | |||
| "description": "An embed text editor inside Cardinal", | |||
| "tags": [ | |||
| @@ -0,0 +1,125 @@ | |||
| /* | |||
| * DISTRHO Cardinal Plugin | |||
| * Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com> | |||
| * | |||
| * This program is free software; you can redistribute it and/or | |||
| * modify it under the terms of the GNU General Public License as | |||
| * published by the Free Software Foundation; either version 3 of | |||
| * the License, or any later version. | |||
| * | |||
| * 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 General Public License for more details. | |||
| * | |||
| * For a full copy of the GNU General Public License see the LICENSE file. | |||
| */ | |||
| /** | |||
| * This file contains a substantial amount of code from VCVRack's core/....cpp and core/....cpp | |||
| * Copyright (C) 2016-2021 VCV. | |||
| * | |||
| * This program is free software: you can redistribute it and/or | |||
| * modify it under the terms of the GNU General Public License as | |||
| * published by the Free Software Foundation; either version 3 of | |||
| * the License, or (at your option) any later version. | |||
| */ | |||
| #include "plugincontext.hpp" | |||
| #include <algorithm> | |||
| // ----------------------------------------------------------------------------------------------------------- | |||
| USE_NAMESPACE_DISTRHO; | |||
| struct HostMIDICC : Module { | |||
| enum ParamIds { | |||
| NUM_PARAMS | |||
| }; | |||
| enum InputIds { | |||
| NUM_INPUTS | |||
| }; | |||
| enum OutputIds { | |||
| NUM_OUTPUTS | |||
| }; | |||
| enum LightIds { | |||
| NUM_LIGHTS | |||
| }; | |||
| CardinalPluginContext* const pcontext; | |||
| HostMIDICC() | |||
| : pcontext(static_cast<CardinalPluginContext*>(APP)) | |||
| { | |||
| if (pcontext == nullptr) | |||
| throw rack::Exception("Plugin context is null"); | |||
| config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); | |||
| } | |||
| void onReset() override | |||
| { | |||
| } | |||
| void process(const ProcessArgs& args) override | |||
| { | |||
| } | |||
| json_t* dataToJson() override | |||
| { | |||
| json_t* const rootJ = json_object(); | |||
| DISTRHO_SAFE_ASSERT_RETURN(rootJ != nullptr, nullptr); | |||
| return rootJ; | |||
| } | |||
| void dataFromJson(json_t* rootJ) override | |||
| { | |||
| } | |||
| }; | |||
| // -------------------------------------------------------------------------------------------------------------------- | |||
| struct HostMIDICCWidget : ModuleWidget { | |||
| static constexpr const float startX_In = 14.0f; | |||
| static constexpr const float startX_Out = 96.0f; | |||
| static constexpr const float startY = 74.0f; | |||
| static constexpr const float padding = 29.0f; | |||
| static constexpr const float middleX = startX_In + (startX_Out - startX_In) * 0.5f + padding * 0.35f; | |||
| HostMIDICC* const module; | |||
| HostMIDICCWidget(HostMIDICC* const m) | |||
| : module(m) | |||
| { | |||
| setModule(m); | |||
| setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/HostMIDI.svg"))); | |||
| addChild(createWidget<ScrewBlack>(Vec(RACK_GRID_WIDTH, 0))); | |||
| addChild(createWidget<ScrewBlack>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); | |||
| addChild(createWidget<ScrewBlack>(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); | |||
| addChild(createWidget<ScrewBlack>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); | |||
| } | |||
| void draw(const DrawArgs& args) override | |||
| { | |||
| nvgBeginPath(args.vg); | |||
| nvgRect(args.vg, 0, 0, box.size.x, box.size.y); | |||
| nvgFillPaint(args.vg, nvgLinearGradient(args.vg, 0, 0, 0, box.size.y, | |||
| nvgRGB(0x18, 0x19, 0x19), nvgRGB(0x21, 0x22, 0x22))); | |||
| nvgFill(args.vg); | |||
| ModuleWidget::draw(args); | |||
| } | |||
| void appendContextMenu(Menu* const menu) override | |||
| { | |||
| } | |||
| }; | |||
| // -------------------------------------------------------------------------------------------------------------------- | |||
| Model* modelHostMIDICC = createModel<HostMIDICC, HostMIDICCWidget>("HostMIDICC"); | |||
| // -------------------------------------------------------------------------------------------------------------------- | |||
| @@ -0,0 +1,125 @@ | |||
| /* | |||
| * DISTRHO Cardinal Plugin | |||
| * Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com> | |||
| * | |||
| * This program is free software; you can redistribute it and/or | |||
| * modify it under the terms of the GNU General Public License as | |||
| * published by the Free Software Foundation; either version 3 of | |||
| * the License, or any later version. | |||
| * | |||
| * 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 General Public License for more details. | |||
| * | |||
| * For a full copy of the GNU General Public License see the LICENSE file. | |||
| */ | |||
| /** | |||
| * This file contains a substantial amount of code from VCVRack's core/....cpp and core/....cpp | |||
| * Copyright (C) 2016-2021 VCV. | |||
| * | |||
| * This program is free software: you can redistribute it and/or | |||
| * modify it under the terms of the GNU General Public License as | |||
| * published by the Free Software Foundation; either version 3 of | |||
| * the License, or (at your option) any later version. | |||
| */ | |||
| #include "plugincontext.hpp" | |||
| #include <algorithm> | |||
| // ----------------------------------------------------------------------------------------------------------- | |||
| USE_NAMESPACE_DISTRHO; | |||
| struct HostMIDIGate : Module { | |||
| enum ParamIds { | |||
| NUM_PARAMS | |||
| }; | |||
| enum InputIds { | |||
| NUM_INPUTS | |||
| }; | |||
| enum OutputIds { | |||
| NUM_OUTPUTS | |||
| }; | |||
| enum LightIds { | |||
| NUM_LIGHTS | |||
| }; | |||
| CardinalPluginContext* const pcontext; | |||
| HostMIDIGate() | |||
| : pcontext(static_cast<CardinalPluginContext*>(APP)) | |||
| { | |||
| if (pcontext == nullptr) | |||
| throw rack::Exception("Plugin context is null"); | |||
| config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); | |||
| } | |||
| void onReset() override | |||
| { | |||
| } | |||
| void process(const ProcessArgs& args) override | |||
| { | |||
| } | |||
| json_t* dataToJson() override | |||
| { | |||
| json_t* const rootJ = json_object(); | |||
| DISTRHO_SAFE_ASSERT_RETURN(rootJ != nullptr, nullptr); | |||
| return rootJ; | |||
| } | |||
| void dataFromJson(json_t* rootJ) override | |||
| { | |||
| } | |||
| }; | |||
| // -------------------------------------------------------------------------------------------------------------------- | |||
| struct HostMIDIGateWidget : ModuleWidget { | |||
| static constexpr const float startX_In = 14.0f; | |||
| static constexpr const float startX_Out = 96.0f; | |||
| static constexpr const float startY = 74.0f; | |||
| static constexpr const float padding = 29.0f; | |||
| static constexpr const float middleX = startX_In + (startX_Out - startX_In) * 0.5f + padding * 0.35f; | |||
| HostMIDIGate* const module; | |||
| HostMIDIGateWidget(HostMIDIGate* const m) | |||
| : module(m) | |||
| { | |||
| setModule(m); | |||
| setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/HostMIDI.svg"))); | |||
| addChild(createWidget<ScrewBlack>(Vec(RACK_GRID_WIDTH, 0))); | |||
| addChild(createWidget<ScrewBlack>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); | |||
| addChild(createWidget<ScrewBlack>(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); | |||
| addChild(createWidget<ScrewBlack>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); | |||
| } | |||
| void draw(const DrawArgs& args) override | |||
| { | |||
| nvgBeginPath(args.vg); | |||
| nvgRect(args.vg, 0, 0, box.size.x, box.size.y); | |||
| nvgFillPaint(args.vg, nvgLinearGradient(args.vg, 0, 0, 0, box.size.y, | |||
| nvgRGB(0x18, 0x19, 0x19), nvgRGB(0x21, 0x22, 0x22))); | |||
| nvgFill(args.vg); | |||
| ModuleWidget::draw(args); | |||
| } | |||
| void appendContextMenu(Menu* const menu) override | |||
| { | |||
| } | |||
| }; | |||
| // -------------------------------------------------------------------------------------------------------------------- | |||
| Model* modelHostMIDIGate = createModel<HostMIDIGate, HostMIDIGateWidget>("HostMIDIGate"); | |||
| // -------------------------------------------------------------------------------------------------------------------- | |||
| @@ -0,0 +1,125 @@ | |||
| /* | |||
| * DISTRHO Cardinal Plugin | |||
| * Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com> | |||
| * | |||
| * This program is free software; you can redistribute it and/or | |||
| * modify it under the terms of the GNU General Public License as | |||
| * published by the Free Software Foundation; either version 3 of | |||
| * the License, or any later version. | |||
| * | |||
| * 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 General Public License for more details. | |||
| * | |||
| * For a full copy of the GNU General Public License see the LICENSE file. | |||
| */ | |||
| /** | |||
| * This file contains a substantial amount of code from VCVRack's core/....cpp | |||
| * Copyright (C) 2016-2021 VCV. | |||
| * | |||
| * This program is free software: you can redistribute it and/or | |||
| * modify it under the terms of the GNU General Public License as | |||
| * published by the Free Software Foundation; either version 3 of | |||
| * the License, or (at your option) any later version. | |||
| */ | |||
| #include "plugincontext.hpp" | |||
| #include <algorithm> | |||
| // ----------------------------------------------------------------------------------------------------------- | |||
| USE_NAMESPACE_DISTRHO; | |||
| struct HostMIDIMap : Module { | |||
| enum ParamIds { | |||
| NUM_PARAMS | |||
| }; | |||
| enum InputIds { | |||
| NUM_INPUTS | |||
| }; | |||
| enum OutputIds { | |||
| NUM_OUTPUTS | |||
| }; | |||
| enum LightIds { | |||
| NUM_LIGHTS | |||
| }; | |||
| CardinalPluginContext* const pcontext; | |||
| HostMIDIMap() | |||
| : pcontext(static_cast<CardinalPluginContext*>(APP)) | |||
| { | |||
| if (pcontext == nullptr) | |||
| throw rack::Exception("Plugin context is null"); | |||
| config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); | |||
| } | |||
| void onReset() override | |||
| { | |||
| } | |||
| void process(const ProcessArgs& args) override | |||
| { | |||
| } | |||
| json_t* dataToJson() override | |||
| { | |||
| json_t* const rootJ = json_object(); | |||
| DISTRHO_SAFE_ASSERT_RETURN(rootJ != nullptr, nullptr); | |||
| return rootJ; | |||
| } | |||
| void dataFromJson(json_t* rootJ) override | |||
| { | |||
| } | |||
| }; | |||
| // -------------------------------------------------------------------------------------------------------------------- | |||
| struct HostMIDIMapWidget : ModuleWidget { | |||
| static constexpr const float startX_In = 14.0f; | |||
| static constexpr const float startX_Out = 96.0f; | |||
| static constexpr const float startY = 74.0f; | |||
| static constexpr const float padding = 29.0f; | |||
| static constexpr const float middleX = startX_In + (startX_Out - startX_In) * 0.5f + padding * 0.35f; | |||
| HostMIDIMap* const module; | |||
| HostMIDIMapWidget(HostMIDIMap* const m) | |||
| : module(m) | |||
| { | |||
| setModule(m); | |||
| setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/HostMIDI.svg"))); | |||
| addChild(createWidget<ScrewBlack>(Vec(RACK_GRID_WIDTH, 0))); | |||
| addChild(createWidget<ScrewBlack>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); | |||
| addChild(createWidget<ScrewBlack>(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); | |||
| addChild(createWidget<ScrewBlack>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); | |||
| } | |||
| void draw(const DrawArgs& args) override | |||
| { | |||
| nvgBeginPath(args.vg); | |||
| nvgRect(args.vg, 0, 0, box.size.x, box.size.y); | |||
| nvgFillPaint(args.vg, nvgLinearGradient(args.vg, 0, 0, 0, box.size.y, | |||
| nvgRGB(0x18, 0x19, 0x19), nvgRGB(0x21, 0x22, 0x22))); | |||
| nvgFill(args.vg); | |||
| ModuleWidget::draw(args); | |||
| } | |||
| void appendContextMenu(Menu* const menu) override | |||
| { | |||
| } | |||
| }; | |||
| // -------------------------------------------------------------------------------------------------------------------- | |||
| Model* modelHostMIDIMap = createModel<HostMIDIMap, HostMIDIMapWidget>("HostMIDIMap"); | |||
| // -------------------------------------------------------------------------------------------------------------------- | |||
| @@ -35,6 +35,9 @@ extern Model* modelHostAudio2; | |||
| extern Model* modelHostAudio8; | |||
| extern Model* modelHostCV; | |||
| extern Model* modelHostMIDI; | |||
| extern Model* modelHostMIDICC; | |||
| extern Model* modelHostMIDIGate; | |||
| extern Model* modelHostMIDIMap; | |||
| extern Model* modelHostParameters; | |||
| extern Model* modelHostTime; | |||
| extern Model* modelIldaeil; | |||
| @@ -191,6 +191,9 @@ PLUGIN_FILES += Cardinal/src/glBars.cpp | |||
| PLUGIN_FILES += Cardinal/src/HostAudio.cpp | |||
| PLUGIN_FILES += Cardinal/src/HostCV.cpp | |||
| PLUGIN_FILES += Cardinal/src/HostMIDI.cpp | |||
| PLUGIN_FILES += Cardinal/src/HostMIDI-CC.cpp | |||
| PLUGIN_FILES += Cardinal/src/HostMIDI-Gate.cpp | |||
| PLUGIN_FILES += Cardinal/src/HostMIDI-Map.cpp | |||
| PLUGIN_FILES += Cardinal/src/HostParameters.cpp | |||
| PLUGIN_FILES += Cardinal/src/HostTime.cpp | |||
| PLUGIN_FILES += Cardinal/src/TextEditor.cpp | |||
| @@ -721,6 +721,9 @@ static void initStatic__Cardinal() | |||
| p->addModel(modelHostAudio8); | |||
| p->addModel(modelHostCV); | |||
| p->addModel(modelHostMIDI); | |||
| p->addModel(modelHostMIDICC); | |||
| p->addModel(modelHostMIDIGate); | |||
| p->addModel(modelHostMIDIMap); | |||
| p->addModel(modelHostParameters); | |||
| p->addModel(modelHostTime); | |||
| p->addModel(modelTextEditor); | |||