/* * DISTRHO Cardinal Plugin * Copyright (C) 2021 Filipe Coelho * * 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. */ #include #include #include #include #ifdef NDEBUG # undef DEBUG #endif #include #include "DistrhoUtils.hpp" namespace rack { namespace asset { std::string userDir; // ignored std::string systemDir; // points to plugin resources dir (or installed/local Rack dir) std::string bundlePath; // points to plugin manifests dir (or empty) // get rid of "res/" prefix static inline std::string& trim(std::string& s) { if (std::strncmp(s.c_str(), "res/", 4) == 0) s = s.substr(4, s.size()-4); return s; } // ignored, returns the same as `system` std::string user(std::string filename) { return system(filename); } // get system resource, trimming "res/" prefix if we are loaded as a plugin bundle std::string system(std::string filename) { // Always use dark screws if (string::endsWith(filename, "/ScrewSilver.svg")) filename = filename.substr(0, filename.size()-10) + "Black.svg"; return system::join(systemDir, bundlePath.empty() ? filename : trim(filename)); } // get plugin resource std::string plugin(plugin::Plugin* plugin, std::string filename) { DISTRHO_SAFE_ASSERT_RETURN(plugin != nullptr, {}); // always use dark scheme if (plugin->slug == "GlueTheGiant") { if (filename == "res/BusDepot.svg" || filename == "res/BusRoute.svg" || filename == "res/EnterBus.svg" || filename == "res/ExitBus.svg" || filename == "res/GigBus.svg" || filename == "res/MetroCityBus.svg" || filename == "res/MiniBus.svg" || filename == "res/Road.svg" || filename == "res/SchoolBus.svg") { filename = filename.substr(0, filename.size()-4) + "_Night.svg"; } } return system::join(plugin->path, filename); } // path to demo patch files std::string patchesPath() { // no bundlePath set, assume local source build if (bundlePath.empty()) return system::join(systemDir, "..", "..", "patches"); // bundlePath is present, use resources from bundle return system::join(systemDir, "patches"); } // path to plugin manifest std::string pluginManifest(const std::string& dirname) { // no bundlePath set, assume local source build if (bundlePath.empty()) return system::join(systemDir, "..", "..", "plugins", dirname, "plugin.json"); // bundlePath is present, use resources from bundle return system::join(bundlePath, dirname + ".json"); } // path to plugin files std::string pluginPath(const std::string& dirname) { // no bundlePath set, assume local source build if (bundlePath.empty()) return system::join(systemDir, "..", "..", "plugins", dirname); // bundlePath is present, use resources from bundle return system::join(systemDir, dirname); } } }