Browse Source

Merge branch 'DISTRHO:main' into update-sonus2

pull/740/head
rl2939 GitHub 2 months ago
parent
commit
4204886d64
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
24 changed files with 199 additions and 124 deletions
  1. +1
    -1
      .github/ISSUE_TEMPLATE/bug.yaml
  2. +2
    -1
      .github/workflows/build.yml
  3. +3
    -0
      .gitmodules
  4. +20
    -8
      Makefile
  5. +1
    -0
      README.md
  6. +1
    -1
      carla
  7. +2
    -0
      docs/LICENSES.md
  8. +1
    -1
      dpf
  9. +1
    -1
      plugins/CVfunk
  10. +0
    -9
      plugins/Cardinal/plugin.json
  11. +17
    -9
      plugins/Makefile
  12. +1
    -1
      plugins/Sapphire
  13. +1
    -0
      plugins/Venom
  14. +101
    -8
      plugins/plugins.cpp
  15. +5
    -51
      src/CardinalCommon.cpp
  16. +1
    -1
      src/CardinalPlugin.cpp
  17. +0
    -14
      src/CardinalUI.cpp
  18. +3
    -0
      src/Makefile
  19. +6
    -0
      src/Makefile.cardinal.mk
  20. +2
    -1
      src/custom/RemoteNanoVG.cpp
  21. +11
    -1
      src/custom/glfw.cpp
  22. +17
    -14
      src/override/Scene.cpp
  23. +1
    -1
      utils/macOS/Info_JACK.plist
  24. +1
    -1
      utils/macOS/Info_Native.plist

+ 1
- 1
.github/ISSUE_TEMPLATE/bug.yaml View File

@@ -5,7 +5,7 @@ body:
id: version id: version
attributes: attributes:
label: Version label: Version
value: "25.06"
value: "25.10"
validations: validations:
required: true required: true
- type: dropdown - type: dropdown


+ 2
- 1
.github/workflows/build.yml View File

@@ -180,6 +180,7 @@ jobs:
key: macos-universal-v${{ env.CACHE_VERSION }} key: macos-universal-v${{ env.CACHE_VERSION }}
- name: Setup dependencies - name: Setup dependencies
run: | run: |
brew uninstall --force --ignore-dependencies cmake
./deps/PawPaw/.github/workflows/bootstrap-deps.sh macos-universal-10.15 ./deps/PawPaw/.github/workflows/bootstrap-deps.sh macos-universal-10.15
- name: Build extra dependencies - name: Build extra dependencies
run: | run: |
@@ -425,7 +426,7 @@ jobs:
export PATH="/usr/lib/ccache:${PATH}" export PATH="/usr/lib/ccache:${PATH}"
source deps/PawPaw/local.env ${{ matrix.target }} source deps/PawPaw/local.env ${{ matrix.target }}
make features make features
make NOOPT=true -j $(nproc)
xvfb-run make NOOPT=true -j $(nproc)
- name: Build cross-compiled (carla) - name: Build cross-compiled (carla)
if: steps.cache.outputs.cache-hit == 'true' if: steps.cache.outputs.cache-hit == 'true'
shell: bash shell: bash


+ 3
- 0
.gitmodules View File

@@ -263,3 +263,6 @@
[submodule "plugins/eightfold"] [submodule "plugins/eightfold"]
path = plugins/eightfold path = plugins/eightfold
url = https://github.com/scanner-darkly/eightfold.git url = https://github.com/scanner-darkly/eightfold.git
[submodule "plugins/Venom"]
path = plugins/Venom
url = https://github.com/DaveBenham/VenomModules

+ 20
- 8
Makefile View File

@@ -1,12 +1,12 @@
#!/usr/bin/make -f #!/usr/bin/make -f
# DISTRHO Cardinal Plugin # DISTRHO Cardinal Plugin
# Copyright (C) 2021-2024 Filipe Coelho <falktx@falktx.com>
# Copyright (C) 2021-2025 Filipe Coelho <falktx@falktx.com>
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later


ROOT = . ROOT = .
include $(ROOT)/Makefile.base.mk include $(ROOT)/Makefile.base.mk


# -----------------------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# Set version # Set version


# also set in: # also set in:
@@ -15,20 +15,20 @@ include $(ROOT)/Makefile.base.mk
# src/CardinalPlugin.cpp `getVersion` # src/CardinalPlugin.cpp `getVersion`
# utils/macOS/Info_{JACK,Native}.plist # utils/macOS/Info_{JACK,Native}.plist
# .github/ISSUE_TEMPLATE/bug.yaml src/CardinalCommon.cpp src/CardinalPlugin.cpp utils/macOS/Info_{JACK,Native}.plist # .github/ISSUE_TEMPLATE/bug.yaml src/CardinalCommon.cpp src/CardinalPlugin.cpp utils/macOS/Info_{JACK,Native}.plist
VERSION = 25.06
VERSION = 25.10


# --------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# Build targets # Build targets


all: cardinal carla deps dgl plugins gen resources all: cardinal carla deps dgl plugins gen resources


# --------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# Build config # Build config


PREFIX ?= /usr/local PREFIX ?= /usr/local
DESTDIR ?= DESTDIR ?=


# --------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# Carla config # Carla config


CARLA_EXTRA_ARGS = \ CARLA_EXTRA_ARGS = \
@@ -44,7 +44,16 @@ ifneq ($(DEBUG),true)
CARLA_EXTRA_ARGS += EXTERNAL_PLUGINS=true CARLA_EXTRA_ARGS += EXTERNAL_PLUGINS=true
endif endif


# --------------------------------------------------------------
# ---------------------------------------------------------------------------------------------------------------------
# DGL config

ifeq ($(WASM),true)
UI_TYPE = gles2
else
UI_TYPE = opengl
endif

# ---------------------------------------------------------------------------------------------------------------------
# Check for required system-wide dependencies # Check for required system-wide dependencies


ifeq ($(SYSDEPS),true) ifeq ($(SYSDEPS),true)
@@ -183,7 +192,7 @@ endif


dgl: dgl:
ifneq ($(HEADLESS),true) ifneq ($(HEADLESS),true)
$(MAKE) opengl -C dpf/dgl $(DGL_EXTRA_ARGS)
$(MAKE) $(UI_TYPE) -C dpf/dgl $(DGL_EXTRA_ARGS)
endif endif


plugins: deps plugins: deps
@@ -229,6 +238,9 @@ clap: carla deps dgl plugins resources
lv2: carla deps dgl plugins resources lv2: carla deps dgl plugins resources
$(MAKE) lv2 -C src $(CARLA_EXTRA_ARGS) $(MAKE) lv2 -C src $(CARLA_EXTRA_ARGS)


mapi: carla deps dgl plugins resources
$(MAKE) mapi -C src $(CARLA_EXTRA_ARGS)

vst2: carla deps dgl plugins resources vst2: carla deps dgl plugins resources
$(MAKE) vst2 -C src $(CARLA_EXTRA_ARGS) $(MAKE) vst2 -C src $(CARLA_EXTRA_ARGS)




+ 1
- 0
README.md View File

@@ -196,6 +196,7 @@ At the moment the following 3rd-party modules are provided:
- [Surge XT](https://github.com/surge-synthesizer/surge-rack) - [Surge XT](https://github.com/surge-synthesizer/surge-rack)
- [unless_modules](https://gitlab.com/unlessgames/unless_modules) - [unless_modules](https://gitlab.com/unlessgames/unless_modules)
- [Valley](https://github.com/ValleyAudio/ValleyRackFree) - [Valley](https://github.com/ValleyAudio/ValleyRackFree)
- [Venom](https://github.com/DaveBenham/VenomModules)
- [Voxglitch](https://github.com/clone45/voxglitch) - [Voxglitch](https://github.com/clone45/voxglitch)
- [WhatTheRack](https://github.com/korfuri/WhatTheRack) - [WhatTheRack](https://github.com/korfuri/WhatTheRack)
- [WSTD-Drums](https://github.com/Wasted-Audio/WSTD-Drums) - [WSTD-Drums](https://github.com/Wasted-Audio/WSTD-Drums)


+ 1
- 1
carla

@@ -1 +1 @@
Subproject commit c9b60551497a7a9b76d86d694b6af08afe96335c
Subproject commit 1d8dcb5aab5e0c30352e9f928ce3e40cbc86a439

+ 2
- 0
docs/LICENSES.md View File

@@ -90,6 +90,7 @@ Below follows a list of all code licenses used in Cardinal and linked submodules
| Surge XT | GPL-3.0-or-later | | | Surge XT | GPL-3.0-or-later | |
| unless_modules | GPL-3.0-or-later | | | unless_modules | GPL-3.0-or-later | |
| Valley | GPL-3.0-or-later | | | Valley | GPL-3.0-or-later | |
| Venom | GPL-3.0-or-later | |
| Voxglitch | GPL-3.0-or-later | | | Voxglitch | GPL-3.0-or-later | |
| WSTD-Drums | CC0-1.0 | | | WSTD-Drums | CC0-1.0 | |
| WhatTheRack | WTFPL | | | WhatTheRack | WTFPL | |
@@ -266,6 +267,7 @@ Below is a list of artwork licenses from plugins
| ValleyAudio/din1451alt.ttf | CC-BY-3.0-DE | | | ValleyAudio/din1451alt.ttf | CC-BY-3.0-DE | |
| ValleyAudio/DSEG14Classic-*.ttf | OFL-1.1-RFN | | | ValleyAudio/DSEG14Classic-*.ttf | OFL-1.1-RFN | |
| ValleyAudio/ShareTechMono-*.ttf | OFL-1.1-RFN | | | ValleyAudio/ShareTechMono-*.ttf | OFL-1.1-RFN | |
| Venom/* | GPL-3.0-or-later | No artwork specific license provided |
| voxglitch/* | GPL-3.0-or-later | No artwork specific license provided | | voxglitch/* | GPL-3.0-or-later | No artwork specific license provided |
| voxglitch/ShareTechMono-Regular.ttf | OFL-1.1-RFN | | | voxglitch/ShareTechMono-Regular.ttf | OFL-1.1-RFN | |
| WhatTheRack/* | WTFPL | | | WhatTheRack/* | WTFPL | |


+ 1
- 1
dpf

@@ -1 +1 @@
Subproject commit 8c30f9f1eddba89805f4131aeb2d6ca3e31a46b1
Subproject commit 04eb91490c70a0c3f524e473087e263d8a9d550f

+ 1
- 1
plugins/CVfunk

@@ -1 +1 @@
Subproject commit a116e6b18ac05974a23509cc47adfd86e8406385
Subproject commit 51f2b4e61cde7978fb84cdd892a1d3aaedc0ff5b

+ 0
- 9
plugins/Cardinal/plugin.json View File

@@ -192,15 +192,6 @@
"Utility" "Utility"
] ]
}, },
{
"slug": "MPV",
"name": "MPV",
"description": "An embed video player inside Cardinal",
"manualUrl": "https://github.com/DISTRHO/Cardinal/blob/main/docs/CARDINAL-MODULES.md#mpv",
"tags": [
"Visual"
]
},
{ {
"slug": "SassyScope", "slug": "SassyScope",
"name": "Sassy Scope", "name": "Sassy Scope",


+ 17
- 9
plugins/Makefile View File

@@ -255,18 +255,12 @@ PLUGIN_FILES += Cardinal/src/glBars.cpp
endif endif
endif endif


ifneq ($(STATIC_BUILD),true)
ifneq ($(MOD_BUILD),true)
PLUGIN_FILES += Cardinal/src/AudioFile.cpp PLUGIN_FILES += Cardinal/src/AudioFile.cpp
ifneq ($(WASM),true) ifneq ($(WASM),true)
PLUGIN_FILES += Cardinal/src/Carla.cpp PLUGIN_FILES += Cardinal/src/Carla.cpp
PLUGIN_FILES += Cardinal/src/Ildaeil.cpp PLUGIN_FILES += Cardinal/src/Ildaeil.cpp
endif endif
ifneq ($(HEADLESS),true)
ifeq ($(HAVE_X11),true)
PLUGIN_FILES += Cardinal/src/EmbedWidget.cpp
PLUGIN_FILES += Cardinal/src/MPV.cpp
endif
endif
endif endif


ifneq ($(HEADLESS),true) ifneq ($(HEADLESS),true)
@@ -678,7 +672,7 @@ COMPUTERSCARE_CUSTOM = Quantizer PanelBorder
PLUGIN_FILES += $(filter-out CVfunk/src/plugin.cpp,$(wildcard CVfunk/src/*.cpp)) PLUGIN_FILES += $(filter-out CVfunk/src/plugin.cpp,$(wildcard CVfunk/src/*.cpp))


# modules/types which are present in other plugins # modules/types which are present in other plugins
CVFUNK_CUSTOM = Steps
CVFUNK_CUSTOM = Steps Node


# -------------------------------------------------------------- # --------------------------------------------------------------
# dBiz # dBiz
@@ -810,7 +804,7 @@ IHTSYN_CUSTOM_PER_FILE += mv_statevariable


PLUGIN_FILES += $(filter-out JW-Modules/src/JWModules.cpp JW-Modules/src/Str1ker.cpp,$(wildcard JW-Modules/src/*.cpp)) PLUGIN_FILES += $(filter-out JW-Modules/src/JWModules.cpp JW-Modules/src/Str1ker.cpp,$(wildcard JW-Modules/src/*.cpp))


ifneq ($(STATIC_BUILD),true)
ifneq ($(MOD_BUILD),true)
PLUGIN_FILES += JW-Modules/src/Str1ker.cpp PLUGIN_FILES += JW-Modules/src/Str1ker.cpp
PLUGIN_FILES += $(wildcard JW-Modules/lib/oscpack/ip/*.cpp) PLUGIN_FILES += $(wildcard JW-Modules/lib/oscpack/ip/*.cpp)
PLUGIN_FILES += $(wildcard JW-Modules/lib/oscpack/osc/*.cpp) PLUGIN_FILES += $(wildcard JW-Modules/lib/oscpack/osc/*.cpp)
@@ -1310,6 +1304,11 @@ PLUGIN_BINARIES += ValleyAudio/src/XFADE.bin
VALLEYAUDIO_CUSTOM = $(DRWAV) Chord DigitalDisplay VALLEYAUDIO_CUSTOM = $(DRWAV) Chord DigitalDisplay
VALLEYAUDIO_CUSTOM_PER_FILE = TempoKnob VALLEYAUDIO_CUSTOM_PER_FILE = TempoKnob


# --------------------------------------------------------------
# Venom

PLUGIN_FILES += $(filter-out Venom/src/plugin.cpp,$(wildcard Venom/src/*.cpp))

# -------------------------------------------------------------- # --------------------------------------------------------------
# Voxglitch # Voxglitch


@@ -2821,6 +2820,15 @@ $(BUILD_DIR)/ValleyAudio/%.cpp.o: ValleyAudio/%.cpp
-Wno-sign-compare \ -Wno-sign-compare \
-Wno-unused-but-set-variable -Wno-unused-but-set-variable


$(BUILD_DIR)/Venom/%.cpp.o: Venom/%.cpp
-@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
@echo "Compiling $<"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \
$(foreach m,$(VENOM_CUSTOM),$(call custom_module_names,$(m),Venom)) \
-DSKIP_MINGW_FORMAT \
-DpluginInstance=pluginInstance__Venom \
-lglfw

$(BUILD_DIR)/voxglitch/%.cpp.o: voxglitch/%.cpp $(BUILD_DIR)/voxglitch/%.cpp.o: voxglitch/%.cpp
-@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
@echo "Compiling $<" @echo "Compiling $<"


+ 1
- 1
plugins/Sapphire

@@ -1 +1 @@
Subproject commit e2bcefcaa7753f017cd131a28aae0e5e346aafec
Subproject commit ef10da4e2578162b2db2f6534857d6504491daf4

+ 1
- 0
plugins/Venom

@@ -0,0 +1 @@
Subproject commit 1dc0e0612b75fcf4849f28cb6e569e3b6f13981a

+ 101
- 8
plugins/plugins.cpp View File

@@ -343,9 +343,11 @@ extern Model* modelTestVCF;
#include "cf/src/plugin.hpp" #include "cf/src/plugin.hpp"


// CVfunk // CVfunk
#define modelNode modelCVfunkNode
#define modelSteps modelCVfunkSteps #define modelSteps modelCVfunkSteps
#include "CVfunk/src/plugin.hpp" #include "CVfunk/src/plugin.hpp"
#undef modelSteps #undef modelSteps
#undef modelNode


// ChowDSP // ChowDSP
#include "ChowDSP/src/plugin.hpp" #include "ChowDSP/src/plugin.hpp"
@@ -892,6 +894,13 @@ void surgext_rack_update_theme();
// ValleyAudio // ValleyAudio
#include "ValleyAudio/src/Valley.hpp" #include "ValleyAudio/src/Valley.hpp"


// Venom
#include "Venom/src/plugin.hpp"
namespace Venom
{
void readDefaultThemes();
}

// Voxglitch // Voxglitch
#define modelLooper modelVoxglitchLooper #define modelLooper modelVoxglitchLooper
#include "voxglitch/src/plugin.hpp" #include "voxglitch/src/plugin.hpp"
@@ -1011,6 +1020,7 @@ extern Plugin* pluginInstance__stoermelder_p1;
Plugin* pluginInstance__surgext; Plugin* pluginInstance__surgext;
Plugin* pluginInstance__unless_modules; Plugin* pluginInstance__unless_modules;
Plugin* pluginInstance__ValleyAudio; Plugin* pluginInstance__ValleyAudio;
Plugin* pluginInstance__Venom;
Plugin* pluginInstance__Voxglitch; Plugin* pluginInstance__Voxglitch;
Plugin* pluginInstance__WhatTheRack; Plugin* pluginInstance__WhatTheRack;
extern Plugin* pluginInstance__WSTD_Drums; extern Plugin* pluginInstance__WSTD_Drums;
@@ -1147,12 +1157,12 @@ static void initStatic__Cardinal()
#else #else
spl.removeModule("glBars"); spl.removeModule("glBars");
#endif #endif
#ifndef STATIC_BUILD
#ifndef __MOD_DEVICES__
p->addModel(modelAudioFile); p->addModel(modelAudioFile);
#else #else
spl.removeModule("AudioFile"); spl.removeModule("AudioFile");
#endif #endif
#if !(defined(DISTRHO_OS_WASM) || defined(STATIC_BUILD))
#if !(defined(DISTRHO_OS_WASM) || defined(__MOD_DEVICES__))
p->addModel(modelCarla); p->addModel(modelCarla);
p->addModel(modelIldaeil); p->addModel(modelIldaeil);
#else #else
@@ -1164,11 +1174,6 @@ static void initStatic__Cardinal()
#else #else
spl.removeModule("SassyScope"); spl.removeModule("SassyScope");
#endif #endif
#if defined(HAVE_X11) && !defined(HEADLESS) && !defined(STATIC_BUILD)
p->addModel(modelMPV);
#else
spl.removeModule("MPV");
#endif
#ifdef HAVE_FFTW3F #ifdef HAVE_FFTW3F
p->addModel(modelAudioToCVPitch); p->addModel(modelAudioToCVPitch);
#else #else
@@ -2048,6 +2053,7 @@ static void initStatic__CVfunk()
if (spl.ok()) if (spl.ok())
{ {
#define modelSteps modelCVfunkSteps #define modelSteps modelCVfunkSteps
#define modelNode modelCVfunkNode
p->addModel(modelSteps); p->addModel(modelSteps);
p->addModel(modelEnvelopeArray); p->addModel(modelEnvelopeArray);
p->addModel(modelPentaSequencer); p->addModel(modelPentaSequencer);
@@ -2069,6 +2075,16 @@ static void initStatic__CVfunk()
p->addModel(modelPreeeeeeeeeeessedDuck); p->addModel(modelPreeeeeeeeeeessedDuck);
p->addModel(modelArrange); p->addModel(modelArrange);
p->addModel(modelTriDelay); p->addModel(modelTriDelay);
p->addModel(modelTatami);
p->addModel(modelCartesia);
p->addModel(modelJunkDNA);
p->addModel(modelPicus);
p->addModel(modelNode);
p->addModel(modelWeave);
p->addModel(modelWonk);
p->addModel(modelHammer);
p->addModel(modelHub);
#undef modelNode
#undef modelSteps #undef modelSteps
} }
} }
@@ -2578,7 +2594,7 @@ static void initStatic__JW()
p->addModel(modelCoolBreeze); p->addModel(modelCoolBreeze);
p->addModel(modelPete); p->addModel(modelPete);
p->addModel(modelTimer); p->addModel(modelTimer);
#ifndef STATIC_BUILD
#ifndef __MOD_DEVICES__
p->addModel(modelStr1ker); p->addModel(modelStr1ker);
#else #else
spl.removeModule("Str1ker"); spl.removeModule("Str1ker");
@@ -3221,6 +3237,7 @@ static void initStatic__Sapphire()
p->addModel(modelSapphireTout); p->addModel(modelSapphireTout);
p->addModel(modelSapphireTricorder); p->addModel(modelSapphireTricorder);
p->addModel(modelSapphireTubeUnit); p->addModel(modelSapphireTubeUnit);
p->addModel(modelSapphireZoo);
} }
} }


@@ -3469,6 +3486,81 @@ static void initStatic__ValleyAudio()
} }
} }


static void initStatic__Venom()
{
Plugin* const p = new Plugin;
pluginInstance__Venom = p;

const StaticPluginLoader spl(p, "Venom");
if (spl.ok())
{
p->addModel(modelVenomAD_ASR);
p->addModel(modelVenomAuxClone);
p->addModel(modelVenomBayInput);
p->addModel(modelVenomBayNorm);
p->addModel(modelVenomBayOutput);
p->addModel(modelVenomBenjolinOsc);
p->addModel(modelVenomBenjolinGatesExpander);
p->addModel(modelVenomBenjolinVoltsExpander);
p->addModel(modelVenomBernoulliSwitch);
p->addModel(modelVenomBernoulliSwitchExpander);
p->addModel(modelVenomBlocker);
p->addModel(modelVenomBypass);
p->addModel(modelVenomCloneMerge);
p->addModel(modelVenomCompare2);
p->addModel(modelVenomCrossFade3D);
p->addModel(modelVenomHQ);
p->addModel(modelVenomKnob5);
p->addModel(modelVenomLinearBeats);
p->addModel(modelVenomLinearBeatsExpander);
p->addModel(modelVenomLogic);
p->addModel(modelVenomMix4);
p->addModel(modelVenomMix4Stereo);
p->addModel(modelVenomMixFade);
p->addModel(modelVenomMixFade2);
p->addModel(modelVenomMixMute);
p->addModel(modelVenomMixOffset);
p->addModel(modelVenomMixPan);
p->addModel(modelVenomMixSend);
p->addModel(modelVenomMixSolo);
p->addModel(modelVenomMousePad);
p->addModel(modelVenomMultiMerge);
p->addModel(modelVenomMultiSplit);
p->addModel(modelVenomOscillator);
p->addModel(modelVenomNORS_IQ);
p->addModel(modelVenomNORSIQChord2Scale);
p->addModel(modelVenomPan3D);
p->addModel(modelVenomPolyClone);
p->addModel(modelVenomPolyFade);
p->addModel(modelVenomPolyOffset);
p->addModel(modelVenomPolySHASR);
p->addModel(modelVenomPolyScale);
p->addModel(modelVenomPolyUnison);
p->addModel(modelVenomPush5);
p->addModel(modelVenomQuadVCPolarizer);
p->addModel(modelVenomRecurse);
p->addModel(modelVenomRecurseStereo);
p->addModel(modelVenomReformation);
p->addModel(modelVenomRhythmExplorer);
p->addModel(modelVenomShapedVCA);
p->addModel(modelVenomSlew);
p->addModel(modelVenomSphereToXYZ);
p->addModel(modelVenomThru);
p->addModel(modelVenomVCAMix4);
p->addModel(modelVenomVCAMix4Stereo);
p->addModel(modelVenomVCOUnit);
p->addModel(modelVenomBlank);
p->addModel(modelVenomWaveFolder);
p->addModel(modelVenomWaveMangler);
p->addModel(modelVenomWaveMultiplier);
p->addModel(modelVenomWidgetMenuExtender);
p->addModel(modelVenomWinComp);
p->addModel(modelVenomXM_OP);

Venom::readDefaultThemes();
}
}

static void initStatic__Voxglitch() static void initStatic__Voxglitch()
{ {
Plugin* p = new Plugin; Plugin* p = new Plugin;
@@ -3669,6 +3761,7 @@ void initStaticPlugins()
initStatic__surgext(); initStatic__surgext();
initStatic__unless_modules(); initStatic__unless_modules();
initStatic__ValleyAudio(); initStatic__ValleyAudio();
initStatic__Venom();
initStatic__Voxglitch(); initStatic__Voxglitch();
initStatic__WhatTheRack(); initStatic__WhatTheRack();
initStatic__WSTD_Drums(); initStatic__WSTD_Drums();


+ 5
- 51
src/CardinalCommon.cpp View File

@@ -99,7 +99,7 @@ void destroyStaticPlugins();
} }
} }


const std::string CARDINAL_VERSION = "25.06";
const std::string CARDINAL_VERSION = "25.10";


// ----------------------------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------------------------


@@ -626,47 +626,7 @@ Initializer::Initializer(const CardinalBasePlugin* const plugin, const CardinalB


if (asset::userDir.empty()) if (asset::userDir.empty())
{ {
#if defined(DISTRHO_OS_WASM)
asset::userDir = "/userfiles";
#elif defined(ARCH_MAC)
asset::userDir = system::join(homeDir(), "Documents", "Cardinal");
#elif defined(ARCH_WIN)
asset::userDir = system::join(getSpecialPath(kSpecialPathMyDocuments), "Cardinal");
#else
std::string xdgConfigDir;
if (const char* const xdgEnv = getenv("XDG_CONFIG_HOME"))
xdgConfigDir = xdgEnv;
if (xdgConfigDir.empty())
xdgConfigDir = system::join(homeDir(), ".config");

const std::string xdgDirsConfigPath(system::join(xdgConfigDir, "user-dirs.dirs"));

if (system::exists(xdgDirsConfigPath))
{
std::ifstream xdgDirsConfigFile(xdgDirsConfigPath, std::ios::in|std::ios::ate);
std::string xdgDirsConfig(xdgDirsConfigFile.tellg(), 0);

xdgDirsConfigFile.seekg(0);
xdgDirsConfigFile.read(&xdgDirsConfig[0], xdgDirsConfig.size());

if (const char* const xdgDocsDir = std::strstr(xdgDirsConfig.c_str(), "XDG_DOCUMENTS_DIR=\""))
{
if (const char* const xdgDocsDirNL = std::strstr(xdgDocsDir, "\"\n"))
{
asset::userDir = std::string(xdgDocsDir + 19, xdgDocsDirNL - xdgDocsDir - 19);

if (string::startsWith(asset::userDir, "$HOME"))
asset::userDir.replace(asset::userDir.begin(), asset::userDir.begin() + 5, homeDir());

if (! system::exists(asset::userDir))
asset::userDir.clear();
}
}
}

if (asset::userDir.empty())
asset::userDir = system::join(homeDir(), "Documents", "Cardinal");
#endif
asset::userDir = system::join(getSpecialDir(kSpecialDirDocuments), "Cardinal");


if (isRealInstance) if (isRealInstance)
{ {
@@ -683,17 +643,10 @@ Initializer::Initializer(const CardinalBasePlugin* const plugin, const CardinalB
#ifndef CARDINAL_COMMON_DSP_ONLY #ifndef CARDINAL_COMMON_DSP_ONLY
if (asset::configDir.empty()) if (asset::configDir.empty())
{ {
#if defined(ARCH_MAC) || defined(ARCH_WIN) || defined(DISTRHO_OS_WASM)
asset::configDir = asset::userDir;
#else
if (const char* const xdgEnv = getenv("XDG_CONFIG_HOME"))
asset::configDir = system::join(xdgEnv, "Cardinal");
else
asset::configDir = system::join(homeDir(), ".config", "Cardinal");
asset::configDir = system::join(getSpecialDir(kSpecialDirConfig), "Cardinal");


if (isRealInstance) if (isRealInstance)
system::createDirectory(asset::configDir); system::createDirectory(asset::configDir);
#endif
} }
#endif #endif
@@ -875,7 +828,8 @@ void Initializer::stopRemoteServer()
lo_server_thread_stop(oscServerThread); lo_server_thread_stop(oscServerThread);
lo_server_thread_del_method(oscServerThread, nullptr, nullptr); lo_server_thread_del_method(oscServerThread, nullptr, nullptr);
lo_server_thread_free(oscServerThread); lo_server_thread_free(oscServerThread);
oscServerThread = oscServer = nullptr;
oscServerThread = nullptr;
oscServer = nullptr;
} }
#else #else
if (oscServer != nullptr) if (oscServer != nullptr)


+ 1
- 1
src/CardinalPlugin.cpp View File

@@ -414,7 +414,7 @@ protected:
uint32_t getVersion() const override uint32_t getVersion() const override
{ {
return d_version(0, 25, 6);
return d_version(0, 25, 10);
} }
int64_t getUniqueId() const override int64_t getUniqueId() const override


+ 0
- 14
src/CardinalUI.cpp View File

@@ -1259,20 +1259,6 @@ protected:
#endif #endif
} }


#if 0
void uiReshape(const uint width, const uint height) override
{
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, width, 0.0, height, -1.0, 1.0);
glViewport(0, 0, width, height);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
#endif

private: private:
/** /**
Set our UI class as non-copyable and add a leak detector just in case. Set our UI class as non-copyable and add a leak detector just in case.


+ 3
- 0
src/Makefile View File

@@ -147,6 +147,9 @@ au: $(TARGETS)
$(MAKE) au -C CardinalFX $(CARDINAL_SYNTH_ARGS) $(MAKE) au -C CardinalFX $(CARDINAL_SYNTH_ARGS)
$(MAKE) au -C CardinalSynth $(CARDINAL_SYNTH_ARGS) $(MAKE) au -C CardinalSynth $(CARDINAL_SYNTH_ARGS)


mapi: $(TARGETS)
$(MAKE) mapi -C CardinalFX $(CARDINAL_FX_ARGS)

lv2: $(TARGETS) lv2: $(TARGETS)
$(MAKE) lv2 -C Cardinal $(MAKE) lv2 -C Cardinal
$(MAKE) lv2 -C CardinalFX $(CARDINAL_FX_ARGS) $(MAKE) lv2 -C CardinalFX $(CARDINAL_FX_ARGS)


+ 6
- 0
src/Makefile.cardinal.mk View File

@@ -264,6 +264,7 @@ endif


ifeq ($(WASM),true) ifeq ($(WASM),true)
APP_EXT = .js APP_EXT = .js
UI_TYPE = gles2
endif endif


USE_VST2_BUNDLE = true USE_VST2_BUNDLE = true
@@ -408,6 +409,11 @@ endif


BUILD_CXX_FLAGS += -DCARDINAL_PLUGIN_PREFIX='"$(PREFIX)"' BUILD_CXX_FLAGS += -DCARDINAL_PLUGIN_PREFIX='"$(PREFIX)"'


# --------------------------------------------------------------
# we know what we are doing, promise!

BUILD_CXX_FLAGS += -DDISTRHO_NO_WARNINGS

# -------------------------------------------------------------- # --------------------------------------------------------------
# Enable all possible plugin types and setup resources # Enable all possible plugin types and setup resources




+ 2
- 1
src/custom/RemoteNanoVG.cpp View File

@@ -1,6 +1,6 @@
/* /*
* DISTRHO Cardinal Plugin * DISTRHO Cardinal Plugin
* Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2021-2025 Filipe Coelho <falktx@falktx.com>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as * modify it under the terms of the GNU General Public License as
@@ -55,6 +55,7 @@ GLFWAPI void glfwSetClipboardString(GLFWwindow*, const char*) {}
GLFWAPI GLFWcursor* glfwCreateStandardCursor(int) { return nullptr; } GLFWAPI GLFWcursor* glfwCreateStandardCursor(int) { return nullptr; }
GLFWAPI void glfwSetCursor(GLFWwindow*, GLFWcursor*) {} GLFWAPI void glfwSetCursor(GLFWwindow*, GLFWcursor*) {}
GLFWAPI const char* glfwGetKeyName(int, int) { return nullptr; } GLFWAPI const char* glfwGetKeyName(int, int) { return nullptr; }
GLFWAPI int glfwGetKey(GLFWwindow*, int) { return 0; }
GLFWAPI int glfwGetKeyScancode(int) { return 0; } GLFWAPI int glfwGetKeyScancode(int) { return 0; }
GLFWAPI double glfwGetTime(void) { return 0.0; } GLFWAPI double glfwGetTime(void) { return 0.0; }




+ 11
- 1
src/custom/glfw.cpp View File

@@ -1,6 +1,6 @@
/* /*
* DISTRHO Cardinal Plugin * DISTRHO Cardinal Plugin
* Copyright (C) 2021-2024 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2021-2025 Filipe Coelho <falktx@falktx.com>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as * modify it under the terms of the GNU General Public License as
@@ -17,6 +17,7 @@


#include "Application.hpp" #include "Application.hpp"
#include "CardinalPluginContext.hpp" #include "CardinalPluginContext.hpp"
#include "widget/event.hpp"


#include <GLFW/glfw3.h> #include <GLFW/glfw3.h>


@@ -207,3 +208,12 @@ GLFWAPI const char* glfwGetKeyName(const int key, int)
default: return nullptr; default: return nullptr;
} }
} }

int glfwGetKey(GLFWwindow*, const int key)
{
CardinalPluginContext* const context = static_cast<CardinalPluginContext*>(APP);
DISTRHO_SAFE_ASSERT_RETURN(context != nullptr, GLFW_RELEASE);
DISTRHO_SAFE_ASSERT_RETURN(context->event != nullptr, GLFW_RELEASE);

return context->event->heldKeys.find(key) != context->event->heldKeys.end() ? GLFW_PRESS : GLFW_RELEASE;
}

+ 17
- 14
src/override/Scene.cpp View File

@@ -1,6 +1,6 @@
/* /*
* DISTRHO Cardinal Plugin * DISTRHO Cardinal Plugin
* Copyright (C) 2021-2024 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2021-2025 Filipe Coelho <falktx@falktx.com>
* SPDX-License-Identifier: GPL-3.0-or-later * SPDX-License-Identifier: GPL-3.0-or-later
*/ */


@@ -207,20 +207,23 @@ void Scene::step() {
(internal->historyActionIndex != actionIndex (internal->historyActionIndex != actionIndex
&& actionIndex > 0 && actionIndex > 0
&& time - internal->lastSceneChangeTime >= 1.0)) { && time - internal->lastSceneChangeTime >= 1.0)) {
remoteDetails->first = false;

const std::string& name(APP->history->actions[actionIndex - 1]->name);
static const std::vector<std::string> ignoredNames = {
"move knob",
"move modules",
"move switch",
};
if (std::find(ignoredNames.cbegin(), ignoredNames.cend(), name) == ignoredNames.cend()) {
printf("action '%s'\n", APP->history->actions[actionIndex - 1]->name.c_str());
if (remoteDetails->first) {
remoteDetails->first = false;
remoteUtils::sendFullPatchToRemote(remoteDetails); remoteUtils::sendFullPatchToRemote(remoteDetails);

if (remoteDetails->screenshot) {
window::generateScreenshot();
} else {
const std::string& name(APP->history->actions[actionIndex - 1]->name);
static const std::vector<std::string> ignoredNames = {
"move knob",
"move modules",
"move switch",
};
if (std::find(ignoredNames.cbegin(), ignoredNames.cend(), name) == ignoredNames.cend()) {
d_debug("action '%s'\n", APP->history->actions[actionIndex - 1]->name.c_str());
remoteUtils::sendFullPatchToRemote(remoteDetails);

if (remoteDetails->screenshot) {
window::generateScreenshot();
}
} }
} }
internal->historyActionIndex = actionIndex; internal->historyActionIndex = actionIndex;


+ 1
- 1
utils/macOS/Info_JACK.plist View File

@@ -11,7 +11,7 @@
<key>CFBundleIdentifier</key> <key>CFBundleIdentifier</key>
<string>studio.kx.distrho.cardinal.jack</string> <string>studio.kx.distrho.cardinal.jack</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>25.06</string>
<string>25.10</string>
<key>LSMinimumSystemVersion</key> <key>LSMinimumSystemVersion</key>
<string>10.15</string> <string>10.15</string>
<key>NSHumanReadableCopyright</key> <key>NSHumanReadableCopyright</key>


+ 1
- 1
utils/macOS/Info_Native.plist View File

@@ -11,7 +11,7 @@
<key>CFBundleIdentifier</key> <key>CFBundleIdentifier</key>
<string>studio.kx.distrho.cardinal.native</string> <string>studio.kx.distrho.cardinal.native</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>25.06</string>
<string>25.10</string>
<key>LSMinimumSystemVersion</key> <key>LSMinimumSystemVersion</key>
<string>10.15</string> <string>10.15</string>
<key>NSHumanReadableCopyright</key> <key>NSHumanReadableCopyright</key>


Loading…
Cancel
Save