Browse Source

Filter out VCV logo from Core files at runtime

tags/22.02
falkTX 4 years ago
parent
commit
383f02ee2b
3 changed files with 108 additions and 1 deletions
  1. +3
    -0
      src/Makefile
  2. +1
    -1
      src/Makefile.cardinal.mk
  3. +104
    -0
      src/override/dep.cpp

+ 3
- 0
src/Makefile View File

@@ -68,6 +68,9 @@ BUILD_C_FLAGS += -std=gnu11
BUILD_C_FLAGS += -fno-finite-math-only
BUILD_CXX_FLAGS += -fno-finite-math-only

# use our custom function to filter out VCV trademarks
BUILD_CXX_FLAGS += -DnsvgParseFromFile=nsvgParseFromFileCardinal

# --------------------------------------------------------------
# Rack files to build



+ 1
- 1
src/Makefile.cardinal.mk View File

@@ -170,7 +170,7 @@ all: jack lv2 vst2 vst3 resources

ifeq ($(NAME),Cardinal)

CORE_RESOURCES = $(subst ../Rack/res/,,$(wildcard ../Rack/res/*)) template.vcv
CORE_RESOURCES = $(filter-out icon.png,$(subst ../Rack/res/,,$(wildcard ../Rack/res/*))) template.vcv

PLUGIN_RESOURCES += $(CORE_RESOURCES:%=$(TARGET_DIR)/Cardinal.lv2/resources/%)
ifeq ($(MACOS),true)


+ 104
- 0
src/override/dep.cpp View File

@@ -16,6 +16,7 @@
*/

#include <cstdio>
#include <cstring>

// fix blendish build, missing symbol in debug mode
#ifdef DEBUG
@@ -39,4 +40,107 @@ float FollowerBase::efGainMaxDecibelsDebug = 12.0f;
// Compile those nice implementation-in-header little libraries
#define NANOSVG_IMPLEMENTATION
#define NANOSVG_ALL_COLOR_KEYWORDS
#undef nsvgParseFromFile
#include <nanosvg.h>

// Custom Cardinal filtering
static const struct {
const char* filename;
const char* shapes[4];
} pathsToFilterOut[] = {
{
"Core/AudioInterface.svg",
{"path39377","path39381","path39383","path39379"}
},
{
"Core/AudioInterface2.svg",
{"path18733","path18737","path18731","path18735"}
},
{
"Core/AudioInterface16.svg",
{"path40283","path40287","path40289","path40285"}
},
{
"Core/CV-CC.svg",
{"path12881","path12885","path12887","path12883"}
},
{
"Core/CV-Gate.svg",
{"path13127","path13131","path13133","path13129"}
},
{
"Core/CV-MIDI.svg",
{"path12747","path12751","path12753","path12749"}
},
{
"Core/MIDI-CC.svg",
{"path9740","path9744","path9746","path9742"}
},
{
"Core/MIDI-CV.svg",
{"path11803","path11807","path11809","path11805"}
},
{
"Core/MIDI-Gate.svg",
{"path11634","path11638","path11640","path11636"}
},
{
"Core/MIDI-Map.svg",
{"path21209","path21213","path21215","path21211"}
},
{
"Core/Notes.svg",
{"path6935","path6939","path6941","path6937"}
},
};

static void removeShape(NSVGimage* const handle, const char* const id)
{
for (NSVGshape *shape = handle->shapes, *old = nullptr; shape; old = shape, shape = shape->next)
{
if (strcmp(shape->id, id) != 0)
continue;

if (old != nullptr)
old->next = shape->next;
else
handle->shapes = shape->next;

nsvg__deletePaths(shape->paths);
free(shape);
break;
}
}

extern "C" {
NSVGimage* nsvgParseFromFileCardinal(const char* filename, const char* units, float dpi);
}

NSVGimage* nsvgParseFromFileCardinal(const char* const filename, const char* const units, const float dpi)
{
if (NSVGimage* const handle = nsvgParseFromFile(filename, units, dpi))
{
for (size_t i = 0; i < sizeof(pathsToFilterOut)/sizeof(pathsToFilterOut[0]); ++i)
{
const char* const pathToFilterOut = pathsToFilterOut[i].filename;
const size_t filenamelen = std::strlen(filename);
const size_t filterlen = std::strlen(pathToFilterOut);

if (filenamelen < filterlen)
continue;

if (std::strncmp(filename + (filenamelen-filterlen), pathToFilterOut, filterlen) == 0)
{
printf("Removing CC-ND deadlock from file...\n");
removeShape(handle, pathsToFilterOut[i].shapes[0]);
removeShape(handle, pathsToFilterOut[i].shapes[1]);
removeShape(handle, pathsToFilterOut[i].shapes[2]);
removeShape(handle, pathsToFilterOut[i].shapes[3]);
}
}

return handle;
}

return nullptr;
}

Loading…
Cancel
Save