diff --git a/src/custom/dep.cpp b/src/custom/dep.cpp index 4d0209e..57a9719 100644 --- a/src/custom/dep.cpp +++ b/src/custom/dep.cpp @@ -393,7 +393,6 @@ static const struct { const int shapeNumberToIgnore; } svgFilesToInvertForLightMode[] = { // GPLv3+ - /* FIXME does not work very well { kModeAutinn, "/Autinn/res/AmpModule.svg", {}, -1 }, { kModeAutinn, "/Autinn/res/BassModule.svg", {}, -1 }, { kModeAutinn, "/Autinn/res/CVConverterModule.svg", {}, -1 }, @@ -419,7 +418,6 @@ static const struct { { kModeAutinn, "/Autinn/res/VibratoModule.svg", {}, -1 }, { kModeAutinn, "/Autinn/res/VxyModule.svg", {}, -1 }, { kModeAutinn, "/Autinn/res/ZodModule.svg", {}, -1 }, - */ // Custom, runtime light mode used with permission { kModeBefaco, "/Befaco/res/components/Knurlie.svg", {}, -1 }, { kModeBefaco, "/Befaco/res/panels/ABC.svg", {}, -1 }, @@ -459,7 +457,6 @@ static const struct { { kModeCardinal, "/Cardinal/res/Ildaeil.svg", {}, -1 }, // TODO chowdsp // GPLv3+ - /* FIXME needs color adjustments { kModeFehlerFabrik, "/FehlerFabrik/res/Arpanet.svg", {}, -1 }, { kModeFehlerFabrik, "/FehlerFabrik/res/Aspect.svg", {}, -1 }, { kModeFehlerFabrik, "/FehlerFabrik/res/Botzinger.svg", {}, -1 }, @@ -475,7 +472,6 @@ static const struct { { kModeFehlerFabrik, "/FehlerFabrik/res/Rasoir.svg", {}, -1 }, { kModeFehlerFabrik, "/FehlerFabrik/res/Sigma.svg", {}, -1 }, { kModeFehlerFabrik, "/FehlerFabrik/res/Components/FFHexScrew.svg", {}, -1 }, - */ // GPLv3+ { kModeForsitan, "/forsitan-modulare/res/alea.svg", {}, -1 }, { kModeForsitan, "/forsitan-modulare/res/cumuli.svg", {}, -1 }, @@ -511,7 +507,6 @@ static const struct { { kModeFundamental, "/Fundamental/res/WTLFO.svg", {}, -1 }, { kModeFundamental, "/Fundamental/res/WTVCO.svg", {}, -1 }, // GPLv3+ - /* FIXME needs color adjustments { kModeGoodSheperd, "/GoodSheperd/res/Holzschnabel.svg", {}, -1 }, { kModeGoodSheperd, "/GoodSheperd/res/Hurdle.svg", {}, -1 }, { kModeGoodSheperd, "/GoodSheperd/res/SEQ3st.svg", {}, -1 }, @@ -519,11 +514,10 @@ static const struct { { kModeGoodSheperd, "/GoodSheperd/res/Stable16.svg", {}, -1 }, { kModeGoodSheperd, "/GoodSheperd/res/Stall.svg", {}, -1 }, { kModeGoodSheperd, "/GoodSheperd/res/Switch1.svg", {}, -1 }, - */ + { kModeGoodSheperd, "/GoodSheperd/res/components/SquareSwitch_0.svg", {}, -1 }, + { kModeGoodSheperd, "/GoodSheperd/res/components/SquareSwitch_1.svg", {}, -1 }, // GPLv3+ - /* FIXME needs color adjustments { kModeH4n4, "/h4n4-modules/res/XenQnt.svg", {}, -1 }, - */ // MIT { kModeHamptonHarmonics, "/HamptonHarmonics/res/Arp.svg", {}, -1 }, { kModeHamptonHarmonics, "/HamptonHarmonics/res/Progress.svg", {}, -1 }, @@ -856,9 +850,107 @@ bool invertPaintForDarkMode(const DarkMode mode, NSVGshape* const shape, NSVGpai } static inline -bool invertPaintForLightMode(NSVGshape* const shape, NSVGpaint& paint) +bool invertPaintForLightMode(const LightMode mode, NSVGshape* const shape, NSVGpaint& paint) { - switch(paint.type) + switch (paint.type) + { + case NSVG_PAINT_NONE: + return true; + case NSVG_PAINT_LINEAR_GRADIENT: + for (int i=0; instops; ++i) + paint.gradient->stops[i].color = invertColor(paint.gradient->stops[i].color); + return true; + case NSVG_PAINT_COLOR: + break; + default: + return false; + } + + switch (mode) + { + case kModeAutinn: + switch (paint.color) + { + // red stripe + case 0xff0a115e: + paint.color = 0xffa1a8f5; + return true; + // logo + case 0xff00d7ff: + paint.color = 0xff005868; + return true; + } + break; + case kModeFehlerFabrik: + switch (paint.color) + { + // make a few colors reverse in luminance/lightness + case 0xff3edcfc: paint.color = 0xff039fbf; return true; + case 0xff4a6fff: paint.color = 0xff0024b2; return true; + case 0xff5c49fd: paint.color = 0xff1502b6; return true; + case 0xff61a6ff: paint.color = 0xff00459e; return true; + case 0xff6e97ad: paint.color = 0xff537c93; return true; + case 0xff78ffb1: paint.color = 0xff008739; return true; + case 0xffb5cf00: paint.color = 0xff627000; return true; + case 0xffbfa463: paint.color = 0xff9c8140; return true; + case 0xffcba5e4: paint.color = 0xff411b5a; return true; + case 0xffce86ef: paint.color = 0xff58107a; return true; + case 0xffcf7685: paint.color = 0xff8a303e; return true; + case 0xffd1e471: paint.color = 0xff798c1b; return true; + // screw core + case 0xff1a1a1a: paint.color = 0xffcccccc; return true; + // keep already darkish colors + case 0xff6a8800: + case 0xff7cce00: + return false; + } + break; + case kModeGoodSheperd: + switch (paint.color) + { + // background + case 0xff332e21: paint.color = 0xffdfdacd; return true; + case 0xff462f17: paint.color = 0xffe8d2ba; return true; + // jack box overlays + case 0xff56534a: paint.color = 0xffb6b3aa; return true; + case 0xffbc9d8e: paint.color = 0xff705142; return true; + case 0xfeede9e2: paint.color = 0xff1c1812; return true; + // colors to keep the same + case 0xff2400fe: + case 0xffcab39b: + return false; + } + break; + case kModeH4n4: + switch (paint.color) + { + case 0xffffb380: + return false; + case 0xffffccaa: + paint.color = 0xff572300; + return true; + } + break; + case kModeSonusmodular: + switch (paint.color) + { + case 0xff2a2aff: + case 0xff87cdde: + case 0xffe9afaf: + case 0xff4e4ed3: + case 0xff55ddff: + case 0xffdbdbe3: + return false; + case 0xff0a1284: + paint.color = 0xff7a82f5; + return true; + } + break; + default: + break; + } + + switch (paint.type) { case NSVG_PAINT_NONE: return true; @@ -1082,11 +1174,13 @@ NSVGimage* nsvgParseFromFileCardinal(const char* const filename, const char* con shapesOrig = handle->shapes; shapesMOD = nsvg__duplicateShapes(shapesOrig); + const LightMode mode = svgFilesToInvertForLightMode[i].mode; + // shape paint inversion for (NSVGshape* shape = shapesMOD; shape != nullptr; shape = shape->next) { - if (invertPaintForLightMode(shape, shape->fill)) - invertPaintForLightMode(shape, shape->stroke); + if (invertPaintForLightMode(mode, shape, shape->fill)) + invertPaintForLightMode(mode, shape, shape->stroke); } goto postparse;