| @@ -31,7 +31,6 @@ | |||||
| }, | }, | ||||
| { | { | ||||
| "slug": "HostCV", | "slug": "HostCV", | ||||
| "disabled": false, | |||||
| "name": "Host CV", | "name": "Host CV", | ||||
| "description": "Exposes host-provided CV ports in a module", | "description": "Exposes host-provided CV ports in a module", | ||||
| "tags": [ | "tags": [ | ||||
| @@ -40,7 +39,6 @@ | |||||
| }, | }, | ||||
| { | { | ||||
| "slug": "HostMIDI", | "slug": "HostMIDI", | ||||
| "disabled": false, | |||||
| "name": "Host MIDI", | "name": "Host MIDI", | ||||
| "description": "Exposes host-provided MIDI in a module", | "description": "Exposes host-provided MIDI in a module", | ||||
| "tags": [ | "tags": [ | ||||
| @@ -49,9 +47,35 @@ | |||||
| "Polyphonic" | "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", | "slug": "HostParameters", | ||||
| "disabled": false, | |||||
| "name": "Host Parameters", | "name": "Host Parameters", | ||||
| "description": "Exposes host-controlled plugin parameters in a module", | "description": "Exposes host-controlled plugin parameters in a module", | ||||
| "tags": [ | "tags": [ | ||||
| @@ -60,7 +84,6 @@ | |||||
| }, | }, | ||||
| { | { | ||||
| "slug": "HostTime", | "slug": "HostTime", | ||||
| "disabled": false, | |||||
| "name": "Host Time", | "name": "Host Time", | ||||
| "description": "Exposes host-provided time/transport information in a module", | "description": "Exposes host-provided time/transport information in a module", | ||||
| "tags": [ | "tags": [ | ||||
| @@ -69,7 +92,6 @@ | |||||
| }, | }, | ||||
| { | { | ||||
| "slug": "glBars", | "slug": "glBars", | ||||
| "disabled": false, | |||||
| "name": "glBars", | "name": "glBars", | ||||
| "description": "OpenGL bars visualization, as seen in XMMS and XBMC/Kodi", | "description": "OpenGL bars visualization, as seen in XMMS and XBMC/Kodi", | ||||
| "tags": [ | "tags": [ | ||||
| @@ -78,7 +100,6 @@ | |||||
| }, | }, | ||||
| { | { | ||||
| "slug": "Blank", | "slug": "Blank", | ||||
| "disabled": false, | |||||
| "name": "Blank", | "name": "Blank", | ||||
| "description": "Cardinal's own blank panel, featuring Hatsune Miku", | "description": "Cardinal's own blank panel, featuring Hatsune Miku", | ||||
| "tags": [ | "tags": [ | ||||
| @@ -87,7 +108,6 @@ | |||||
| }, | }, | ||||
| { | { | ||||
| "slug": "AudioFile", | "slug": "AudioFile", | ||||
| "disabled": false, | |||||
| "name": "Audio File", | "name": "Audio File", | ||||
| "description": "Audio file player as a module", | "description": "Audio file player as a module", | ||||
| "tags": [ | "tags": [ | ||||
| @@ -96,7 +116,6 @@ | |||||
| }, | }, | ||||
| { | { | ||||
| "slug": "Carla", | "slug": "Carla", | ||||
| "disabled": false, | |||||
| "name": "Carla Plugin Host", | "name": "Carla Plugin Host", | ||||
| "description": "A modular plugin host within Cardinal", | "description": "A modular plugin host within Cardinal", | ||||
| "tags": [ | "tags": [ | ||||
| @@ -105,7 +124,6 @@ | |||||
| }, | }, | ||||
| { | { | ||||
| "slug": "Ildaeil", | "slug": "Ildaeil", | ||||
| "disabled": false, | |||||
| "name": "Ildaeil Plugin Host", | "name": "Ildaeil Plugin Host", | ||||
| "description": "A mini plugin host within Cardinal for loading any FX", | "description": "A mini plugin host within Cardinal for loading any FX", | ||||
| "tags": [ | "tags": [ | ||||
| @@ -114,7 +132,6 @@ | |||||
| }, | }, | ||||
| { | { | ||||
| "slug": "MPV", | "slug": "MPV", | ||||
| "disabled": false, | |||||
| "name": "MPV", | "name": "MPV", | ||||
| "description": "An embed video player inside Cardinal", | "description": "An embed video player inside Cardinal", | ||||
| "tags": [ | "tags": [ | ||||
| @@ -123,7 +140,6 @@ | |||||
| }, | }, | ||||
| { | { | ||||
| "slug": "TextEditor", | "slug": "TextEditor", | ||||
| "disabled": false, | |||||
| "name": "Text Editor", | "name": "Text Editor", | ||||
| "description": "An embed text editor inside Cardinal", | "description": "An embed text editor inside Cardinal", | ||||
| "tags": [ | "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* modelHostAudio8; | ||||
| extern Model* modelHostCV; | extern Model* modelHostCV; | ||||
| extern Model* modelHostMIDI; | extern Model* modelHostMIDI; | ||||
| extern Model* modelHostMIDICC; | |||||
| extern Model* modelHostMIDIGate; | |||||
| extern Model* modelHostMIDIMap; | |||||
| extern Model* modelHostParameters; | extern Model* modelHostParameters; | ||||
| extern Model* modelHostTime; | extern Model* modelHostTime; | ||||
| extern Model* modelIldaeil; | extern Model* modelIldaeil; | ||||
| @@ -191,6 +191,9 @@ PLUGIN_FILES += Cardinal/src/glBars.cpp | |||||
| PLUGIN_FILES += Cardinal/src/HostAudio.cpp | PLUGIN_FILES += Cardinal/src/HostAudio.cpp | ||||
| PLUGIN_FILES += Cardinal/src/HostCV.cpp | PLUGIN_FILES += Cardinal/src/HostCV.cpp | ||||
| PLUGIN_FILES += Cardinal/src/HostMIDI.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/HostParameters.cpp | ||||
| PLUGIN_FILES += Cardinal/src/HostTime.cpp | PLUGIN_FILES += Cardinal/src/HostTime.cpp | ||||
| PLUGIN_FILES += Cardinal/src/TextEditor.cpp | PLUGIN_FILES += Cardinal/src/TextEditor.cpp | ||||
| @@ -721,6 +721,9 @@ static void initStatic__Cardinal() | |||||
| p->addModel(modelHostAudio8); | p->addModel(modelHostAudio8); | ||||
| p->addModel(modelHostCV); | p->addModel(modelHostCV); | ||||
| p->addModel(modelHostMIDI); | p->addModel(modelHostMIDI); | ||||
| p->addModel(modelHostMIDICC); | |||||
| p->addModel(modelHostMIDIGate); | |||||
| p->addModel(modelHostMIDIMap); | |||||
| p->addModel(modelHostParameters); | p->addModel(modelHostParameters); | ||||
| p->addModel(modelHostTime); | p->addModel(modelHostTime); | ||||
| p->addModel(modelTextEditor); | p->addModel(modelTextEditor); | ||||