diff --git a/.gitmodules b/.gitmodules index 2419ab5..30bed9a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -153,7 +153,7 @@ url = https://github.com/martin-lueders/ML_modules.git [submodule "plugins/Orbits"] path = plugins/Orbits - url = git@github.com:RareBreeds/Orbits.git + url = https://github.com/RareBreeds/Orbits.git [submodule "plugins/stocaudio"] path = plugins/stocaudio url = https://github.com/aptrn/stocaudio-modules.git @@ -172,6 +172,18 @@ [submodule "plugins/Dintree"] path = plugins/Dintree url = https://github.com/hires/Dintree-Virtual.git +[submodule "plugins/Algoritmarte"] + path = plugins/Algoritmarte + url = https://github.com/algoritmarte/AlgoritmarteVCVPlugin.git +[submodule "plugins/AaronStatic"] + path = plugins/AaronStatic + url = https://github.com/aaronstatic/AaronStatic_modules.git +[submodule "plugins/MSM"] + path = plugins/MSM + url = https://github.com/netboy3/MSM-vcvrack-plugin.git +[submodule "plugins/nonlinearcircuits"] + path = plugins/nonlinearcircuits + url = https://github.com/mhetrick/nonlinearcircuits.git [submodule "plugins/StarlingVia"] path = plugins/StarlingVia url = https://github.com/starlingcode/Via-for-Rack.git diff --git a/README.md b/README.md index b95c0da..a638c50 100644 --- a/README.md +++ b/README.md @@ -104,6 +104,8 @@ At the moment the following 3rd-party modules are provided: - 21kHz - 8Mode +- Aaron Static +- AlgoritmArte - Amalgamated Harmonics - Animated Circuits - Aria Salvatrice @@ -142,6 +144,8 @@ At the moment the following 3rd-party modules are provided: - Mockba Modular - Mog - mscHack +- MSM +- Nonlinear Circuits - Orbits - Path Set - Prism diff --git a/docs/LICENSES.md b/docs/LICENSES.md index a9ac135..81c0aac 100644 --- a/docs/LICENSES.md +++ b/docs/LICENSES.md @@ -15,6 +15,8 @@ Bellow follows a list of all code licenses used in Cardinal and linked submodule | Rack | GPL-3.0-or-later | The actual Rack code, internal dependencies are compatible with GPLv3+ | | 21kHz | MIT | | | 8Mode | BSD-3-Clause | | +| Aaron Static | MIT | | +| AlgoritmArte | GPL-3.0-or-later | | | Amalgamated Harmonics | BSD-3-Clause | | | Animated Circuits | GPL-3.0-or-later | | | Aria Salvatrice | GPL-3.0-or-later | | @@ -53,6 +55,8 @@ Bellow follows a list of all code licenses used in Cardinal and linked submodule | Mockba Modular | MIT | | | Mog | CC0-1.0 | | | mscHack | BSD-3-Clause | | +| MSM | MIT | Repo's [LICENSE-dist.md](https://github.com/netboy3/MSM-vcvrack-plugin/issues/10) includes wrong information | +| Nonlinear Circuits | CC0-1.0 | | | Orbits | GPL-3.0-or-later | | | Path Set | GPL-3.0-or-later | | | Prism | BSD-3-Clause | | @@ -84,6 +88,10 @@ Below is a list of artwork licenses from plugins |-----------------------------------------|------------------|------------------| | 21kHz | MIT | No artwork specific license provided | | 8Mode | BSD-3-Clause | No artwork specific license provided | +| AaronStatic/* | MIT | No artwork specific license provided | +| AaronStatic/fonts/PixelOperator.ttf | CC0-1.0 | | +| Algoritmarte/* | GPL-3.0-or-later | No artwork specific license provided | +| Algoritmarte/LEDSliderGreenHandle.svg | CC-BY-NC-4.0 | | | AmalgamatedHarmonics/* | BSD-3-Clause | No artwork specific license provided | | AmalgamatedHarmonics/DSEG*.ttf | OFL-1.1-RFN | | | AmalgamatedHarmonics/Roboto*.ttf | Apache-2.0 | | @@ -158,6 +166,12 @@ Below is a list of artwork licenses from plugins | Mog/components/* | CC-BY-NC-4.0 | | | Mog/Exo2-BoldItalic.ttf | OFL-1.1-RFN | | | mscHack/* | BSD-3-Clause | No artwork specific license provided, see [mschack#108](https://github.com/mschack/VCV-Rack-Plugins/issues/108) | +| MSM/* | MIT | No artwork specific license provided | +| MSM/Fonts/DejaVuSansMono.ttf | Bitstream-Vera | | +| MSM/Fonts/Segment7Standard.ttf | OFL-1.1-RFN | | +| MSM/Fonts/Sudo.ttf | OFL-1.1-no-RFN | | +| nonlinearcircuits/* | CC0-1.0 | No artwork specific license provided | +| nonlinearcircuits/Audiowide-Regular.ttf | OFL-1.1-RFN | | | Orbits/* | CC-BY-NC-ND-4.0 | | | Orbits/fonts/ShareTechMono-Regular.ttf | OFL-1.1-RFN | | | PathSet/* | GPL-3.0-or-later | No artwork specific license provided | diff --git a/plugins/AaronStatic b/plugins/AaronStatic new file mode 160000 index 0000000..4ace0a1 --- /dev/null +++ b/plugins/AaronStatic @@ -0,0 +1 @@ +Subproject commit 4ace0a1789c577ee4eb12dc03da5271f80598d62 diff --git a/plugins/Algoritmarte b/plugins/Algoritmarte new file mode 160000 index 0000000..9d41fe8 --- /dev/null +++ b/plugins/Algoritmarte @@ -0,0 +1 @@ +Subproject commit 9d41fe882ab5029100b55c98ba7f10172d452795 diff --git a/plugins/MSM b/plugins/MSM new file mode 160000 index 0000000..80b4a5a --- /dev/null +++ b/plugins/MSM @@ -0,0 +1 @@ +Subproject commit 80b4a5aa06d9c4a58f62d90fe567b28b01f6312d diff --git a/plugins/Makefile b/plugins/Makefile index a271191..1176d56 100644 --- a/plugins/Makefile +++ b/plugins/Makefile @@ -231,7 +231,20 @@ PLUGIN_FILES += $(filter-out 21kHz/src/21kHz.cpp,$(wildcard 21kHz/src/*.cpp)) # -------------------------------------------------------------- # 8Mode -PLUGIN_FILES += $(wildcard 8Mode/src/*.cpp) +PLUGIN_FILES += $(filter-out 8Mode/src/plugin.cpp,$(wildcard 8Mode/src/*.cpp)) + +# -------------------------------------------------------------- +# AlgoritmArte + +PLUGIN_FILES += $(filter-out Algoritmarte/src/plugin.cpp,$(wildcard Algoritmarte/src/*.cpp)) + +# -------------------------------------------------------------- +# Aaron Static + +PLUGIN_FILES += $(wildcard AaronStatic/src/*.cpp) + +# modules/types which are present in other plugins +AARONSTATIC_CUSTOM = RefreshCounter # -------------------------------------------------------------- # AmalgamatedHarmonics @@ -378,7 +391,7 @@ AUTINN_CUSTOM = Chord Vibrato # -------------------------------------------------------------- # Axioma -PLUGIN_FILES += $(wildcard Axioma/src/*.cpp) +PLUGIN_FILES += $(filter-out Axioma/src/plugin.cpp,$(wildcard Axioma/src/*.cpp)) # -------------------------------------------------------------- # BaconPlugs @@ -668,6 +681,19 @@ PLUGIN_FILES += $(wildcard mscHack/src/*.cpp) # modules/types which are present in other plugins MSCHACK_CUSTOM_PER_FILE = MAIN_SYNC_CLOCK FILTER_STRUCT FILTER_PARAM_STRUCT OSC_PARAM_STRUCT PHRASE_CHANGE_STRUCT +# -------------------------------------------------------------- +# MSM + +PLUGIN_FILES += $(filter-out MSM/src/MSM.cpp,$(wildcard MSM/src/*.cpp)) + +# modules/types which are present in other plugins +MSM_CUSTOM = ADSR BlankPanel Delay LFO LowFrequencyOscillator Mult Noise OP VCA VCO sawTable triTable + +# -------------------------------------------------------------- +# Nonlinear Circuits + +PLUGIN_FILES += $(filter-out nonlinearcircuits/src/NLC.cpp,$(wildcard nonlinearcircuits/src/*.cpp)) + # -------------------------------------------------------------- # Orbits @@ -946,7 +972,20 @@ else PLUGIN_LIST = $(subst /plugin.json,,$(wildcard */plugin.json)) endif -UNWANTED_FILES = HetrickCV/res/illustrator - deprecated/MyModule.svg +UNWANTED_FILES = HetrickCV/res/illustrator - deprecated/MyModule.svg +UNWANTED_FILES += nonlinearcircuits/res/NLC - 1050 MIXER SEQUENCER.svg +UNWANTED_FILES += 1050 MIXER SEQUENCER.svg +UNWANTED_FILES += 32to1.svg +UNWANTED_FILES += 4seq.svg +UNWANTED_FILES += 8 BIT CIPHER.svg +UNWANTED_FILES += DIVIDE & CONQUER.svg +UNWANTED_FILES += DIVINE CMOS.svg +UNWANTED_FILES += GENiE.svg +UNWANTED_FILES += NEURON.svg +UNWANTED_FILES += NUMBERWANG.svg +UNWANTED_FILES += ROUTER.svg +UNWANTED_FILES += SEGUE.svg +UNWANTED_FILES += STATUES.svg RESOURCE_FILES = \ $(filter-out $(UNWANTED_FILES), \ @@ -969,6 +1008,7 @@ RESOURCE_FILES += MindMeldModular/res/ShapeMaster/CommunityPresets RESOURCE_FILES += MindMeldModular/res/ShapeMaster/CommunityShapes RESOURCE_FILES += MindMeldModular/res/ShapeMaster/MindMeldPresets RESOURCE_FILES += MindMeldModular/res/ShapeMaster/MindMeldShapes +RESOURCE_FILES += nonlinearcircuits/res # MOD builds only have LV2 FX variant for now ifeq ($(MOD_BUILD),true) @@ -1156,6 +1196,21 @@ $(BUILD_DIR)/8Mode/%.cpp.o: 8Mode/%.cpp $(foreach m,$(8MODE_CUSTOM),$(call custom_module_names,$(m),8Mode)) \ -DpluginInstance=pluginInstance__8Mode +$(BUILD_DIR)/AaronStatic/%.cpp.o: AaronStatic/%.cpp + -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" + @echo "Compiling $<" + $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \ + $(foreach m,$(AARONSTATIC_CUSTOM),$(call custom_module_names,$(m),AaronStatic)) \ + -DpluginInstance=pluginInstance__AaronStatic \ + -Dinit=init__AaronStatic + +$(BUILD_DIR)/Algoritmarte/%.cpp.o: Algoritmarte/%.cpp + -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" + @echo "Compiling $<" + $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \ + $(foreach m,$(ALGORITMARTE_CUSTOM),$(call custom_module_names,$(m),Algoritmarte)) \ + -DpluginInstance=pluginInstance__Algoritmarte + $(BUILD_DIR)/AmalgamatedHarmonics/%.cpp.o: AmalgamatedHarmonics/%.cpp -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" @echo "Compiling $<" @@ -1293,7 +1348,8 @@ $(BUILD_DIR)/Dintree/%.cpp.o: Dintree/%.cpp @echo "Compiling $<" $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \ $(foreach m,$(DINTREE_CUSTOM),$(call custom_module_names,$(m),Dintree)) \ - -DpluginInstance=pluginInstance__Dintree + -DpluginInstance=pluginInstance__Dintree \ + -DSKIP_MINGW_FORMAT $(BUILD_DIR)/DrumKit/%.cpp.o: DrumKit/%.cpp -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" @@ -1546,6 +1602,21 @@ $(BUILD_DIR)/mscHack/%.cpp.o: mscHack/%.cpp -Wno-non-c-typedef-for-linkage \ -Wno-unused-but-set-variable +$(BUILD_DIR)/MSM/%.cpp.o: MSM/%.cpp + -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" + @echo "Compiling $<" + $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \ + $(foreach m,$(MSM_CUSTOM),$(call custom_module_names,$(m),MSM)) \ + -DpluginInstance=pluginInstance__MSM \ + -DDARKTHEME + +$(BUILD_DIR)/nonlinearcircuits/%.cpp.o: nonlinearcircuits/%.cpp + -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" + @echo "Compiling $<" + $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \ + $(foreach m,$(NONLINEARCIRCUITS_CUSTOM),$(call custom_module_names,$(m),nonlinearcircuits)) \ + -DpluginInstance=pluginInstance__nonlinearcircuits + $(BUILD_DIR)/Orbits/%.cpp.o: Orbits/%.cpp -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" @echo "Compiling $<" diff --git a/plugins/nonlinearcircuits b/plugins/nonlinearcircuits new file mode 160000 index 0000000..d7c3763 --- /dev/null +++ b/plugins/nonlinearcircuits @@ -0,0 +1 @@ +Subproject commit d7c3763ba3f801a3cfe98c49dfb7419a1477fd46 diff --git a/plugins/plugins.cpp b/plugins/plugins.cpp index d646793..5302e28 100644 --- a/plugins/plugins.cpp +++ b/plugins/plugins.cpp @@ -30,6 +30,12 @@ // 8Mode #include "8Mode/src/8mode.hpp" +// Aaron Static +#include "AaronStatic/src/plugin.hpp" + +// Algoritmarte +#include "Algoritmarte/src/plugin.hpp" + // AmalgamatedHarmonics #include "AmalgamatedHarmonics/src/AH.hpp" @@ -562,6 +568,51 @@ extern Model* modelAlienz; extern Model* modelOSC_WaveMorph_3; extern Model* modelMaude_221; +// MSM +/* NOTE too much noise in original include, do this a different way +// #include "MSM/src/MSM.hpp" +*/ +#define modelADSR modelMSMADSR +#define modelBlankPanel modelMSMBlankPanel +#define modelDelay modelMSMDelay +#define modelLFO modelMSMLFO +#define modelMult modelMSMMult +#define modelNoise modelMSMNoise +#define modelVCA modelMSMVCA +#define modelVCO modelMSMVCO +extern Model* modelVCO; +extern Model* modelBVCO; +extern Model* modelExperimentalVCO; +extern Model* modelNoise; +extern Model* modelLFO; +extern Model* modelVCA; +extern Model* modelADSR; +extern Model* modelDelay; +extern Model* modelWaveShaper; +extern Model* modelWavefolder; +extern Model* modelBitcrusher; +extern Model* modelPhaserModule; +extern Model* modelMorpher; +extern Model* modelRingMod; +extern Model* modelRandomSource; +extern Model* modelMult; +extern Model* modelCrazyMult; +extern Model* modelFade; +extern Model* modelSimpleSlider; +extern Model* modelxseq; +extern Model* modelBlankPanel; +#undef modelADSR +#undef modelBlankPanel +#undef modelDelay +#undef modelLFO +#undef modelMult +#undef modelNoise +#undef modelVCA +#undef modelVCO + +// Nonlinear Circuits +#include "nonlinearcircuits/src/NLC.hpp" + // Orbits #include "Orbits/src/plugin.hpp" @@ -649,6 +700,8 @@ Plugin* pluginInstance__Cardinal; #ifndef NOPLUGINS Plugin* pluginInstance__21kHz; Plugin* pluginInstance__8Mode; +extern Plugin* pluginInstance__AaronStatic; +Plugin* pluginInstance__Algoritmarte; Plugin* pluginInstance__AmalgamatedHarmonics; Plugin* pluginInstance__AnimatedCircuits; Plugin* pluginInstance__Aria; @@ -690,6 +743,8 @@ Plugin* pluginInstance__ML; Plugin* pluginInstance__MockbaModular; Plugin* pluginInstance__Mog; extern Plugin* pluginInstance__mscHack; +Plugin* pluginInstance__MSM; +Plugin* pluginInstance__nonlinearcircuits; Plugin* pluginInstance__Orbits; Plugin* pluginInstance__PathSet; Plugin* pluginInstance__Prism; @@ -870,6 +925,39 @@ static void initStatic__8Mode() } } +static void initStatic__AaronStatic() +{ + Plugin* const p = new Plugin; + pluginInstance__AaronStatic = p; + + const StaticPluginLoader spl(p, "AaronStatic"); + if (spl.ok()) + { + p->addModel(modelChordCV); + p->addModel(modelScaleCV); + p->addModel(modelRandomNoteCV); + p->addModel(modelDiatonicCV); + } +} + +static void initStatic__Algoritmarte() +{ + Plugin* const p = new Plugin; + pluginInstance__Algoritmarte = p; + + const StaticPluginLoader spl(p, "Algoritmarte"); + if (spl.ok()) + { + p->addModel(modelClockkky); + p->addModel(modelPlanetz); + p->addModel(modelMusiFrog); + p->addModel(modelZefiro); + p->addModel(modelHoldMeTight); + p->addModel(modelCyclicCA); + p->addModel(modelMusiMath); + } +} + static void initStatic__AmalgamatedHarmonics() { Plugin* const p = new Plugin; @@ -2090,6 +2178,78 @@ static void initStatic__mscHack() } } +static void initStatic__MSM() +{ + Plugin* const p = new Plugin; + pluginInstance__MSM = p; + + const StaticPluginLoader spl(p, "MSM"); + if (spl.ok()) + { +#define modelADSR modelMSMADSR +#define modelBlankPanel modelMSMBlankPanel +#define modelDelay modelMSMDelay +#define modelLFO modelMSMLFO +#define modelMult modelMSMMult +#define modelNoise modelMSMNoise +#define modelVCA modelMSMVCA +#define modelVCO modelMSMVCO + p->addModel(modelVCO); + p->addModel(modelBVCO); + p->addModel(modelExperimentalVCO); + p->addModel(modelNoise); + p->addModel(modelLFO); + p->addModel(modelVCA); + p->addModel(modelADSR); + p->addModel(modelDelay); + p->addModel(modelWaveShaper); + p->addModel(modelWavefolder); + p->addModel(modelBitcrusher); + p->addModel(modelPhaserModule); + p->addModel(modelMorpher); + p->addModel(modelRingMod); + p->addModel(modelRandomSource); + p->addModel(modelMult); + p->addModel(modelCrazyMult); + p->addModel(modelFade); + p->addModel(modelSimpleSlider); + p->addModel(modelxseq); + p->addModel(modelBlankPanel); +#undef modelADSR +#undef modelBlankPanel +#undef modelDelay +#undef modelLFO +#undef modelMult +#undef modelNoise +#undef modelVCA +#undef modelVCO + } +} + +static void initStatic__nonlinearcircuits() +{ + Plugin* const p = new Plugin; + pluginInstance__nonlinearcircuits = p; + + const StaticPluginLoader spl(p, "nonlinearcircuits"); + if (spl.ok()) + { + p->addModel(model4Seq); + p->addModel(modelCipher); + p->addModel(modelBOOLs); + p->addModel(modelDivideConquer); + p->addModel(modelDivineCMOS); + p->addModel(modelDoubleNeuron); + p->addModel(modelGenie); + p->addModel(modelLetsSplosh); + p->addModel(modelNeuron); + p->addModel(modelNumberwang); + p->addModel(modelSegue); + p->addModel(modelSquidAxon); + p->addModel(modelStatues); + } +} + static void initStatic__Orbits() { Plugin* const p = new Plugin; @@ -2348,6 +2508,8 @@ void initStaticPlugins() #ifndef NOPLUGINS initStatic__21kHz(); initStatic__8Mode(); + initStatic__AaronStatic(); + initStatic__Algoritmarte(); initStatic__AmalgamatedHarmonics(); initStatic__AnimatedCircuits(); initStatic__Aria(); @@ -2389,6 +2551,8 @@ void initStaticPlugins() initStatic__MockbaModular(); initStatic__Mog(); initStatic__mscHack(); + initStatic__MSM(); + initStatic__nonlinearcircuits(); initStatic__Orbits(); initStatic__PathSet(); initStatic__Prism(); diff --git a/src/custom/dep.cpp b/src/custom/dep.cpp index 4e89cc1..8154f7e 100644 --- a/src/custom/dep.cpp +++ b/src/custom/dep.cpp @@ -56,6 +56,19 @@ static const struct { { "/21kHz/res/Panels/D_Inf.svg", {}, -1 }, { "/21kHz/res/Panels/PalmLoop.svg", {}, -1 }, { "/21kHz/res/Panels/TachyonEntangler.svg", {}, -1 }, + // MIT + {"/AaronStatic/res/ChordCV.svg", {}, -1 }, + {"/AaronStatic/res/DiatonicCV.svg", {}, -1 }, + {"/AaronStatic/res/RandomNoteCV.svg", {}, -1 }, + {"/AaronStatic/res/ScaleCV.svg", {}, -1 }, + // GPL3.0-or-later + { "/Algoritmarte/res/Clockkky.svg", {}, -1 }, + { "/Algoritmarte/res/CyclicCA.svg", {}, -1 }, + { "/Algoritmarte/res/HoldMeTight.svg", {}, -1 }, + { "/Algoritmarte/res/MusiFrog.svg", {}, -1 }, + { "/Algoritmarte/res/MusiMath.svg", {}, -1 }, + { "/Algoritmarte/res/Planetz.svg", {}, -1 }, + { "/Algoritmarte/res/Zefiro.svg", {}, -1 }, // Custom, runtime dark mode used with permission { "/AudibleInstruments/res/Blinds.svg", {}, -1 }, { "/AudibleInstruments/res/Braids.svg", {}, -1 }, @@ -252,6 +265,20 @@ static const struct { { "/kocmoc/res/SKF.svg", {}, -1 }, { "/kocmoc/res/SVF.svg", {}, -1 }, { "/kocmoc/res/TRG.svg", {}, -1 }, + // CC0-1.0 + { "/nonlinearcircuits/res/NLC - 4seq.svg", {}, -1 }, + { "/nonlinearcircuits/res/NLC - 8 BIT CIPHER.svg", {}, -1 }, + { "/nonlinearcircuits/res/BOOLs2.svg", {}, -1 }, + { "/nonlinearcircuits/res/NLC - DIVIDE & CONQUER.svg", {}, -1 }, + { "/nonlinearcircuits/res/NLC - DIVINE CMOS.svg", {}, -1 }, + { "/nonlinearcircuits/res/DoubleNeuronRef.svg", {}, -1 }, + { "/nonlinearcircuits/res/NLC - GENiE.svg", {}, -1 }, + { "/nonlinearcircuits/res/LetsSplosh.svg", {}, -1 }, + { "/nonlinearcircuits/res/NLC - NEURON.svg", {}, -1 }, + { "/nonlinearcircuits/res/NLC - NUMBERWANG.svg", {}, -1 }, + { "/nonlinearcircuits/res/NLC - SEGUE.svg", {}, -1 }, + { "/nonlinearcircuits/res/squid-axon-papernoise-panel2.svg", {}, -1 }, + { "/nonlinearcircuits/res/NLC - STATUES.svg", {}, -1 }, // GPL-3.0-or-later { "/PathSet/res/AstroVibe.svg", {}, -1 }, { "/PathSet/res/IceTray.svg", {}, -1 }, @@ -352,6 +379,29 @@ static inline bool invertPaint(NSVGshape* const shape, NSVGpaint& paint, const c } } + // Special case for Nonlinear Circuits + if (svgFileToInvert != nullptr && std::strncmp(svgFileToInvert, "/nonlinearcircuits/", 19) == 0) + { + switch (paint.color) + { + case 0xff9a7900: + case 0xff96782c: + case 0xff6a07ae: + case 0xffcf8044: + case 0xff2ac6ba: + case 0xff5ba85c: + case 0xffa97b00: + case 0xff9f7a00: + case 0xffff7300: + case 0xffa47b00: + case 0xffb09423: + return false; + case 0xffffffff: + paint.color = 0x00000000; + return true; + } + } + // Special case for PathSet colors if (svgFileToInvert != nullptr && std::strncmp(svgFileToInvert, "/PathSet/", 9) == 0) { @@ -434,6 +484,7 @@ static inline bool invertPaint(NSVGshape* const shape, NSVGpaint& paint, const c case 0xff0095fe: case 0xff4d9a4d: case 0xff4d4d9a: + case 0xff0187fc: return false; // pure black (convert to not quite pure white) case 0xff000000: