@@ -0,0 +1,25 @@ | |||||
#pragma once | |||||
#include "common.hpp" | |||||
namespace rack { | |||||
struct Plugin; | |||||
struct AssetManager { | |||||
std::string systemDir; | |||||
std::string userDir; | |||||
AssetManager(); | |||||
/** Returns the path of a system resource. Should only read files from this location. */ | |||||
std::string system(std::string filename); | |||||
/** Returns the path of a user resource. Can read and write files to this location. */ | |||||
std::string user(std::string filename); | |||||
/** Returns the path of a resource in the plugin's folder. Should only read files from this location. */ | |||||
std::string plugin(Plugin *plugin, std::string filename); | |||||
}; | |||||
} // namespace rack |
@@ -1,24 +0,0 @@ | |||||
#pragma once | |||||
#include "common.hpp" | |||||
#include "plugin/Plugin.hpp" | |||||
namespace rack { | |||||
namespace asset { | |||||
void init(); | |||||
/** Returns the path of a system resource. Should only read files from this location. */ | |||||
std::string system(std::string filename); | |||||
/** Returns the path of a user resource. Can read and write files to this location. */ | |||||
std::string user(std::string filename); | |||||
/** Returns the path of a resource in the plugin's folder. Should only read files from this location. */ | |||||
std::string plugin(Plugin *plugin, std::string filename); | |||||
extern std::string systemDir; | |||||
extern std::string userDir; | |||||
} // namespace asset | |||||
} // namespace rack |
@@ -35,25 +35,25 @@ struct RoundKnob : SVGKnob { | |||||
struct RoundBlackKnob : RoundKnob { | struct RoundBlackKnob : RoundKnob { | ||||
RoundBlackKnob() { | RoundBlackKnob() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/RoundBlackKnob.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/RoundBlackKnob.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct RoundSmallBlackKnob : RoundKnob { | struct RoundSmallBlackKnob : RoundKnob { | ||||
RoundSmallBlackKnob() { | RoundSmallBlackKnob() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/RoundSmallBlackKnob.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/RoundSmallBlackKnob.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct RoundLargeBlackKnob : RoundKnob { | struct RoundLargeBlackKnob : RoundKnob { | ||||
RoundLargeBlackKnob() { | RoundLargeBlackKnob() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/RoundLargeBlackKnob.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/RoundLargeBlackKnob.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct RoundHugeBlackKnob : RoundKnob { | struct RoundHugeBlackKnob : RoundKnob { | ||||
RoundHugeBlackKnob() { | RoundHugeBlackKnob() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/RoundHugeBlackKnob.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/RoundHugeBlackKnob.svg"))); | |||||
} | } | ||||
}; | }; | ||||
@@ -75,37 +75,37 @@ struct Davies1900hKnob : SVGKnob { | |||||
struct Davies1900hWhiteKnob : Davies1900hKnob { | struct Davies1900hWhiteKnob : Davies1900hKnob { | ||||
Davies1900hWhiteKnob() { | Davies1900hWhiteKnob() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/Davies1900hWhite.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/Davies1900hWhite.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct Davies1900hBlackKnob : Davies1900hKnob { | struct Davies1900hBlackKnob : Davies1900hKnob { | ||||
Davies1900hBlackKnob() { | Davies1900hBlackKnob() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/Davies1900hBlack.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/Davies1900hBlack.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct Davies1900hRedKnob : Davies1900hKnob { | struct Davies1900hRedKnob : Davies1900hKnob { | ||||
Davies1900hRedKnob() { | Davies1900hRedKnob() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/Davies1900hRed.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/Davies1900hRed.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct Davies1900hLargeWhiteKnob : Davies1900hKnob { | struct Davies1900hLargeWhiteKnob : Davies1900hKnob { | ||||
Davies1900hLargeWhiteKnob() { | Davies1900hLargeWhiteKnob() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/Davies1900hLargeWhite.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/Davies1900hLargeWhite.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct Davies1900hLargeBlackKnob : Davies1900hKnob { | struct Davies1900hLargeBlackKnob : Davies1900hKnob { | ||||
Davies1900hLargeBlackKnob() { | Davies1900hLargeBlackKnob() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/Davies1900hLargeBlack.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/Davies1900hLargeBlack.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct Davies1900hLargeRedKnob : Davies1900hKnob { | struct Davies1900hLargeRedKnob : Davies1900hKnob { | ||||
Davies1900hLargeRedKnob() { | Davies1900hLargeRedKnob() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/Davies1900hLargeRed.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/Davies1900hLargeRed.svg"))); | |||||
} | } | ||||
}; | }; | ||||
@@ -119,163 +119,163 @@ struct Rogan : SVGKnob { | |||||
struct Rogan6PSWhite : Rogan { | struct Rogan6PSWhite : Rogan { | ||||
Rogan6PSWhite() { | Rogan6PSWhite() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/Rogan6PSWhite.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/Rogan6PSWhite.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct Rogan5PSGray : Rogan { | struct Rogan5PSGray : Rogan { | ||||
Rogan5PSGray() { | Rogan5PSGray() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/Rogan5PSGray.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/Rogan5PSGray.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct Rogan3PSBlue : Rogan { | struct Rogan3PSBlue : Rogan { | ||||
Rogan3PSBlue() { | Rogan3PSBlue() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/Rogan3PSBlue.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/Rogan3PSBlue.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct Rogan3PSRed : Rogan { | struct Rogan3PSRed : Rogan { | ||||
Rogan3PSRed() { | Rogan3PSRed() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/Rogan3PSRed.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/Rogan3PSRed.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct Rogan3PSGreen : Rogan { | struct Rogan3PSGreen : Rogan { | ||||
Rogan3PSGreen() { | Rogan3PSGreen() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/Rogan3PSGreen.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/Rogan3PSGreen.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct Rogan3PSWhite : Rogan { | struct Rogan3PSWhite : Rogan { | ||||
Rogan3PSWhite() { | Rogan3PSWhite() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/Rogan3PSWhite.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/Rogan3PSWhite.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct Rogan3PBlue : Rogan { | struct Rogan3PBlue : Rogan { | ||||
Rogan3PBlue() { | Rogan3PBlue() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/Rogan3PBlue.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/Rogan3PBlue.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct Rogan3PRed : Rogan { | struct Rogan3PRed : Rogan { | ||||
Rogan3PRed() { | Rogan3PRed() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/Rogan3PRed.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/Rogan3PRed.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct Rogan3PGreen : Rogan { | struct Rogan3PGreen : Rogan { | ||||
Rogan3PGreen() { | Rogan3PGreen() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/Rogan3PGreen.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/Rogan3PGreen.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct Rogan3PWhite : Rogan { | struct Rogan3PWhite : Rogan { | ||||
Rogan3PWhite() { | Rogan3PWhite() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/Rogan3PWhite.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/Rogan3PWhite.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct Rogan2SGray : Rogan { | struct Rogan2SGray : Rogan { | ||||
Rogan2SGray() { | Rogan2SGray() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/Rogan2SGray.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/Rogan2SGray.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct Rogan2PSBlue : Rogan { | struct Rogan2PSBlue : Rogan { | ||||
Rogan2PSBlue() { | Rogan2PSBlue() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/Rogan2PSBlue.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/Rogan2PSBlue.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct Rogan2PSRed : Rogan { | struct Rogan2PSRed : Rogan { | ||||
Rogan2PSRed() { | Rogan2PSRed() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/Rogan2PSRed.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/Rogan2PSRed.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct Rogan2PSGreen : Rogan { | struct Rogan2PSGreen : Rogan { | ||||
Rogan2PSGreen() { | Rogan2PSGreen() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/Rogan2PSGreen.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/Rogan2PSGreen.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct Rogan2PSWhite : Rogan { | struct Rogan2PSWhite : Rogan { | ||||
Rogan2PSWhite() { | Rogan2PSWhite() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/Rogan2PSWhite.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/Rogan2PSWhite.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct Rogan2PBlue : Rogan { | struct Rogan2PBlue : Rogan { | ||||
Rogan2PBlue() { | Rogan2PBlue() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/Rogan2PBlue.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/Rogan2PBlue.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct Rogan2PRed : Rogan { | struct Rogan2PRed : Rogan { | ||||
Rogan2PRed() { | Rogan2PRed() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/Rogan2PRed.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/Rogan2PRed.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct Rogan2PGreen : Rogan { | struct Rogan2PGreen : Rogan { | ||||
Rogan2PGreen() { | Rogan2PGreen() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/Rogan2PGreen.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/Rogan2PGreen.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct Rogan2PWhite : Rogan { | struct Rogan2PWhite : Rogan { | ||||
Rogan2PWhite() { | Rogan2PWhite() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/Rogan2PWhite.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/Rogan2PWhite.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct Rogan1PSBlue : Rogan { | struct Rogan1PSBlue : Rogan { | ||||
Rogan1PSBlue() { | Rogan1PSBlue() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/Rogan1PSBlue.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/Rogan1PSBlue.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct Rogan1PSRed : Rogan { | struct Rogan1PSRed : Rogan { | ||||
Rogan1PSRed() { | Rogan1PSRed() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/Rogan1PSRed.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/Rogan1PSRed.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct Rogan1PSGreen : Rogan { | struct Rogan1PSGreen : Rogan { | ||||
Rogan1PSGreen() { | Rogan1PSGreen() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/Rogan1PSGreen.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/Rogan1PSGreen.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct Rogan1PSWhite : Rogan { | struct Rogan1PSWhite : Rogan { | ||||
Rogan1PSWhite() { | Rogan1PSWhite() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/Rogan1PSWhite.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/Rogan1PSWhite.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct Rogan1PBlue : Rogan { | struct Rogan1PBlue : Rogan { | ||||
Rogan1PBlue() { | Rogan1PBlue() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/Rogan1PBlue.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/Rogan1PBlue.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct Rogan1PRed : Rogan { | struct Rogan1PRed : Rogan { | ||||
Rogan1PRed() { | Rogan1PRed() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/Rogan1PRed.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/Rogan1PRed.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct Rogan1PGreen : Rogan { | struct Rogan1PGreen : Rogan { | ||||
Rogan1PGreen() { | Rogan1PGreen() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/Rogan1PGreen.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/Rogan1PGreen.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct Rogan1PWhite : Rogan { | struct Rogan1PWhite : Rogan { | ||||
Rogan1PWhite() { | Rogan1PWhite() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/Rogan1PWhite.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/Rogan1PWhite.svg"))); | |||||
} | } | ||||
}; | }; | ||||
@@ -284,9 +284,9 @@ struct SynthTechAlco : SVGKnob { | |||||
SynthTechAlco() { | SynthTechAlco() { | ||||
minAngle = -0.82*M_PI; | minAngle = -0.82*M_PI; | ||||
maxAngle = 0.82*M_PI; | maxAngle = 0.82*M_PI; | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/SynthTechAlco.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/SynthTechAlco.svg"))); | |||||
SVGWidget *cap = new SVGWidget; | SVGWidget *cap = new SVGWidget; | ||||
cap->setSVG(SVG::load(asset::system("res/ComponentLibrary/SynthTechAlco_cap.svg"))); | |||||
cap->setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/SynthTechAlco_cap.svg"))); | |||||
addChild(cap); | addChild(cap); | ||||
} | } | ||||
}; | }; | ||||
@@ -295,7 +295,7 @@ struct Trimpot : SVGKnob { | |||||
Trimpot() { | Trimpot() { | ||||
minAngle = -0.75*M_PI; | minAngle = -0.75*M_PI; | ||||
maxAngle = 0.75*M_PI; | maxAngle = 0.75*M_PI; | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/Trimpot.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/Trimpot.svg"))); | |||||
} | } | ||||
}; | }; | ||||
@@ -303,7 +303,7 @@ struct BefacoBigKnob : SVGKnob { | |||||
BefacoBigKnob() { | BefacoBigKnob() { | ||||
minAngle = -0.75*M_PI; | minAngle = -0.75*M_PI; | ||||
maxAngle = 0.75*M_PI; | maxAngle = 0.75*M_PI; | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/BefacoBigKnob.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/BefacoBigKnob.svg"))); | |||||
} | } | ||||
}; | }; | ||||
@@ -319,7 +319,7 @@ struct BefacoTinyKnob : SVGKnob { | |||||
BefacoTinyKnob() { | BefacoTinyKnob() { | ||||
minAngle = -0.75*M_PI; | minAngle = -0.75*M_PI; | ||||
maxAngle = 0.75*M_PI; | maxAngle = 0.75*M_PI; | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/BefacoTinyKnob.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/BefacoTinyKnob.svg"))); | |||||
} | } | ||||
}; | }; | ||||
@@ -328,7 +328,7 @@ struct BefacoSlidePot : SVGSlider { | |||||
Vec margin = Vec(3.5, 3.5); | Vec margin = Vec(3.5, 3.5); | ||||
maxHandlePos = Vec(-1, -2).plus(margin); | maxHandlePos = Vec(-1, -2).plus(margin); | ||||
minHandlePos = Vec(-1, 87).plus(margin); | minHandlePos = Vec(-1, 87).plus(margin); | ||||
setSVGs(SVG::load(asset::system("res/ComponentLibrary/BefacoSlidePot.svg")), SVG::load(asset::system("res/ComponentLibrary/BefacoSlidePotHandle.svg"))); | |||||
setSVGs(SVG::load(context()->asset->system("res/ComponentLibrary/BefacoSlidePot.svg")), SVG::load(context()->asset->system("res/ComponentLibrary/BefacoSlidePotHandle.svg"))); | |||||
background->box.pos = margin; | background->box.pos = margin; | ||||
box.size = background->box.size.plus(margin.mult(2)); | box.size = background->box.size.plus(margin.mult(2)); | ||||
} | } | ||||
@@ -338,38 +338,38 @@ struct LEDSlider : SVGSlider { | |||||
LEDSlider() { | LEDSlider() { | ||||
maxHandlePos = mm2px(Vec(0.738, 0.738).plus(Vec(2, 0))); | maxHandlePos = mm2px(Vec(0.738, 0.738).plus(Vec(2, 0))); | ||||
minHandlePos = mm2px(Vec(0.738, 22.078).plus(Vec(2, 0))); | minHandlePos = mm2px(Vec(0.738, 22.078).plus(Vec(2, 0))); | ||||
setSVGs(SVG::load(asset::system("res/ComponentLibrary/LEDSlider.svg")), NULL); | |||||
setSVGs(SVG::load(context()->asset->system("res/ComponentLibrary/LEDSlider.svg")), NULL); | |||||
} | } | ||||
}; | }; | ||||
/** API is unstable for LEDSlider. Will add a LightWidget later. */ | /** API is unstable for LEDSlider. Will add a LightWidget later. */ | ||||
struct LEDSliderGreen : LEDSlider { | struct LEDSliderGreen : LEDSlider { | ||||
LEDSliderGreen() { | LEDSliderGreen() { | ||||
handle->setSVG(SVG::load(asset::system("res/ComponentLibrary/LEDSliderGreenHandle.svg"))); | |||||
handle->setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/LEDSliderGreenHandle.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct LEDSliderRed : LEDSlider { | struct LEDSliderRed : LEDSlider { | ||||
LEDSliderRed() { | LEDSliderRed() { | ||||
handle->setSVG(SVG::load(asset::system("res/ComponentLibrary/LEDSliderRedHandle.svg"))); | |||||
handle->setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/LEDSliderRedHandle.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct LEDSliderYellow : LEDSlider { | struct LEDSliderYellow : LEDSlider { | ||||
LEDSliderYellow() { | LEDSliderYellow() { | ||||
handle->setSVG(SVG::load(asset::system("res/ComponentLibrary/LEDSliderYellowHandle.svg"))); | |||||
handle->setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/LEDSliderYellowHandle.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct LEDSliderBlue : LEDSlider { | struct LEDSliderBlue : LEDSlider { | ||||
LEDSliderBlue() { | LEDSliderBlue() { | ||||
handle->setSVG(SVG::load(asset::system("res/ComponentLibrary/LEDSliderBlueHandle.svg"))); | |||||
handle->setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/LEDSliderBlueHandle.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct LEDSliderWhite : LEDSlider { | struct LEDSliderWhite : LEDSlider { | ||||
LEDSliderWhite() { | LEDSliderWhite() { | ||||
handle->setSVG(SVG::load(asset::system("res/ComponentLibrary/LEDSliderWhiteHandle.svg"))); | |||||
handle->setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/LEDSliderWhiteHandle.svg"))); | |||||
} | } | ||||
}; | }; | ||||
@@ -379,19 +379,19 @@ struct LEDSliderWhite : LEDSlider { | |||||
struct PJ301MPort : SVGPort { | struct PJ301MPort : SVGPort { | ||||
PJ301MPort() { | PJ301MPort() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/PJ301M.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/PJ301M.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct PJ3410Port : SVGPort { | struct PJ3410Port : SVGPort { | ||||
PJ3410Port() { | PJ3410Port() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/PJ3410.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/PJ3410.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct CL1362Port : SVGPort { | struct CL1362Port : SVGPort { | ||||
CL1362Port() { | CL1362Port() { | ||||
setSVG(SVG::load(asset::system("res/ComponentLibrary/CL1362.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/CL1362.svg"))); | |||||
} | } | ||||
}; | }; | ||||
@@ -514,83 +514,83 @@ struct PB61303Light : BASE { | |||||
struct NKK : SVGSwitch, ToggleSwitch { | struct NKK : SVGSwitch, ToggleSwitch { | ||||
NKK() { | NKK() { | ||||
addFrame(SVG::load(asset::system("res/ComponentLibrary/NKK_0.svg"))); | |||||
addFrame(SVG::load(asset::system("res/ComponentLibrary/NKK_1.svg"))); | |||||
addFrame(SVG::load(asset::system("res/ComponentLibrary/NKK_2.svg"))); | |||||
addFrame(SVG::load(context()->asset->system("res/ComponentLibrary/NKK_0.svg"))); | |||||
addFrame(SVG::load(context()->asset->system("res/ComponentLibrary/NKK_1.svg"))); | |||||
addFrame(SVG::load(context()->asset->system("res/ComponentLibrary/NKK_2.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct CKSS : SVGSwitch, ToggleSwitch { | struct CKSS : SVGSwitch, ToggleSwitch { | ||||
CKSS() { | CKSS() { | ||||
addFrame(SVG::load(asset::system("res/ComponentLibrary/CKSS_0.svg"))); | |||||
addFrame(SVG::load(asset::system("res/ComponentLibrary/CKSS_1.svg"))); | |||||
addFrame(SVG::load(context()->asset->system("res/ComponentLibrary/CKSS_0.svg"))); | |||||
addFrame(SVG::load(context()->asset->system("res/ComponentLibrary/CKSS_1.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct CKSSThree : SVGSwitch, ToggleSwitch { | struct CKSSThree : SVGSwitch, ToggleSwitch { | ||||
CKSSThree() { | CKSSThree() { | ||||
addFrame(SVG::load(asset::system("res/ComponentLibrary/CKSSThree_0.svg"))); | |||||
addFrame(SVG::load(asset::system("res/ComponentLibrary/CKSSThree_1.svg"))); | |||||
addFrame(SVG::load(asset::system("res/ComponentLibrary/CKSSThree_2.svg"))); | |||||
addFrame(SVG::load(context()->asset->system("res/ComponentLibrary/CKSSThree_0.svg"))); | |||||
addFrame(SVG::load(context()->asset->system("res/ComponentLibrary/CKSSThree_1.svg"))); | |||||
addFrame(SVG::load(context()->asset->system("res/ComponentLibrary/CKSSThree_2.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct CKD6 : SVGSwitch, MomentarySwitch { | struct CKD6 : SVGSwitch, MomentarySwitch { | ||||
CKD6() { | CKD6() { | ||||
addFrame(SVG::load(asset::system("res/ComponentLibrary/CKD6_0.svg"))); | |||||
addFrame(SVG::load(asset::system("res/ComponentLibrary/CKD6_1.svg"))); | |||||
addFrame(SVG::load(context()->asset->system("res/ComponentLibrary/CKD6_0.svg"))); | |||||
addFrame(SVG::load(context()->asset->system("res/ComponentLibrary/CKD6_1.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct TL1105 : SVGSwitch, MomentarySwitch { | struct TL1105 : SVGSwitch, MomentarySwitch { | ||||
TL1105() { | TL1105() { | ||||
addFrame(SVG::load(asset::system("res/ComponentLibrary/TL1105_0.svg"))); | |||||
addFrame(SVG::load(asset::system("res/ComponentLibrary/TL1105_1.svg"))); | |||||
addFrame(SVG::load(context()->asset->system("res/ComponentLibrary/TL1105_0.svg"))); | |||||
addFrame(SVG::load(context()->asset->system("res/ComponentLibrary/TL1105_1.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct LEDButton : SVGSwitch, MomentarySwitch { | struct LEDButton : SVGSwitch, MomentarySwitch { | ||||
LEDButton() { | LEDButton() { | ||||
addFrame(SVG::load(asset::system("res/ComponentLibrary/LEDButton.svg"))); | |||||
addFrame(SVG::load(context()->asset->system("res/ComponentLibrary/LEDButton.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct BefacoSwitch : SVGSwitch, ToggleSwitch { | struct BefacoSwitch : SVGSwitch, ToggleSwitch { | ||||
BefacoSwitch() { | BefacoSwitch() { | ||||
addFrame(SVG::load(asset::system("res/ComponentLibrary/BefacoSwitch_0.svg"))); | |||||
addFrame(SVG::load(asset::system("res/ComponentLibrary/BefacoSwitch_1.svg"))); | |||||
addFrame(SVG::load(asset::system("res/ComponentLibrary/BefacoSwitch_2.svg"))); | |||||
addFrame(SVG::load(context()->asset->system("res/ComponentLibrary/BefacoSwitch_0.svg"))); | |||||
addFrame(SVG::load(context()->asset->system("res/ComponentLibrary/BefacoSwitch_1.svg"))); | |||||
addFrame(SVG::load(context()->asset->system("res/ComponentLibrary/BefacoSwitch_2.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct BefacoPush : SVGSwitch, MomentarySwitch { | struct BefacoPush : SVGSwitch, MomentarySwitch { | ||||
BefacoPush() { | BefacoPush() { | ||||
addFrame(SVG::load(asset::system("res/ComponentLibrary/BefacoPush_0.svg"))); | |||||
addFrame(SVG::load(asset::system("res/ComponentLibrary/BefacoPush_1.svg"))); | |||||
addFrame(SVG::load(context()->asset->system("res/ComponentLibrary/BefacoPush_0.svg"))); | |||||
addFrame(SVG::load(context()->asset->system("res/ComponentLibrary/BefacoPush_1.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct LEDBezel : SVGSwitch, MomentarySwitch { | struct LEDBezel : SVGSwitch, MomentarySwitch { | ||||
LEDBezel() { | LEDBezel() { | ||||
addFrame(SVG::load(asset::system("res/ComponentLibrary/LEDBezel.svg"))); | |||||
addFrame(SVG::load(context()->asset->system("res/ComponentLibrary/LEDBezel.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct PB61303 : SVGSwitch, MomentarySwitch { | struct PB61303 : SVGSwitch, MomentarySwitch { | ||||
PB61303() { | PB61303() { | ||||
addFrame(SVG::load(asset::system("res/ComponentLibrary/PB61303.svg"))); | |||||
addFrame(SVG::load(context()->asset->system("res/ComponentLibrary/PB61303.svg"))); | |||||
} | } | ||||
}; | }; | ||||
struct PB61303Button : SVGButton { | struct PB61303Button : SVGButton { | ||||
PB61303Button() { | PB61303Button() { | ||||
setSVGs(SVG::load(asset::system("res/ComponentLibrary/PB61303.svg")), NULL); | |||||
setSVGs(SVG::load(context()->asset->system("res/ComponentLibrary/PB61303.svg")), NULL); | |||||
} | } | ||||
}; | }; | ||||
struct LEDBezelButton : SVGButton { | struct LEDBezelButton : SVGButton { | ||||
LEDBezelButton() { | LEDBezelButton() { | ||||
setSVGs(SVG::load(asset::system("res/ComponentLibrary/LEDBezel.svg")), NULL); | |||||
setSVGs(SVG::load(context()->asset->system("res/ComponentLibrary/LEDBezel.svg")), NULL); | |||||
} | } | ||||
}; | }; | ||||
@@ -600,14 +600,14 @@ struct LEDBezelButton : SVGButton { | |||||
struct ScrewSilver : SVGScrew { | struct ScrewSilver : SVGScrew { | ||||
ScrewSilver() { | ScrewSilver() { | ||||
sw->setSVG(SVG::load(asset::system("res/ComponentLibrary/ScrewSilver.svg"))); | |||||
sw->setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/ScrewSilver.svg"))); | |||||
box.size = sw->box.size; | box.size = sw->box.size; | ||||
} | } | ||||
}; | }; | ||||
struct ScrewBlack : SVGScrew { | struct ScrewBlack : SVGScrew { | ||||
ScrewBlack() { | ScrewBlack() { | ||||
sw->setSVG(SVG::load(asset::system("res/ComponentLibrary/ScrewBlack.svg"))); | |||||
sw->setSVG(SVG::load(context()->asset->system("res/ComponentLibrary/ScrewBlack.svg"))); | |||||
box.size = sw->box.size; | box.size = sw->box.size; | ||||
} | } | ||||
}; | }; | ||||
@@ -5,13 +5,15 @@ | |||||
namespace rack { | namespace rack { | ||||
struct Scene; | |||||
struct Engine; | |||||
namespace event { | namespace event { | ||||
struct Context; | struct Context; | ||||
} | } | ||||
struct Scene; | |||||
struct Engine; | |||||
struct PluginManager; | |||||
struct AssetManager; | |||||
struct Context { | struct Context { | ||||
bool devMode = false; | bool devMode = false; | ||||
@@ -19,6 +21,8 @@ struct Context { | |||||
event::Context *event = NULL; | event::Context *event = NULL; | ||||
Scene *scene = NULL; | Scene *scene = NULL; | ||||
Engine *engine = NULL; | Engine *engine = NULL; | ||||
PluginManager *plugin = NULL; | |||||
AssetManager *asset = NULL; | |||||
}; | }; | ||||
@@ -29,8 +29,6 @@ struct PluginManager { | |||||
Model *getModel(std::string pluginSlug, std::string modelSlug); | Model *getModel(std::string pluginSlug, std::string modelSlug); | ||||
}; | }; | ||||
extern PluginManager *gPluginManager; | |||||
} // namespace rack | } // namespace rack | ||||
@@ -7,7 +7,7 @@ | |||||
#include "system.hpp" | #include "system.hpp" | ||||
#include "random.hpp" | #include "random.hpp" | ||||
#include "network.hpp" | #include "network.hpp" | ||||
#include "asset.hpp" | |||||
#include "AssetManager.hpp" | |||||
#include "window.hpp" | #include "window.hpp" | ||||
#include "context.hpp" | #include "context.hpp" | ||||
#include "helpers.hpp" | #include "helpers.hpp" | ||||
@@ -69,9 +69,9 @@ DEPRECATED inline float randomf() {return random::uniform();} | |||||
// asset | // asset | ||||
//////////////////// | //////////////////// | ||||
DEPRECATED inline std::string assetGlobal(std::string filename) {return asset::system(filename);} | |||||
DEPRECATED inline std::string assetLocal(std::string filename) {return asset::user(filename);} | |||||
DEPRECATED inline std::string assetPlugin(Plugin *plugin, std::string filename) {return asset::plugin(plugin, filename);} | |||||
DEPRECATED inline std::string assetGlobal(std::string filename) {return context()->asset->system(filename);} | |||||
DEPRECATED inline std::string assetLocal(std::string filename) {return context()->asset->user(filename);} | |||||
DEPRECATED inline std::string assetPlugin(Plugin *plugin, std::string filename) {return context()->asset->plugin(plugin, filename);} | |||||
//////////////////// | //////////////////// | ||||
// color | // color | ||||
@@ -1,6 +1,7 @@ | |||||
#include "asset.hpp" | |||||
#include "AssetManager.hpp" | |||||
#include "system.hpp" | #include "system.hpp" | ||||
#include "context.hpp" | #include "context.hpp" | ||||
#include "plugin/Plugin.hpp" | |||||
#if ARCH_MAC | #if ARCH_MAC | ||||
#include <CoreFoundation/CoreFoundation.h> | #include <CoreFoundation/CoreFoundation.h> | ||||
@@ -21,14 +22,9 @@ | |||||
namespace rack { | namespace rack { | ||||
namespace asset { | |||||
std::string systemDir; | |||||
std::string userDir; | |||||
void init() { | |||||
AssetManager::AssetManager() { | |||||
// Get system dir | // Get system dir | ||||
if (systemDir.empty()) { | if (systemDir.empty()) { | ||||
if (context()->devMode) { | if (context()->devMode) { | ||||
@@ -99,21 +95,20 @@ void init() { | |||||
} | } | ||||
std::string system(std::string filename) { | |||||
std::string AssetManager::system(std::string filename) { | |||||
return systemDir + "/" + filename; | return systemDir + "/" + filename; | ||||
} | } | ||||
std::string user(std::string filename) { | |||||
std::string AssetManager::user(std::string filename) { | |||||
return userDir + "/" + filename; | return userDir + "/" + filename; | ||||
} | } | ||||
std::string plugin(Plugin *plugin, std::string filename) { | |||||
std::string AssetManager::plugin(Plugin *plugin, std::string filename) { | |||||
assert(plugin); | assert(plugin); | ||||
return plugin->path + "/" + filename; | return plugin->path + "/" + filename; | ||||
} | } | ||||
} // namespace asset | |||||
} // namespace rack | } // namespace rack |
@@ -240,7 +240,7 @@ void AudioInterface::step() { | |||||
struct AudioInterfaceWidget : ModuleWidget { | struct AudioInterfaceWidget : ModuleWidget { | ||||
AudioInterfaceWidget(AudioInterface *module) : ModuleWidget(module) { | AudioInterfaceWidget(AudioInterface *module) : ModuleWidget(module) { | ||||
setPanel(SVG::load(asset::system("res/Core/AudioInterface.svg"))); | |||||
setPanel(SVG::load(context()->asset->system("res/Core/AudioInterface.svg"))); | |||||
addChild(createWidget<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0))); | addChild(createWidget<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0))); | ||||
addChild(createWidget<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); | addChild(createWidget<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); | ||||
@@ -182,7 +182,7 @@ struct MidiCcWidget : Grid16MidiWidget { | |||||
struct MIDICCToCVInterfaceWidget : ModuleWidget { | struct MIDICCToCVInterfaceWidget : ModuleWidget { | ||||
MIDICCToCVInterfaceWidget(MIDICCToCVInterface *module) : ModuleWidget(module) { | MIDICCToCVInterfaceWidget(MIDICCToCVInterface *module) : ModuleWidget(module) { | ||||
setPanel(SVG::load(asset::system("res/Core/MIDICCToCVInterface.svg"))); | |||||
setPanel(SVG::load(context()->asset->system("res/Core/MIDICCToCVInterface.svg"))); | |||||
addChild(createWidget<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0))); | addChild(createWidget<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0))); | ||||
addChild(createWidget<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); | addChild(createWidget<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); | ||||
@@ -261,7 +261,7 @@ struct MIDIToCVInterface : Module { | |||||
struct MIDIToCVInterfaceWidget : ModuleWidget { | struct MIDIToCVInterfaceWidget : ModuleWidget { | ||||
MIDIToCVInterfaceWidget(MIDIToCVInterface *module) : ModuleWidget(module) { | MIDIToCVInterfaceWidget(MIDIToCVInterface *module) : ModuleWidget(module) { | ||||
setPanel(SVG::load(asset::system("res/Core/MIDIToCVInterface.svg"))); | |||||
setPanel(SVG::load(context()->asset->system("res/Core/MIDIToCVInterface.svg"))); | |||||
addChild(createWidget<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0))); | addChild(createWidget<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0))); | ||||
addChild(createWidget<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); | addChild(createWidget<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); | ||||
@@ -201,7 +201,7 @@ struct MidiTrigWidget : Grid16MidiWidget { | |||||
struct MIDITriggerToCVInterfaceWidget : ModuleWidget { | struct MIDITriggerToCVInterfaceWidget : ModuleWidget { | ||||
MIDITriggerToCVInterfaceWidget(MIDITriggerToCVInterface *module) : ModuleWidget(module) { | MIDITriggerToCVInterfaceWidget(MIDITriggerToCVInterface *module) : ModuleWidget(module) { | ||||
setPanel(SVG::load(asset::system("res/Core/MIDITriggerToCVInterface.svg"))); | |||||
setPanel(SVG::load(context()->asset->system("res/Core/MIDITriggerToCVInterface.svg"))); | |||||
addChild(createWidget<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0))); | addChild(createWidget<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0))); | ||||
addChild(createWidget<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); | addChild(createWidget<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); | ||||
@@ -8,7 +8,7 @@ struct NotesWidget : ModuleWidget { | |||||
TextField *textField; | TextField *textField; | ||||
NotesWidget(Module *module) : ModuleWidget(module) { | NotesWidget(Module *module) : ModuleWidget(module) { | ||||
setPanel(SVG::load(asset::system("res/Core/Notes.svg"))); | |||||
setPanel(SVG::load(context()->asset->system("res/Core/Notes.svg"))); | |||||
addChild(createWidget<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0))); | addChild(createWidget<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0))); | ||||
addChild(createWidget<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); | addChild(createWidget<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); | ||||
@@ -303,7 +303,7 @@ struct QuadMIDIToCVInterface : Module { | |||||
struct QuadMIDIToCVInterfaceWidget : ModuleWidget { | struct QuadMIDIToCVInterfaceWidget : ModuleWidget { | ||||
QuadMIDIToCVInterfaceWidget(QuadMIDIToCVInterface *module) : ModuleWidget(module) { | QuadMIDIToCVInterfaceWidget(QuadMIDIToCVInterface *module) : ModuleWidget(module) { | ||||
setPanel(SVG::load(asset::system("res/Core/QuadMIDIToCVInterface.svg"))); | |||||
setPanel(SVG::load(context()->asset->system("res/Core/QuadMIDIToCVInterface.svg"))); | |||||
addChild(createWidget<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0))); | addChild(createWidget<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0))); | ||||
addChild(createWidget<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); | addChild(createWidget<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); | ||||
@@ -1,5 +1,5 @@ | |||||
#include "app/LedDisplay.hpp" | #include "app/LedDisplay.hpp" | ||||
#include "asset.hpp" | |||||
#include "AssetManager.hpp" | |||||
#include "window.hpp" | #include "window.hpp" | ||||
#include "event.hpp" | #include "event.hpp" | ||||
#include "context.hpp" | #include "context.hpp" | ||||
@@ -34,7 +34,7 @@ void LedDisplaySeparator::draw(NVGcontext *vg) { | |||||
LedDisplayChoice::LedDisplayChoice() { | LedDisplayChoice::LedDisplayChoice() { | ||||
box.size = mm2px(Vec(0, 28.0 / 3)); | box.size = mm2px(Vec(0, 28.0 / 3)); | ||||
font = Font::load(asset::system("res/fonts/ShareTechMono-Regular.ttf")); | |||||
font = Font::load(context()->asset->system("res/fonts/ShareTechMono-Regular.ttf")); | |||||
color = nvgRGB(0xff, 0xd7, 0x14); | color = nvgRGB(0xff, 0xd7, 0x14); | ||||
textOffset = Vec(10, 18); | textOffset = Vec(10, 18); | ||||
} | } | ||||
@@ -64,7 +64,7 @@ void LedDisplayChoice::onButton(event::Button &e) { | |||||
LedDisplayTextField::LedDisplayTextField() { | LedDisplayTextField::LedDisplayTextField() { | ||||
font = Font::load(asset::system("res/fonts/ShareTechMono-Regular.ttf")); | |||||
font = Font::load(context()->asset->system("res/fonts/ShareTechMono-Regular.ttf")); | |||||
color = nvgRGB(0xff, 0xd7, 0x14); | color = nvgRGB(0xff, 0xd7, 0x14); | ||||
textOffset = Vec(5, 5); | textOffset = Vec(5, 5); | ||||
} | } | ||||
@@ -323,7 +323,7 @@ struct ModuleBrowser : OpaqueWidget { | |||||
addChild(moduleScroll); | addChild(moduleScroll); | ||||
// Collect authors | // Collect authors | ||||
for (Plugin *plugin : gPluginManager->plugins) { | |||||
for (Plugin *plugin : context()->plugin->plugins) { | |||||
for (Model *model : plugin->models) { | for (Model *model : plugin->models) { | ||||
// Insert author | // Insert author | ||||
if (!model->author.empty()) | if (!model->author.empty()) | ||||
@@ -428,7 +428,7 @@ struct ModuleBrowser : OpaqueWidget { | |||||
moduleList->addChild(item); | moduleList->addChild(item); | ||||
} | } | ||||
// Modules | // Modules | ||||
for (Plugin *plugin : gPluginManager->plugins) { | |||||
for (Plugin *plugin : context()->plugin->plugins) { | |||||
for (Model *model : plugin->models) { | for (Model *model : plugin->models) { | ||||
if (isModelFiltered(model) && isModelMatch(model, search)) { | if (isModelFiltered(model) && isModelMatch(model, search)) { | ||||
ModelItem *item = new ModelItem; | ModelItem *item = new ModelItem; | ||||
@@ -588,7 +588,7 @@ void moduleBrowserFromJson(json_t *rootJ) { | |||||
continue; | continue; | ||||
std::string pluginSlug = json_string_value(pluginJ); | std::string pluginSlug = json_string_value(pluginJ); | ||||
std::string modelSlug = json_string_value(modelJ); | std::string modelSlug = json_string_value(modelJ); | ||||
Model *model = gPluginManager->getModel(pluginSlug, modelSlug); | |||||
Model *model = context()->plugin->getModel(pluginSlug, modelSlug); | |||||
if (!model) | if (!model) | ||||
continue; | continue; | ||||
sFavoriteModels.insert(model); | sFavoriteModels.insert(model); | ||||
@@ -2,7 +2,7 @@ | |||||
#include "engine/Engine.hpp" | #include "engine/Engine.hpp" | ||||
#include "logger.hpp" | #include "logger.hpp" | ||||
#include "system.hpp" | #include "system.hpp" | ||||
#include "asset.hpp" | |||||
#include "AssetManager.hpp" | |||||
#include "app/Scene.hpp" | #include "app/Scene.hpp" | ||||
#include "helpers.hpp" | #include "helpers.hpp" | ||||
#include "context.hpp" | #include "context.hpp" | ||||
@@ -185,7 +185,7 @@ void ModuleWidget::save(std::string filename) { | |||||
} | } | ||||
void ModuleWidget::loadDialog() { | void ModuleWidget::loadDialog() { | ||||
std::string dir = asset::user("presets"); | |||||
std::string dir = context()->asset->user("presets"); | |||||
system::createDirectory(dir); | system::createDirectory(dir); | ||||
osdialog_filters *filters = osdialog_filters_parse(PRESET_FILTERS.c_str()); | osdialog_filters *filters = osdialog_filters_parse(PRESET_FILTERS.c_str()); | ||||
@@ -198,7 +198,7 @@ void ModuleWidget::loadDialog() { | |||||
} | } | ||||
void ModuleWidget::saveDialog() { | void ModuleWidget::saveDialog() { | ||||
std::string dir = asset::user("presets"); | |||||
std::string dir = context()->asset->user("presets"); | |||||
system::createDirectory(dir); | system::createDirectory(dir); | ||||
osdialog_filters *filters = osdialog_filters_parse(PRESET_FILTERS.c_str()); | osdialog_filters *filters = osdialog_filters_parse(PRESET_FILTERS.c_str()); | ||||
@@ -8,6 +8,7 @@ | |||||
#include "ui/PasswordField.hpp" | #include "ui/PasswordField.hpp" | ||||
#include "ui/Label.hpp" | #include "ui/Label.hpp" | ||||
#include "plugin/PluginManager.hpp" | #include "plugin/PluginManager.hpp" | ||||
#include "context.hpp" | |||||
#include "window.hpp" | #include "window.hpp" | ||||
#include "helpers.hpp" | #include "helpers.hpp" | ||||
#include "osdialog.h" | #include "osdialog.h" | ||||
@@ -31,7 +32,7 @@ struct LogInButton : Button { | |||||
TextField *passwordField; | TextField *passwordField; | ||||
void onAction(event::Action &e) override { | void onAction(event::Action &e) override { | ||||
std::thread t([&]() { | std::thread t([&]() { | ||||
gPluginManager->logIn(emailField->text, passwordField->text); | |||||
context()->plugin->logIn(emailField->text, passwordField->text); | |||||
}); | }); | ||||
t.detach(); | t.detach(); | ||||
passwordField->text = ""; | passwordField->text = ""; | ||||
@@ -41,7 +42,7 @@ struct LogInButton : Button { | |||||
struct StatusLabel : Label { | struct StatusLabel : Label { | ||||
void step() override { | void step() override { | ||||
text = gPluginManager->loginStatus; | |||||
text = context()->plugin->loginStatus; | |||||
} | } | ||||
}; | }; | ||||
@@ -67,7 +68,7 @@ struct SyncButton : Button { | |||||
// Check for plugin update on first step() | // Check for plugin update on first step() | ||||
if (!checked) { | if (!checked) { | ||||
std::thread t([this]() { | std::thread t([this]() { | ||||
if (gPluginManager->sync(true)) | |||||
if (context()->plugin->sync(true)) | |||||
available = true; | available = true; | ||||
}); | }); | ||||
t.detach(); | t.detach(); | ||||
@@ -96,7 +97,7 @@ struct SyncButton : Button { | |||||
void onAction(event::Action &e) override { | void onAction(event::Action &e) override { | ||||
available = false; | available = false; | ||||
std::thread t([this]() { | std::thread t([this]() { | ||||
if (gPluginManager->sync(false)) | |||||
if (context()->plugin->sync(false)) | |||||
completed = true; | completed = true; | ||||
}); | }); | ||||
t.detach(); | t.detach(); | ||||
@@ -106,14 +107,14 @@ struct SyncButton : Button { | |||||
struct LogOutButton : Button { | struct LogOutButton : Button { | ||||
void onAction(event::Action &e) override { | void onAction(event::Action &e) override { | ||||
gPluginManager->logOut(); | |||||
context()->plugin->logOut(); | |||||
} | } | ||||
}; | }; | ||||
struct DownloadQuantity : Quantity { | struct DownloadQuantity : Quantity { | ||||
float getValue() override { | float getValue() override { | ||||
return gPluginManager->downloadProgress; | |||||
return context()->plugin->downloadProgress; | |||||
} | } | ||||
float getDisplayValue() override { | float getDisplayValue() override { | ||||
@@ -123,7 +124,7 @@ struct DownloadQuantity : Quantity { | |||||
int getDisplayPrecision() override {return 0;} | int getDisplayPrecision() override {return 0;} | ||||
std::string getLabel() override { | std::string getLabel() override { | ||||
return "Downloading " + gPluginManager->downloadName; | |||||
return "Downloading " + context()->plugin->downloadName; | |||||
} | } | ||||
std::string getUnit() override {return "%";} | std::string getUnit() override {return "%";} | ||||
@@ -139,7 +140,7 @@ struct DownloadProgressBar : ProgressBar { | |||||
struct CancelButton : Button { | struct CancelButton : Button { | ||||
void onAction(event::Action &e) override { | void onAction(event::Action &e) override { | ||||
gPluginManager->cancelDownload(); | |||||
context()->plugin->cancelDownload(); | |||||
} | } | ||||
}; | }; | ||||
@@ -226,9 +227,9 @@ void PluginManagerWidget::step() { | |||||
manageWidget->visible = false; | manageWidget->visible = false; | ||||
downloadWidget->visible = false; | downloadWidget->visible = false; | ||||
if (gPluginManager->isDownloading) | |||||
if (context()->plugin->isDownloading) | |||||
downloadWidget->visible = true; | downloadWidget->visible = true; | ||||
else if (gPluginManager->isLoggedIn()) | |||||
else if (context()->plugin->isLoggedIn()) | |||||
manageWidget->visible = true; | manageWidget->visible = true; | ||||
else | else | ||||
loginWidget->visible = true; | loginWidget->visible = true; | ||||
@@ -6,7 +6,7 @@ | |||||
#include "app/ModuleBrowser.hpp" | #include "app/ModuleBrowser.hpp" | ||||
#include "osdialog.h" | #include "osdialog.h" | ||||
#include "settings.hpp" | #include "settings.hpp" | ||||
#include "asset.hpp" | |||||
#include "AssetManager.hpp" | |||||
#include "system.hpp" | #include "system.hpp" | ||||
#include "logger.hpp" | #include "logger.hpp" | ||||
#include "plugin/PluginManager.hpp" | #include "plugin/PluginManager.hpp" | ||||
@@ -67,7 +67,7 @@ void RackWidget::reset() { | |||||
if (osdialog_message(OSDIALOG_INFO, OSDIALOG_OK_CANCEL, "Clear patch and start over?")) { | if (osdialog_message(OSDIALOG_INFO, OSDIALOG_OK_CANCEL, "Clear patch and start over?")) { | ||||
clear(); | clear(); | ||||
// Fails silently if file does not exist | // Fails silently if file does not exist | ||||
load(asset::user("template.vcv")); | |||||
load(context()->asset->user("template.vcv")); | |||||
lastPath = ""; | lastPath = ""; | ||||
} | } | ||||
} | } | ||||
@@ -75,7 +75,7 @@ void RackWidget::reset() { | |||||
void RackWidget::loadDialog() { | void RackWidget::loadDialog() { | ||||
std::string dir; | std::string dir; | ||||
if (lastPath.empty()) { | if (lastPath.empty()) { | ||||
dir = asset::user("patches"); | |||||
dir = context()->asset->user("patches"); | |||||
system::createDirectory(dir); | system::createDirectory(dir); | ||||
} | } | ||||
else { | else { | ||||
@@ -104,7 +104,7 @@ void RackWidget::saveAsDialog() { | |||||
std::string dir; | std::string dir; | ||||
std::string filename; | std::string filename; | ||||
if (lastPath.empty()) { | if (lastPath.empty()) { | ||||
dir = asset::user("patches"); | |||||
dir = context()->asset->user("patches"); | |||||
system::createDirectory(dir); | system::createDirectory(dir); | ||||
} | } | ||||
else { | else { | ||||
@@ -379,7 +379,7 @@ ModuleWidget *RackWidget::moduleFromJson(json_t *moduleJ) { | |||||
std::string modelSlug = json_string_value(modelSlugJ); | std::string modelSlug = json_string_value(modelSlugJ); | ||||
// Get Model | // Get Model | ||||
Model *model = gPluginManager->getModel(pluginSlug, modelSlug); | |||||
Model *model = context()->plugin->getModel(pluginSlug, modelSlug); | |||||
if (!model) | if (!model) | ||||
return NULL; | return NULL; | ||||
@@ -494,8 +494,8 @@ void RackWidget::step() { | |||||
// Autosave every 15 seconds | // Autosave every 15 seconds | ||||
if (gGuiFrame % (60 * 15) == 0) { | if (gGuiFrame % (60 * 15) == 0) { | ||||
save(asset::user("autosave.vcv")); | |||||
settings::save(asset::user("settings.json")); | |||||
save(context()->asset->user("autosave.vcv")); | |||||
settings::save(context()->asset->user("settings.json")); | |||||
} | } | ||||
Widget::step(); | Widget::step(); | ||||
@@ -1,7 +1,7 @@ | |||||
#include "app/Toolbar.hpp" | #include "app/Toolbar.hpp" | ||||
#include "window.hpp" | #include "window.hpp" | ||||
#include "engine/Engine.hpp" | #include "engine/Engine.hpp" | ||||
#include "asset.hpp" | |||||
#include "AssetManager.hpp" | |||||
#include "ui/Tooltip.hpp" | #include "ui/Tooltip.hpp" | ||||
#include "ui/IconButton.hpp" | #include "ui/IconButton.hpp" | ||||
#include "ui/SequentialLayout.hpp" | #include "ui/SequentialLayout.hpp" | ||||
@@ -39,7 +39,7 @@ struct TooltipIconButton : IconButton { | |||||
struct NewButton : TooltipIconButton { | struct NewButton : TooltipIconButton { | ||||
NewButton() { | NewButton() { | ||||
setSVG(SVG::load(asset::system("res/icons/noun_146097_cc.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/icons/noun_146097_cc.svg"))); | |||||
} | } | ||||
std::string getTooltipText() override {return "New patch (" WINDOW_MOD_KEY_NAME "+N)";} | std::string getTooltipText() override {return "New patch (" WINDOW_MOD_KEY_NAME "+N)";} | ||||
void onAction(event::Action &e) override { | void onAction(event::Action &e) override { | ||||
@@ -49,7 +49,7 @@ struct NewButton : TooltipIconButton { | |||||
struct OpenButton : TooltipIconButton { | struct OpenButton : TooltipIconButton { | ||||
OpenButton() { | OpenButton() { | ||||
setSVG(SVG::load(asset::system("res/icons/noun_31859_cc.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/icons/noun_31859_cc.svg"))); | |||||
} | } | ||||
std::string getTooltipText() override {return "Open patch (" WINDOW_MOD_KEY_NAME "+O)";} | std::string getTooltipText() override {return "Open patch (" WINDOW_MOD_KEY_NAME "+O)";} | ||||
void onAction(event::Action &e) override { | void onAction(event::Action &e) override { | ||||
@@ -59,7 +59,7 @@ struct OpenButton : TooltipIconButton { | |||||
struct SaveButton : TooltipIconButton { | struct SaveButton : TooltipIconButton { | ||||
SaveButton() { | SaveButton() { | ||||
setSVG(SVG::load(asset::system("res/icons/noun_1343816_cc.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/icons/noun_1343816_cc.svg"))); | |||||
} | } | ||||
std::string getTooltipText() override {return "Save patch (" WINDOW_MOD_KEY_NAME "+S)";} | std::string getTooltipText() override {return "Save patch (" WINDOW_MOD_KEY_NAME "+S)";} | ||||
void onAction(event::Action &e) override { | void onAction(event::Action &e) override { | ||||
@@ -69,7 +69,7 @@ struct SaveButton : TooltipIconButton { | |||||
struct SaveAsButton : TooltipIconButton { | struct SaveAsButton : TooltipIconButton { | ||||
SaveAsButton() { | SaveAsButton() { | ||||
setSVG(SVG::load(asset::system("res/icons/noun_1343811_cc.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/icons/noun_1343811_cc.svg"))); | |||||
} | } | ||||
std::string getTooltipText() override {return "Save patch as (" WINDOW_MOD_KEY_NAME "+Shift+S)";} | std::string getTooltipText() override {return "Save patch as (" WINDOW_MOD_KEY_NAME "+Shift+S)";} | ||||
void onAction(event::Action &e) override { | void onAction(event::Action &e) override { | ||||
@@ -79,7 +79,7 @@ struct SaveAsButton : TooltipIconButton { | |||||
struct RevertButton : TooltipIconButton { | struct RevertButton : TooltipIconButton { | ||||
RevertButton() { | RevertButton() { | ||||
setSVG(SVG::load(asset::system("res/icons/noun_1084369_cc.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/icons/noun_1084369_cc.svg"))); | |||||
} | } | ||||
std::string getTooltipText() override {return "Revert patch";} | std::string getTooltipText() override {return "Revert patch";} | ||||
void onAction(event::Action &e) override { | void onAction(event::Action &e) override { | ||||
@@ -89,7 +89,7 @@ struct RevertButton : TooltipIconButton { | |||||
struct DisconnectCablesButton : TooltipIconButton { | struct DisconnectCablesButton : TooltipIconButton { | ||||
DisconnectCablesButton() { | DisconnectCablesButton() { | ||||
setSVG(SVG::load(asset::system("res/icons/noun_1745061_cc.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/icons/noun_1745061_cc.svg"))); | |||||
} | } | ||||
std::string getTooltipText() override {return "Disconnect cables";} | std::string getTooltipText() override {return "Disconnect cables";} | ||||
void onAction(event::Action &e) override { | void onAction(event::Action &e) override { | ||||
@@ -99,7 +99,7 @@ struct DisconnectCablesButton : TooltipIconButton { | |||||
struct PowerMeterButton : TooltipIconButton { | struct PowerMeterButton : TooltipIconButton { | ||||
PowerMeterButton() { | PowerMeterButton() { | ||||
setSVG(SVG::load(asset::system("res/icons/noun_305536_cc.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/icons/noun_305536_cc.svg"))); | |||||
} | } | ||||
std::string getTooltipText() override {return "Toggle power meter (see manual for explanation)";} | std::string getTooltipText() override {return "Toggle power meter (see manual for explanation)";} | ||||
void onAction(event::Action &e) override { | void onAction(event::Action &e) override { | ||||
@@ -123,7 +123,7 @@ struct SampleRateItem : MenuItem { | |||||
struct SampleRateButton : TooltipIconButton { | struct SampleRateButton : TooltipIconButton { | ||||
SampleRateButton() { | SampleRateButton() { | ||||
setSVG(SVG::load(asset::system("res/icons/noun_1240789_cc.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/icons/noun_1240789_cc.svg"))); | |||||
} | } | ||||
std::string getTooltipText() override {return "Engine sample rate";} | std::string getTooltipText() override {return "Engine sample rate";} | ||||
void onAction(event::Action &e) override { | void onAction(event::Action &e) override { | ||||
@@ -150,7 +150,7 @@ struct SampleRateButton : TooltipIconButton { | |||||
struct RackLockButton : TooltipIconButton { | struct RackLockButton : TooltipIconButton { | ||||
RackLockButton() { | RackLockButton() { | ||||
setSVG(SVG::load(asset::system("res/icons/noun_468341_cc.svg"))); | |||||
setSVG(SVG::load(context()->asset->system("res/icons/noun_468341_cc.svg"))); | |||||
} | } | ||||
std::string getTooltipText() override {return "Lock modules";} | std::string getTooltipText() override {return "Lock modules";} | ||||
void onAction(event::Action &e) override { | void onAction(event::Action &e) override { | ||||
@@ -238,7 +238,7 @@ Toolbar::Toolbar() { | |||||
layout->addChild(zoomSlider); | layout->addChild(zoomSlider); | ||||
// Kind of hacky, but display the PluginManagerWidget only if the user directory is not the development directory | // Kind of hacky, but display the PluginManagerWidget only if the user directory is not the development directory | ||||
if (asset::user("") != "./") { | |||||
if (context()->asset->user("") != "./") { | |||||
Widget *pluginManager = new PluginManagerWidget; | Widget *pluginManager = new PluginManagerWidget; | ||||
layout->addChild(pluginManager); | layout->addChild(pluginManager); | ||||
} | } | ||||
@@ -1,5 +1,5 @@ | |||||
#include "logger.hpp" | #include "logger.hpp" | ||||
#include "asset.hpp" | |||||
#include "AssetManager.hpp" | |||||
#include "context.hpp" | #include "context.hpp" | ||||
#include <chrono> | #include <chrono> | ||||
@@ -18,7 +18,7 @@ void init() { | |||||
outputFile = stderr; | outputFile = stderr; | ||||
} | } | ||||
else { | else { | ||||
std::string logFilename = asset::user("log.txt"); | |||||
std::string logFilename = context()->asset->user("log.txt"); | |||||
outputFile = fopen(logFilename.c_str(), "w"); | outputFile = fopen(logFilename.c_str(), "w"); | ||||
} | } | ||||
} | } | ||||
@@ -1,7 +1,7 @@ | |||||
#include "common.hpp" | #include "common.hpp" | ||||
#include "random.hpp" | #include "random.hpp" | ||||
#include "logger.hpp" | #include "logger.hpp" | ||||
#include "asset.hpp" | |||||
#include "AssetManager.hpp" | |||||
#include "rtmidi.hpp" | #include "rtmidi.hpp" | ||||
#include "keyboard.hpp" | #include "keyboard.hpp" | ||||
#include "gamepad.hpp" | #include "gamepad.hpp" | ||||
@@ -46,10 +46,10 @@ int main(int argc, char *argv[]) { | |||||
context()->devMode = true; | context()->devMode = true; | ||||
} break; | } break; | ||||
case 's': { | case 's': { | ||||
asset::systemDir = optarg; | |||||
context()->asset->systemDir = optarg; | |||||
} break; | } break; | ||||
case 'u': { | case 'u': { | ||||
asset::userDir = optarg; | |||||
context()->asset->userDir = optarg; | |||||
} break; | } break; | ||||
default: break; | default: break; | ||||
} | } | ||||
@@ -60,19 +60,19 @@ int main(int argc, char *argv[]) { | |||||
// Initialize environment | // Initialize environment | ||||
random::init(); | random::init(); | ||||
asset::init(); | |||||
context()->asset = new AssetManager; | |||||
logger::init(); | logger::init(); | ||||
// Log environment | // Log environment | ||||
INFO("%s %s", APP_NAME.c_str(), APP_VERSION.c_str()); | INFO("%s %s", APP_NAME.c_str(), APP_VERSION.c_str()); | ||||
if (context()->devMode) | if (context()->devMode) | ||||
INFO("Development mode"); | INFO("Development mode"); | ||||
INFO("System directory: %s", asset::system("").c_str()); | |||||
INFO("User directory: %s", asset::user("").c_str()); | |||||
INFO("System directory: %s", context()->asset->system("").c_str()); | |||||
INFO("User directory: %s", context()->asset->user("").c_str()); | |||||
// Initialize app | // Initialize app | ||||
tagsInit(); | tagsInit(); | ||||
gPluginManager = new PluginManager; | |||||
context()->plugin = new PluginManager; | |||||
context()->engine = new Engine; | context()->engine = new Engine; | ||||
rtmidiInit(); | rtmidiInit(); | ||||
bridgeInit(); | bridgeInit(); | ||||
@@ -82,13 +82,13 @@ int main(int argc, char *argv[]) { | |||||
context()->scene = new Scene; | context()->scene = new Scene; | ||||
context()->event->rootWidget = context()->scene; | context()->event->rootWidget = context()->scene; | ||||
windowInit(); | windowInit(); | ||||
settings::load(asset::user("settings.json")); | |||||
settings::load(context()->asset->user("settings.json")); | |||||
if (patchFile.empty()) { | if (patchFile.empty()) { | ||||
// To prevent launch crashes, if Rack crashes between now and 15 seconds from now, the "skipAutosaveOnLaunch" property will remain in settings.json, so that in the next launch, the broken autosave will not be loaded. | // To prevent launch crashes, if Rack crashes between now and 15 seconds from now, the "skipAutosaveOnLaunch" property will remain in settings.json, so that in the next launch, the broken autosave will not be loaded. | ||||
bool oldSkipAutosaveOnLaunch = settings::gSkipAutosaveOnLaunch; | bool oldSkipAutosaveOnLaunch = settings::gSkipAutosaveOnLaunch; | ||||
settings::gSkipAutosaveOnLaunch = true; | settings::gSkipAutosaveOnLaunch = true; | ||||
settings::save(asset::user("settings.json")); | |||||
settings::save(context()->asset->user("settings.json")); | |||||
settings::gSkipAutosaveOnLaunch = false; | settings::gSkipAutosaveOnLaunch = false; | ||||
if (oldSkipAutosaveOnLaunch && osdialog_message(OSDIALOG_INFO, OSDIALOG_YES_NO, "Rack has recovered from a crash, possibly caused by a faulty module in your patch. Clear your patch and start over?")) { | if (oldSkipAutosaveOnLaunch && osdialog_message(OSDIALOG_INFO, OSDIALOG_YES_NO, "Rack has recovered from a crash, possibly caused by a faulty module in your patch. Clear your patch and start over?")) { | ||||
context()->scene->rackWidget->lastPath = ""; | context()->scene->rackWidget->lastPath = ""; | ||||
@@ -96,7 +96,7 @@ int main(int argc, char *argv[]) { | |||||
else { | else { | ||||
// Load autosave | // Load autosave | ||||
std::string oldLastPath = context()->scene->rackWidget->lastPath; | std::string oldLastPath = context()->scene->rackWidget->lastPath; | ||||
context()->scene->rackWidget->load(asset::user("autosave.vcv")); | |||||
context()->scene->rackWidget->load(context()->asset->user("autosave.vcv")); | |||||
context()->scene->rackWidget->lastPath = oldLastPath; | context()->scene->rackWidget->lastPath = oldLastPath; | ||||
} | } | ||||
} | } | ||||
@@ -111,8 +111,8 @@ int main(int argc, char *argv[]) { | |||||
context()->engine->stop(); | context()->engine->stop(); | ||||
// Destroy namespaces | // Destroy namespaces | ||||
context()->scene->rackWidget->save(asset::user("autosave.vcv")); | |||||
settings::save(asset::user("settings.json")); | |||||
context()->scene->rackWidget->save(context()->asset->user("autosave.vcv")); | |||||
settings::save(context()->asset->user("settings.json")); | |||||
delete context()->scene; | delete context()->scene; | ||||
context()->scene = NULL; | context()->scene = NULL; | ||||
delete context()->event; | delete context()->event; | ||||
@@ -122,8 +122,10 @@ int main(int argc, char *argv[]) { | |||||
delete context()->engine; | delete context()->engine; | ||||
context()->engine = NULL; | context()->engine = NULL; | ||||
midiDestroy(); | midiDestroy(); | ||||
delete gPluginManager; | |||||
gPluginManager = NULL; | |||||
delete context()->plugin; | |||||
context()->plugin = NULL; | |||||
delete context()->asset; | |||||
context()->asset = NULL; | |||||
logger::destroy(); | logger::destroy(); | ||||
return 0; | return 0; | ||||
@@ -2,7 +2,7 @@ | |||||
#include "system.hpp" | #include "system.hpp" | ||||
#include "logger.hpp" | #include "logger.hpp" | ||||
#include "network.hpp" | #include "network.hpp" | ||||
#include "asset.hpp" | |||||
#include "AssetManager.hpp" | |||||
#include "string.hpp" | #include "string.hpp" | ||||
#include "context.hpp" | #include "context.hpp" | ||||
#include "app/common.hpp" | #include "app/common.hpp" | ||||
@@ -178,7 +178,7 @@ static bool PluginManager_syncPlugin(PluginManager *pluginManager, std::string s | |||||
INFO("Downloading plugin %s %s %s", slug.c_str(), latestVersion.c_str(), arch.c_str()); | INFO("Downloading plugin %s %s %s", slug.c_str(), latestVersion.c_str(), arch.c_str()); | ||||
// Download zip | // Download zip | ||||
std::string pluginDest = asset::user("plugins/" + slug + ".zip"); | |||||
std::string pluginDest = context()->asset->user("plugins/" + slug + ".zip"); | |||||
if (!network::requestDownload(downloadUrl, pluginDest, &pluginManager->downloadProgress)) { | if (!network::requestDownload(downloadUrl, pluginDest, &pluginManager->downloadProgress)) { | ||||
WARN("Plugin %s download was unsuccessful", slug.c_str()); | WARN("Plugin %s download was unsuccessful", slug.c_str()); | ||||
return false; | return false; | ||||
@@ -308,14 +308,14 @@ PluginManager::PluginManager() { | |||||
plugins.push_back(corePlugin); | plugins.push_back(corePlugin); | ||||
// Get user plugins directory | // Get user plugins directory | ||||
std::string userPlugins = asset::user("plugins"); | |||||
std::string userPlugins = context()->asset->user("plugins"); | |||||
mkdir(userPlugins.c_str(), 0755); | mkdir(userPlugins.c_str(), 0755); | ||||
if (!context()->devMode) { | if (!context()->devMode) { | ||||
// Copy Fundamental package to plugins directory if folder does not exist | // Copy Fundamental package to plugins directory if folder does not exist | ||||
std::string fundamentalSrc = asset::system("Fundamental.zip"); | |||||
std::string fundamentalDest = asset::user("plugins/Fundamental.zip"); | |||||
std::string fundamentalDir = asset::user("plugins/Fundamental"); | |||||
std::string fundamentalSrc = context()->asset->system("Fundamental.zip"); | |||||
std::string fundamentalDest = context()->asset->user("plugins/Fundamental.zip"); | |||||
std::string fundamentalDir = context()->asset->user("plugins/Fundamental"); | |||||
if (system::isFile(fundamentalSrc) && !system::isFile(fundamentalDest) && !system::isDirectory(fundamentalDir)) { | if (system::isFile(fundamentalSrc) && !system::isFile(fundamentalDest) && !system::isDirectory(fundamentalDir)) { | ||||
system::copyFile(fundamentalSrc, fundamentalDest); | system::copyFile(fundamentalSrc, fundamentalDest); | ||||
} | } | ||||
@@ -482,7 +482,4 @@ Model *PluginManager::getModel(std::string pluginSlug, std::string modelSlug) { | |||||
} | } | ||||
PluginManager *gPluginManager = NULL; | |||||
} // namespace rack | } // namespace rack |
@@ -21,7 +21,7 @@ static json_t *settingsToJson() { | |||||
json_t *rootJ = json_object(); | json_t *rootJ = json_object(); | ||||
// token | // token | ||||
json_t *tokenJ = json_string(gPluginManager->token.c_str()); | |||||
json_t *tokenJ = json_string(context()->plugin->token.c_str()); | |||||
json_object_set_new(rootJ, "token", tokenJ); | json_object_set_new(rootJ, "token", tokenJ); | ||||
if (!windowIsMaximized()) { | if (!windowIsMaximized()) { | ||||
@@ -84,7 +84,7 @@ static void settingsFromJson(json_t *rootJ) { | |||||
// token | // token | ||||
json_t *tokenJ = json_object_get(rootJ, "token"); | json_t *tokenJ = json_object_get(rootJ, "token"); | ||||
if (tokenJ) | if (tokenJ) | ||||
gPluginManager->token = json_string_value(tokenJ); | |||||
context()->plugin->token = json_string_value(tokenJ); | |||||
// windowSize | // windowSize | ||||
json_t *windowSizeJ = json_object_get(rootJ, "windowSize"); | json_t *windowSizeJ = json_object_get(rootJ, "windowSize"); | ||||
@@ -1,6 +1,6 @@ | |||||
#include "window.hpp" | #include "window.hpp" | ||||
#include "logger.hpp" | #include "logger.hpp" | ||||
#include "asset.hpp" | |||||
#include "AssetManager.hpp" | |||||
#include "app/Scene.hpp" | #include "app/Scene.hpp" | ||||
#include "keyboard.hpp" | #include "keyboard.hpp" | ||||
#include "gamepad.hpp" | #include "gamepad.hpp" | ||||
@@ -257,7 +257,7 @@ void windowInit() { | |||||
assert(gFramebufferVg); | assert(gFramebufferVg); | ||||
// Set up Blendish | // Set up Blendish | ||||
gGuiFont = Font::load(asset::system("res/fonts/DejaVuSans.ttf")); | |||||
gGuiFont = Font::load(context()->asset->system("res/fonts/DejaVuSans.ttf")); | |||||
bndSetFont(gGuiFont->handle); | bndSetFont(gGuiFont->handle); | ||||
windowSetTheme(nvgRGB(0x33, 0x33, 0x33), nvgRGB(0xf0, 0xf0, 0xf0)); | windowSetTheme(nvgRGB(0x33, 0x33, 0x33), nvgRGB(0xf0, 0xf0, 0xf0)); | ||||