Compare commits

..

No commits in common. "master" and "presets" have entirely different histories.

10 changed files with 15235 additions and 17025 deletions

View File

@ -30,38 +30,4 @@
#define DISTRHO_PLUGIN_WANT_PROGRAMS 1
#define DISTRHO_PLUGIN_HAS_UI 1
enum Parameters {
pLFORate,
pLFODelay,
pVCORange,
pLFODepth,
pPWMDepth,
pSqr,
pSaw,
pSubLevel,
pNoiseLevel,
pHPF,
pCutoff,
pRes,
pEnv,
pLfo,
pKyb,
pVCALevel,
pAtk,
pDcy,
pStn,
pRls,
pChorus,
parameterCount,
btn16, btn8, btn4, btnPls, btnSaw, btnCh0, btnCh1, btnCh2
};
#endif

View File

@ -15,8 +15,6 @@ FILES_DSP = \
FILES_UI = \
orangebutton.cpp \
panel.cpp \
slider.cpp \
peacock.cpp \
ui.cpp

View File

@ -27,6 +27,32 @@ START_NAMESPACE_DISTRHO
class Chassis : public Plugin {
public:
enum Parameters {
pLFORate,
pLFODelay,
pLFODepth,
pPWMDepth,
pSubLevel,
pNoiseLevel,
pHPF,
pCutoff,
pRes,
pEnv,
pLfo,
pKyb,
pVCALevel,
pAtk,
pDcy,
pStn,
pRls,
parameterCount
};
Chassis();
protected:

View File

@ -1,367 +0,0 @@
#include "peacock.hpp"
static const char tempOrngUp[] = {
"jF#\377\213].\377\230e\062\377\223b\061\377\230e\062\377\224c\061\377\226d\061"
"\377\222a\060\377\230e\062\377\225c\061\377\232f\063\377\224c\061\377\223b\060"
"\377\227e\062\377\227d\062\377\233g\063\377\223b\060\377\225c\061\377\222a\060"
"\377\224b\061\377\227e\062\377\227d\062\377\226d\062\377\226d\062\377\224c\061"
"\377\223b\060\377\231f\062\377\223b\061\377\222a\060\377\226d\062\377\227e\062"
"\377\223b\060\377\220`\060\377\224b\061\377\233g\063\377\232f\063\377\226d\062"
"\377\223b\060\377\217_/\377\004\003\001\000\004\003\001\000\243l\066\377\331\263\215\377\321"
"\242s\377\321\243u\377\320\241q\377\321\243u\377\321\243u\377\320\240o\377"
"\320\241r\377\320\241r\377\321\243u\377\320\241r\377\320\241r\377\322\244"
"u\377\322\245w\377\321\242s\377\320\240q\377\321\242r\377\321\243u\377\317"
"\237n\377\320\241r\377\321\242s\377\321\242r\377\322\244v\377\321\242s\377"
"\317\237o\377\321\242s\377\320\240o\377\321\242s\377\320\241r\377\320\241"
"q\377\321\242s\377\321\242s\377\321\242s\377\320\237o\377\321\243t\377\321"
"\242s\377\271{=\377\253r\070\377\217_/\062\004\003\001\000\237i\064\377\322\245x\377"
"\305\212O\377\304\207K\377\305\212P\377\304\207K\377\306\214R\377\305\212"
"O\377\303\207J\377\305\211N\377\307\215T\377\303\206J\377\305\211N\377\305"
"\212O\377\304\207K\377\303\206J\377\305\212P\377\302\204G\377\304\211M\377"
"\304\207K\377\304\211M\377\303\206I\377\306\213Q\377\305\212N\377\304\207"
"K\377\303\206H\377\305\212O\377\305\211N\377\305\212P\377\305\212P\377\304"
"\207K\377\303\206H\377\304\207K\377\305\212P\377\306\214R\377\304\207K\377"
"\304\211M\377\300\201A\377\262v;\377rK$\377>(\024\226\237j\064\377\320\240"
"p\377\301\201B\377\270z=\377\270z=\377\300\200A\377\265y<\377\266y<\377\301"
"\202C\377\265x<\377\271{=\377\271{=\377\267y<\377\275~>\377\300\200@\377"
"\273}>\377\267z<\377\273}>\377\266y<\377\300\200@\377\272{=\377\265y<\377"
"\272|=\377\264x;\377\300\200@\377\300\201A\377\276\177?\377\261v:\377\301"
"\202C\377\267z<\377\275~>\377\267z<\377\267z<\377\275~>\377\267z<\377\267"
"z<\377\301\201B\377\275}>\377\237j\064\377hD\040\377>(\024n\234h\063\377\317"
"\237n\377\267y<\377\276~?\377\261u:\377\267y<\377\271{=\377\273|>\377\276"
"~?\377\275~>\377\266y<\377\274}>\377\275~>\377\265y<\377\275~>\377\262v;"
"\377\270{=\377\267z<\377\267y<\377\276~?\377\265y<\377\273}>\377\300\200"
"@\377\276\177?\377\263w;\377\270z=\377\275~>\377\265y<\377\270z=\377\272"
"|=\377\266y<\377\275~>\377\272|=\377\272|=\377\270z=\377\264x;\377\273|>"
"\377\276~?\377\232f\063\377eB\037\377\065\"\020\303\235i\064\377\321\242s\377"
"\301\203D\377\274}>\377\267y<\377\300\200A\377\271{=\377\273|>\377\277\177"
"?\377\264x<\377\266y<\377\272{=\377\275~>\377\260u:\377\267y<\377\300\200"
"@\377\300\200A\377\275}>\377\267y<\377\270z=\377\264x;\377\276~?\377\265"
"x<\377\275~>\377\272|=\377\276~?\377\300\200@\377\271{=\377\272{=\377\270"
"{=\377\263w;\377\276~?\377\272{=\377\262v;\377\263w;\377\300\200A\377\267"
"y<\377\274}>\377\234h\064\377b@\037\377\065\"\020\370\237j\064\377\320\240p\377"
"\301\202C\377\273|>\377\262v;\377\267y<\377\301\201B\377\274}>\377\274}>"
"\377\277\177?\377\300\201A\377\270z=\377\267y<\377\301\201B\377\275~>\377"
"\272|=\377\274}>\377\266y<\377\271{=\377\271{=\377\274}>\377\300\200@\377"
"\277\177?\377\275}>\377\273|>\377\273|>\377\275~>\377\276~?\377\271{=\377"
"\301\201B\377\271{=\377\271{=\377\277\177?\377\301\201B\377\274}>\377\261"
"u:\377\301\202C\377\301\201B\377\231f\063\377cA\037\377\065\"\020\370\237j\064"
"\377\321\241r\377\303\206I\377\271{=\377\265x<\377\272|=\377\275~>\377\273"
"}>\377\301\202C\377\277\177?\377\272|=\377\265x<\377\266y<\377\264x;\377"
"\273|>\377\274}>\377\272{=\377\274}>\377\266y<\377\267z<\377\271{=\377\266"
"y<\377\271{=\377\267z<\377\264x;\377\275}>\377\266y<\377\274}>\377\301\201"
"B\377\277\177?\377\272|=\377\262v;\377\301\201B\377\300\201A\377\273|>\377"
"\276~?\377\301\201B\377\264x<\377\243m\066\377b@\037\377\065\"\020\370\237i\064"
"\377\320\240p\377\302\204F\377\267z<\377\263w;\377\265x<\377\267z<\377\262"
"v;\377\265y<\377\300\200A\377\277\177?\377\274}>\377\277\177?\377\270z=\377"
"\262v;\377\300\200@\377\272|>\377\261v:\377\267y<\377\266y<\377\301\201B"
"\377\272|=\377\267z<\377\272{=\377\271{=\377\270z=\377\272|=\377\274}>\377"
"\266y<\377\300\200@\377\270{=\377\267y<\377\274}>\377\275}>\377\274}>\377"
"\271{=\377\275}>\377\274}>\377\236i\064\377gD\040\377\065\"\020\370\240j\065\377"
"\320\240p\377\300\200@\377\301\201B\377\277\177?\377\276~?\377\266y<\377"
"\275}>\377\271{=\377\267y<\377\273|>\377\264x;\377\274}>\377\276~?\377\271"
"{=\377\267y<\377\274}>\377\267y<\377\265x<\377\275}>\377\267y<\377\300\201"
"A\377\276~?\377\267y<\377\264x;\377\276~?\377\301\202C\377\271{=\377\270"
"z=\377\272|=\377\275~>\377\266y<\377\272|>\377\271{=\377\300\200@\377\300"
"\200@\377\267z<\377\274}>\377\237j\064\377dB\037\377\065\"\020\370\237j\064\377"
"\321\242s\377\274}>\377\261u:\377\267y<\377\267y<\377\272{=\377\276~?\377"
"\271{=\377\266y<\377\271{=\377\272|>\377\300\200A\377\271{=\377\273|>\377"
"\265y<\377\264x<\377\300\200@\377\271{=\377\262v;\377\262w;\377\264x<\377"
"\301\201B\377\274}>\377\272|=\377\265x<\377\300\200@\377\271{=\377\301\203"
"D\377\265x<\377\277\177?\377\301\202C\377\274}>\377\276~?\377\264x;\377\271"
"{=\377\271{=\377\272|=\377\235i\064\377eB\037\377\065\"\020\370\237i\064\377\320"
"\240p\377\267z<\377\271{=\377\300\200@\377\267z<\377\271{=\377\262v;\377"
"\276~?\377\263w;\377\265x<\377\266y<\377\272|=\377\300\177?\377\274}>\377"
"\266y<\377\300\200@\377\267y<\377\275~>\377\275}>\377\276~?\377\266y<\377"
"\275}>\377\300\177?\377\263w;\377\266y<\377\270z=\377\263w;\377\264x<\377"
"\274}>\377\277\177?\377\271{=\377\300\200@\377\277\177?\377\271{=\377\300"
"\201A\377\273|>\377\266y<\377\250p\067\377dB\037\377\065\"\020\370\235i\064\377"
"\320\237o\377\277\177?\377\300\200@\377\275}>\377\270z=\377\267y<\377\275"
"~>\377\271{=\377\266y<\377\271{=\377\274}>\377\271{=\377\263w;\377\260u:"
"\377\277\177?\377\262w;\377\275}>\377\273|>\377\301\201B\377\262v;\377\267"
"y<\377\272|>\377\267y<\377\274}>\377\273|>\377\300\200A\377\267z<\377\265"
"y<\377\275}>\377\266y<\377\271{=\377\262v;\377\273|>\377\271{=\377\300\200"
"@\377\274}>\377\274}>\377\243l\066\377jE!\377\065\"\020\370\232g\063\377\316"
"\234k\377\267z<\377\267z<\377\266y<\377\264x;\377\266y<\377\266y<\377\300"
"\200A\377\272|>\377\271{=\377\272|=\377\273}>\377\274}>\377\273|>\377\272"
"|=\377\301\201B\377\276~?\377\265y<\377\265x<\377\270z=\377\266y<\377\262"
"v;\377\267z<\377\264x;\377\301\202C\377\274}>\377\266y<\377\265x<\377\301"
"\202C\377\265y<\377\267y<\377\274}>\377\263w;\377\270{=\377\263w;\377\266"
"y<\377\275~>\377\242l\066\377gC\040\377\065\"\020\370\234h\063\377\317\236n\377"
"\271{=\377\267y<\377\267y<\377\274}>\377\274}>\377\266y<\377\274}>\377\273"
"|>\377\276~?\377\277\177?\377\266y<\377\301\202C\377\274}>\377\274}>\377"
"\261v:\377\275~>\377\267z<\377\273|>\377\265x<\377\264x<\377\274}>\377\271"
"{=\377\274}>\377\274}>\377\266y<\377\274}>\377\274}>\377\300\201A\377\301"
"\202C\377\276~?\377\275~>\377\273|>\377\276~?\377\261v;\377\266y<\377\276"
"~?\377\232f\063\377fC\040\377\065\"\020\370\233g\063\377\317\235l\377\277\177"
"?\377\263w;\377\272|=\377\267y<\377\270z=\377\266y<\377\300\200@\377\267"
"z<\377\277\177?\377\300\200@\377\276~?\377\274}>\377\272|=\377\275~>\377"
"\275}>\377\273|>\377\270z=\377\277\177?\377\266y<\377\265x<\377\264x;\377"
"\267z<\377\267y<\377\267z=\377\274}>\377\275}>\377\272|=\377\271{=\377\275"
"}>\377\270z=\377\265x<\377\275}>\377\267y<\377\266y<\377\274}>\377\274}>"
"\377\240j\065\377b@\037\377\065\"\020\370\234h\063\377\316\233i\377\300\201A\377"
"\300\200@\377\265x<\377\276~?\377\267z<\377\274}>\377\271{=\377\267y<\377"
"\265x<\377\274}>\377\276~?\377\272|=\377\276~?\377\274}>\377\263w;\377\266"
"y<\377\274}>\377\267z=\377\266y<\377\272|=\377\275}>\377\274}>\377\272|>"
"\377\265x<\377\273|>\377\275}>\377\267z<\377\300\201A\377\271{=\377\266y"
"<\377\275~>\377\274}>\377\300\200@\377\270{=\377\301\201B\377\266y<\377\243"
"l\066\377eB\040\377\065\"\020\370\232g\063\377\320\237o\377\270z=\377\263w;\377"
"\275}>\377\267y<\377\277\177?\377\277\177?\377\267z<\377\274}>\377\277\177"
"?\377\267y<\377\274}>\377\300\200A\377\273|>\377\276~?\377\274}>\377\272"
"|=\377\277\177?\377\272|=\377\272|=\377\264w;\377\300\200@\377\274}>\377"
"\271{=\377\266y<\377\271{=\377\273|>\377\273|>\377\271{=\377\272|=\377\275"
"~>\377\270z=\377\270z=\377\266y<\377\300\200@\377\273|>\377\266y<\377\242"
"l\065\377gC\040\377\065\"\020\370\232g\063\377\317\236l\377\275~?\377\271{=\377"
"\275}>\377\271{=\377\260u:\377\271{=\377\274}>\377\274}>\377\267z<\377\262"
"w;\377\300\200@\377\274}>\377\266y<\377\274}>\377\277\177?\377\275~>\377"
"\300\177?\377\272|=\377\266y<\377\273|>\377\274}>\377\271{=\377\266y<\377"
"\275~>\377\274}>\377\300\200@\377\272|=\377\275}>\377\267y<\377\274}>\377"
"\272{=\377\277\177?\377\270z=\377\277\177?\377\265x<\377\277\177?\377\244"
"m\066\377fC\040\377\065\"\020\370\233g\063\377\321\242r\377\301\201B\377\272|"
"=\377\300\177?\377\265x<\377\267z<\377\271{=\377\271{=\377\271{=\377\274"
"}>\377\267z<\377\275~>\377\300\201A\377\271{=\377\265y<\377\272|>\377\263"
"w;\377\300\200A\377\271{=\377\275~>\377\274}>\377\271{=\377\300\200A\377"
"\264x;\377\266y<\377\274}>\377\267z<\377\272|=\377\267z<\377\273|>\377\272"
"|=\377\271{=\377\267y<\377\271{=\377\273|>\377\274}>\377\276\177?\377\242"
"l\065\377gD\040\377\065\"\020\370\235i\064\377\320\240p\377\265x<\377\266y<\377"
"\272|=\377\262v;\377\273}>\377\271{=\377\301\203D\377\271{=\377\300\201A"
"\377\270z=\377\273|>\377\267y<\377\267z<\377\266y<\377\301\201B\377\272|"
"=\377\270z=\377\265y<\377\272|=\377\263w;\377\266y<\377\274}>\377\275~>\377"
"\275}>\377\272|>\377\261u:\377\271{=\377\275~>\377\275~>\377\266y<\377\271"
"{=\377\263w;\377\300\200@\377\266y<\377\277\177?\377\276~?\377\235h\064\377"
"fC\040\377\065\"\020\370\233g\063\377\317\236n\377\275~?\377\270{=\377\277\177"
"?\377\263w;\377\300\200@\377\274}>\377\267y<\377\301\202C\377\267z<\377\271"
"{=\377\276~?\377\266y<\377\274}>\377\262v;\377\300\200A\377\266y<\377\270"
"z=\377\267z<\377\272|=\377\270z=\377\277\177?\377\266y<\377\301\202C\377"
"\266y<\377\272{=\377\274}>\377\276~?\377\274}>\377\270z=\377\267z<\377\264"
"x<\377\266y<\377\265y<\377\262v;\377\271{=\377\301\202D\377\237j\064\377d"
"A\037\377\065\"\020\370\234h\063\377\317\235l\377\301\202C\377\274}>\377\274"
"}>\377\276~?\377\271{=\377\271{=\377\276~?\377\301\201B\377\300\200@\377"
"\277\177?\377\273|>\377\273|>\377\271{=\377\265y<\377\274}>\377\276~?\377"
"\273|>\377\275~>\377\300\200?\377\277\177?\377\300\200@\377\262v;\377\301"
"\202C\377\263w;\377\275~>\377\266y<\377\263w;\377\266y<\377\266y<\377\277"
"\177?\377\261v:\377\267z<\377\275}>\377\274}>\377\267z<\377\300\200@\377"
"\237j\064\377eB\037\377\065\"\020\370\237j\064\377\317\236n\377\271{=\377\302"
"\203E\377\274}>\377\275~>\377\266y<\377\264x;\377\274}>\377\264x;\377\274"
"}>\377\300\177?\377\266y<\377\270z=\377\266y<\377\271{=\377\300\200?\377"
"\277\177?\377\262v;\377\275~>\377\263w;\377\271{=\377\275}>\377\276~?\377"
"\274}>\377\267z<\377\272|>\377\274}>\377\302\203E\377\271{=\377\271{=\377"
"\277\177?\377\272|=\377\261v:\377\275~>\377\264x;\377\267y<\377\301\201B"
"\377\235i\064\377eB\037\377\065\"\020\370\233g\063\377\317\235l\377\303\205H\377"
"\266y<\377\274}>\377\274}>\377\270z=\377\273|>\377\270{=\377\276~?\377\273"
"}>\377\266y<\377\275~>\377\302\203E\377\274}>\377\276~?\377\276~?\377\276"
"\177?\377\266y<\377\267z<\377\271{=\377\274}>\377\300\200A\377\274}>\377"
"\276~?\377\271{=\377\264x;\377\266y<\377\276\177?\377\300\200@\377\276~?"
"\377\276~?\377\302\203E\377\275~>\377\265y<\377\266y<\377\275~>\377\276\177"
"?\377\240j\065\377dB\037\377\065\"\020\370\264x;\377\331\263\215\377\302\204"
"F\377\263w;\377\300\201A\377\300\200@\377\274}>\377\271{=\377\273}>\377\300"
"\201A\377\266y<\377\267y<\377\272|=\377\300\201A\377\301\202B\377\273}>\377"
"\300\200@\377\300\200@\377\273|>\377\276~?\377\300\200@\377\276~?\377\272"
"|=\377\270{=\377\300\201A\377\277\177?\377\274}>\377\266y<\377\301\201B\377"
"\273}>\377\270z=\377\274}>\377\274}>\377\275~>\377\300\200@\377\301\202C"
"\377\301\202B\377\264x;\377\241k\065\377eB\040\377\065\"\020\370kG#\377\210["
"-\377\233g\063\377\215^.\377\214].\377\215^/\377\216^/\377\207Z-\377\206Y"
",\377\201V+\377\214].\377\207Z-\377\204X,\377\210Z-\377\216_/\377\233g\063"
"\377\223b\061\377\222a\060\377\226d\062\377\214].\377\210[-\377\210Z-\377\215"
"^/\377\224c\061\377\225c\061\377\230e\062\377\224b\061\377\227e\062\377\225c\061"
"\377\231f\062\377\227d\062\377\230e\062\377\223b\061\377\224b\061\377\223b\061"
"\377\232g\063\377\231f\062\377\216_/\377\211[-\377fC\040\377\065\"\020\370\304"
"\206I\025[\071\034\377P\063\031\377cA\037\377gC!\377eA\040\377cA\040\377eB\040\377"
"cA\037\377b@\037\377c@\037\377cA\037\377c@\037\377c@\037\377c@\037\377b@\037\377"
"b@\037\377c@\037\377c@\037\377_>\036\377a?\037\377a?\037\377c@\037\377b?\037\377"
"a?\037\377`>\036\377^>\036\377^>\036\377_>\036\377^>\036\377`>\036\377`>\036\377"
"`>\036\377`>\036\377`>\036\377a?\037\377`>\036\377c@\037\377Y:\034\377L\061\027\377"
"\065\"\020\370\004\003\001\000a@\040\377D,\025\377C+\025\377S\066\032\377V\070\033\377U\066"
"\032\377S\066\032\377U\067\032\377S\066\032\377S\066\032\377S\066\032\377S\066\032\377"
"S\066\032\377S\066\032\377S\066\032\377S\066\032\377S\066\032\377S\066\032\377S\066\032"
"\377Q\064\031\377R\065\032\377R\065\032\377S\066\032\377S\065\032\377R\065\032\377Q\064"
"\031\377P\064\031\377P\064\031\377Q\064\031\377P\064\031\377Q\064\031\377Q\064\031\377"
"Q\064\031\377Q\064\031\377Q\064\031\377R\065\032\377Q\064\031\377O\063\030\377='\022\377"
"\065\"\020\373\004\003\001\000J\061\031\334A*\024\377L\061\030\377N\063\030\377V\070\033\377"
"U\066\032\377S\066\032\377U\067\032\377S\066\032\377S\066\032\377S\066\032\377S\066\032"
"\377S\066\032\377S\066\032\377S\066\032\377S\066\032\377S\066\032\377S\066\032\377S\066"
"\032\377Q\064\031\377R\065\032\377R\065\032\377S\066\032\377S\065\032\377R\065\032\377"
"Q\064\031\377P\064\031\377P\064\031\377Q\064\031\377P\064\031\377Q\064\031\377Q\064\031"
"\377Q\064\031\377Q\064\031\377Q\064\031\377R\065\032\377Q\064\031\377S\066\032\377I/"
"\027\377\065\"\020\376",
};
static const char tempOrngDn[] = {
"\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000"
"\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000"
"\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000"
"\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000"
"\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000>(\024&>(\024\331>(\024\235"
">(\024\235>(\024\235>(\024\235>(\024\235>(\024\235>(\024\235>(\024\235>(\024\235"
">(\024\235>(\024\235>(\024\235>(\024\235>(\024\235>(\024\235>(\024\235>(\024\235"
">(\024\235>(\024\235>(\024\235>(\024\235>(\024\235>(\024\235>(\024\235>(\024\235"
">(\024\235>(\024\235>(\024\235>(\024\235>(\024\235>(\024\235>(\024\235>(\024\235"
">(\024\235>(\024\235>(\024\235\004\003\001\000\004\003\001\000\004\003\001\000eC!\377_@\036\377\217_"
"/\377\212\\.\377\217_/\377\213].\377\215^.\377\211[-\377\217_/\377\214]."
"\377\221`\060\377\213].\377\212\\-\377\216_/\377\216^/\377\222a\060\377\212"
"\\-\377\214].\377\211[-\377\213\\.\377\216_/\377\216^/\377\215^/\377\215"
"^/\377\213].\377\212\\-\377\220`/\377\212\\.\377\211[-\377\215^/\377\216"
"_/\377\212\\-\377\210Z-\377\213\\.\377\222a\060\377\221`\060\377\215^/\377"
"\212\\-\377\217_/\360\004\003\001\000\004\003\001\000a?\037\377K\066\"\377uX;\377}^A\377|]"
">\377}^A\377}^A\377|]=\377|]?\377|]?\377}^A\377|]?\377|]?\377}_A\377}_B\377"
"}^@\377|]>\377}^?\377}^A\377|\\=\377|]?\377}^@\377}^?\377}_A\377}^@\377|"
"\\=\377}^@\377|]=\377}^@\377|]?\377|]>\377}^@\377}^@\377}^@\377|\\=\377}"
"^@\377}^@\377pJ$\375jF!\313>(\024+\004\003\001\000_>\036\377vY=\377\264~G\377\265|"
"E\377\266\177I\377\265|E\377\267\201K\377\266\177H\377\264|D\377\266~G\377"
"\270\202M\377\264{D\377\266~G\377\266\177H\377\265|E\377\264{D\377\266\177"
"I\377\263zA\377\265~G\377\265|E\377\265~G\377\264{C\377\267\200J\377\266"
"\177G\377\265|E\377\264{B\377\266\177H\377\266~G\377\266\177I\377\266\177"
"I\377\265|E\377\264{B\377\265|E\377\266\177I\377\267\201K\377\265|E\377\265"
"~G\377\261w<\377\245m\066\360>(\024\036\004\003\001\000_>\036\377\204cC\377\301\201B"
"\377\270z=\377\270z=\377\300\200A\377\265y<\377\266y<\377\301\202C\377\265"
"x<\377\271{=\377\271{=\377\267y<\377\275~>\377\300\200@\377\273}>\377\267"
"z<\377\273}>\377\266y<\377\300\200@\377\272{=\377\265y<\377\272|=\377\264"
"x;\377\300\200@\377\300\201A\377\276\177?\377\261v:\377\301\202C\377\267"
"z<\377\275~>\377\267z<\377\267z<\377\275~>\377\267z<\377\267z<\377\301\201"
"B\377\275}>\377\237j\064\377\065\"\020\262\004\003\001\000^>\036\377\204cB\377\267y<"
"\377\276~?\377\261u:\377\267y<\377\271{=\377\273|>\377\276~?\377\275~>\377"
"\266y<\377\274}>\377\275~>\377\265y<\377\275~>\377\262v;\377\270{=\377\267"
"z<\377\267y<\377\276~?\377\265y<\377\273}>\377\300\200@\377\276\177?\377"
"\263w;\377\270z=\377\275~>\377\265y<\377\270z=\377\272|=\377\266y<\377\275"
"~>\377\272|=\377\272|=\377\270z=\377\264x;\377\273|>\377\276~?\377\232f\063"
"\377\065\"\020\262\004\003\001\000^>\036\377\205eE\377\301\203D\377\274}>\377\267y<"
"\377\300\200A\377\271{=\377\273|>\377\277\177?\377\264x<\377\266y<\377\272"
"{=\377\275~>\377\260u:\377\267y<\377\300\200@\377\300\200A\377\275}>\377"
"\267y<\377\270z=\377\264x;\377\276~?\377\265x<\377\275~>\377\272|=\377\276"
"~?\377\300\200@\377\271{=\377\272{=\377\270{=\377\263w;\377\276~?\377\272"
"{=\377\262v;\377\263w;\377\300\200A\377\267y<\377\274}>\377\234h\064\377\065"
"\"\020\262\004\003\001\000_>\036\377\204cC\377\301\202C\377\273|>\377\262v;\377\267"
"y<\377\301\201B\377\274}>\377\274}>\377\277\177?\377\300\201A\377\270z=\377"
"\267y<\377\301\201B\377\275~>\377\272|=\377\274}>\377\266y<\377\271{=\377"
"\271{=\377\274}>\377\300\200@\377\277\177?\377\275}>\377\273|>\377\273|>"
"\377\275~>\377\276~?\377\271{=\377\301\201B\377\271{=\377\271{=\377\277\177"
"?\377\301\201B\377\274}>\377\261u:\377\301\202C\377\301\201B\377\231f\063"
"\377\065\"\020\262\004\003\001\000_>\036\377\205dD\377\303\206I\377\271{=\377\265x<"
"\377\272|=\377\275~>\377\273}>\377\301\202C\377\277\177?\377\272|=\377\265"
"x<\377\266y<\377\264x;\377\273|>\377\274}>\377\272{=\377\274}>\377\266y<"
"\377\267z<\377\271{=\377\266y<\377\271{=\377\267z<\377\264x;\377\275}>\377"
"\266y<\377\274}>\377\301\201B\377\277\177?\377\272|=\377\262v;\377\301\201"
"B\377\300\201A\377\273|>\377\276~?\377\301\201B\377\264x<\377\243m\066\377"
"\065\"\020\262\004\003\001\000_>\036\377\204cC\377\302\204F\377\267z<\377\263w;\377"
"\265x<\377\267z<\377\262v;\377\265y<\377\300\200A\377\277\177?\377\274}>"
"\377\277\177?\377\270z=\377\262v;\377\300\200@\377\272|>\377\261v:\377\267"
"y<\377\266y<\377\301\201B\377\272|=\377\267z<\377\272{=\377\271{=\377\270"
"z=\377\272|=\377\274}>\377\266y<\377\300\200@\377\270{=\377\267y<\377\274"
"}>\377\275}>\377\274}>\377\271{=\377\275}>\377\274}>\377\236i\064\377\065\""
"\020\262\004\003\001\000_>\037\377\204cC\377\300\200@\377\301\201B\377\277\177?\377"
"\276~?\377\266y<\377\275}>\377\271{=\377\267y<\377\273|>\377\264x;\377\274"
"}>\377\276~?\377\271{=\377\267y<\377\274}>\377\267y<\377\265x<\377\275}>"
"\377\267y<\377\300\201A\377\276~?\377\267y<\377\264x;\377\276~?\377\301\202"
"C\377\271{=\377\270z=\377\272|=\377\275~>\377\266y<\377\272|>\377\271{=\377"
"\300\200@\377\300\200@\377\267z<\377\274}>\377\237j\064\377\065\"\020\262\004"
"\003\001\000_>\036\377\205eE\377\274}>\377\261u:\377\267y<\377\267y<\377\272{=\377"
"\276~?\377\271{=\377\266y<\377\271{=\377\272|>\377\300\200A\377\271{=\377"
"\273|>\377\265y<\377\264x<\377\300\200@\377\271{=\377\262v;\377\262w;\377"
"\264x<\377\301\201B\377\274}>\377\272|=\377\265x<\377\300\200@\377\271{="
"\377\301\203D\377\265x<\377\277\177?\377\301\202C\377\274}>\377\276~?\377"
"\264x;\377\271{=\377\271{=\377\272|=\377\235i\064\377\065\"\020\262\004\003\001\000"
"_>\036\377\204cC\377\267z<\377\271{=\377\300\200@\377\267z<\377\271{=\377"
"\262v;\377\276~?\377\263w;\377\265x<\377\266y<\377\272|=\377\300\177?\377"
"\274}>\377\266y<\377\300\200@\377\267y<\377\275~>\377\275}>\377\276~?\377"
"\266y<\377\275}>\377\300\177?\377\263w;\377\266y<\377\270z=\377\263w;\377"
"\264x<\377\274}>\377\277\177?\377\271{=\377\300\200@\377\277\177?\377\271"
"{=\377\300\201A\377\273|>\377\266y<\377\250p\067\377\065\"\020\262\004\003\001\000^"
">\036\377\204cB\377\277\177?\377\300\200@\377\275}>\377\270z=\377\267y<\377"
"\275~>\377\271{=\377\266y<\377\271{=\377\274}>\377\271{=\377\263w;\377\260"
"u:\377\277\177?\377\262w;\377\275}>\377\273|>\377\301\201B\377\262v;\377"
"\267y<\377\272|>\377\267y<\377\274}>\377\273|>\377\300\200A\377\267z<\377"
"\265y<\377\275}>\377\266y<\377\271{=\377\262v;\377\273|>\377\271{=\377\300"
"\200@\377\274}>\377\274}>\377\243l\066\377\065\"\020\262\004\003\001\000]>\036\377\203"
"a@\377\267z<\377\267z<\377\266y<\377\264x;\377\266y<\377\266y<\377\300\200"
"A\377\272|>\377\271{=\377\272|=\377\273}>\377\274}>\377\273|>\377\272|=\377"
"\301\201B\377\276~?\377\265y<\377\265x<\377\270z=\377\266y<\377\262v;\377"
"\267z<\377\264x;\377\301\202C\377\274}>\377\266y<\377\265x<\377\301\202C"
"\377\265y<\377\267y<\377\274}>\377\263w;\377\270{=\377\263w;\377\266y<\377"
"\275~>\377\242l\066\377\065\"\020\262\004\003\001\000^>\036\377\204bB\377\271{=\377\267"
"y<\377\267y<\377\274}>\377\274}>\377\266y<\377\274}>\377\273|>\377\276~?"
"\377\277\177?\377\266y<\377\301\202C\377\274}>\377\274}>\377\261v:\377\275"
"~>\377\267z<\377\273|>\377\265x<\377\264x<\377\274}>\377\271{=\377\274}>"
"\377\274}>\377\266y<\377\274}>\377\274}>\377\300\201A\377\301\202C\377\276"
"~?\377\275~>\377\273|>\377\276~?\377\261v;\377\266y<\377\276~?\377\232f\063"
"\377\065\"\020\262\004\003\001\000^>\036\377\204b@\377\277\177?\377\263w;\377\272|="
"\377\267y<\377\270z=\377\266y<\377\300\200@\377\267z<\377\277\177?\377\300"
"\200@\377\276~?\377\274}>\377\272|=\377\275~>\377\275}>\377\273|>\377\270"
"z=\377\277\177?\377\266y<\377\265x<\377\264x;\377\267z<\377\267y<\377\267"
"z=\377\274}>\377\275}>\377\272|=\377\271{=\377\275}>\377\270z=\377\265x<"
"\377\275}>\377\267y<\377\266y<\377\274}>\377\274}>\377\240j\065\377\065\"\020"
"\262\004\003\001\000^>\036\377\203`>\377\300\201A\377\300\200@\377\265x<\377\276~"
"?\377\267z<\377\274}>\377\271{=\377\267y<\377\265x<\377\274}>\377\276~?\377"
"\272|=\377\276~?\377\274}>\377\263w;\377\266y<\377\274}>\377\267z=\377\266"
"y<\377\272|=\377\275}>\377\274}>\377\272|>\377\265x<\377\273|>\377\275}>"
"\377\267z<\377\300\201A\377\271{=\377\266y<\377\275~>\377\274}>\377\300\200"
"@\377\270{=\377\301\201B\377\266y<\377\243l\066\377\065\"\020\262\004\003\001\000]>"
"\036\377\204cB\377\270z=\377\263w;\377\275}>\377\267y<\377\277\177?\377\277"
"\177?\377\267z<\377\274}>\377\277\177?\377\267y<\377\274}>\377\300\200A\377"
"\273|>\377\276~?\377\274}>\377\272|=\377\277\177?\377\272|=\377\272|=\377"
"\264w;\377\300\200@\377\274}>\377\271{=\377\266y<\377\271{=\377\273|>\377"
"\273|>\377\271{=\377\272|=\377\275~>\377\270z=\377\270z=\377\266y<\377\300"
"\200@\377\273|>\377\266y<\377\242l\065\377\065\"\020\262\004\003\001\000]>\036\377\204"
"b@\377\275~?\377\271{=\377\275}>\377\271{=\377\260u:\377\271{=\377\274}>"
"\377\274}>\377\267z<\377\262w;\377\300\200@\377\274}>\377\266y<\377\274}"
">\377\277\177?\377\275~>\377\300\177?\377\272|=\377\266y<\377\273|>\377\274"
"}>\377\271{=\377\266y<\377\275~>\377\274}>\377\300\200@\377\272|=\377\275"
"}>\377\267y<\377\274}>\377\272{=\377\277\177?\377\270z=\377\277\177?\377"
"\265x<\377\277\177?\377\244m\066\377\065\"\020\262\004\003\001\000^>\036\377\205eD\377"
"\301\201B\377\272|=\377\300\177?\377\265x<\377\267z<\377\271{=\377\271{="
"\377\271{=\377\274}>\377\267z<\377\275~>\377\300\201A\377\271{=\377\265y"
"<\377\272|>\377\263w;\377\300\200A\377\271{=\377\275~>\377\274}>\377\271"
"{=\377\300\200A\377\264x;\377\266y<\377\274}>\377\267z<\377\272|=\377\267"
"z<\377\273|>\377\272|=\377\271{=\377\267y<\377\271{=\377\273|>\377\274}>"
"\377\276\177?\377\242l\065\377\065\"\020\262\004\003\001\000^>\036\377\204cC\377\265"
"x<\377\266y<\377\272|=\377\262v;\377\273}>\377\271{=\377\301\203D\377\271"
"{=\377\300\201A\377\270z=\377\273|>\377\267y<\377\267z<\377\266y<\377\301"
"\201B\377\272|=\377\270z=\377\265y<\377\272|=\377\263w;\377\266y<\377\274"
"}>\377\275~>\377\275}>\377\272|>\377\261u:\377\271{=\377\275~>\377\275~>"
"\377\266y<\377\271{=\377\263w;\377\300\200@\377\266y<\377\277\177?\377\276"
"~?\377\235h\064\377\065\"\020\262\004\003\001\000^>\036\377\204bB\377\275~?\377\270{"
"=\377\277\177?\377\263w;\377\300\200@\377\274}>\377\267y<\377\301\202C\377"
"\267z<\377\271{=\377\276~?\377\266y<\377\274}>\377\262v;\377\300\200A\377"
"\266y<\377\270z=\377\267z<\377\272|=\377\270z=\377\277\177?\377\266y<\377"
"\301\202C\377\266y<\377\272{=\377\274}>\377\276~?\377\274}>\377\270z=\377"
"\267z<\377\264x<\377\266y<\377\265y<\377\262v;\377\271{=\377\301\202D\377"
"\237j\064\377\065\"\020\262\004\003\001\000^>\036\377\204b@\377\301\202C\377\274}>\377"
"\274}>\377\276~?\377\271{=\377\271{=\377\276~?\377\301\201B\377\300\200@"
"\377\277\177?\377\273|>\377\273|>\377\271{=\377\265y<\377\274}>\377\276~"
"?\377\273|>\377\275~>\377\300\200?\377\277\177?\377\300\200@\377\262v;\377"
"\301\202C\377\263w;\377\275~>\377\266y<\377\263w;\377\266y<\377\266y<\377"
"\277\177?\377\261v:\377\267z<\377\275}>\377\274}>\377\267z<\377\300\200@"
"\377\237j\064\377\065\"\020\262\004\003\001\000_>\036\377\204bB\377\271{=\377\302\203"
"E\377\274}>\377\275~>\377\266y<\377\264x;\377\274}>\377\264x;\377\274}>\377"
"\300\177?\377\266y<\377\270z=\377\266y<\377\271{=\377\300\200?\377\277\177"
"?\377\262v;\377\275~>\377\263w;\377\271{=\377\275}>\377\276~?\377\274}>\377"
"\267z<\377\272|>\377\274}>\377\302\203E\377\271{=\377\271{=\377\277\177?"
"\377\272|=\377\261v:\377\275~>\377\264x;\377\267y<\377\301\201B\377\235i"
"\064\377\065\"\020\262\004\003\001\000^>\036\377nQ\064\377\303\205H\377\266y<\377\274"
"}>\377\274}>\377\270z=\377\273|>\377\270{=\377\276~?\377\273}>\377\266y<"
"\377\275~>\377\302\203E\377\274}>\377\276~?\377\276~?\377\276\177?\377\266"
"y<\377\267z<\377\271{=\377\274}>\377\300\200A\377\274}>\377\276~?\377\271"
"{=\377\264x;\377\266y<\377\276\177?\377\300\200@\377\276~?\377\276~?\377"
"\302\203E\377\275~>\377\265y<\377\266y<\377\275~>\377\276\177?\377\240j\065"
"\377\065\"\020\262\004\003\001\000L\062\030\377>(\024\377\302\204F\377\263w;\377\300\201"
"A\377\300\200@\377\274}>\377\271{=\377\273}>\377\300\201A\377\266y<\377\267"
"y<\377\272|=\377\300\201A\377\301\202B\377\273}>\377\300\200@\377\300\200"
"@\377\273|>\377\276~?\377\300\200@\377\276~?\377\272|=\377\270{=\377\300"
"\201A\377\277\177?\377\274}>\377\266y<\377\301\201B\377\273}>\377\270z=\377"
"\274}>\377\274}>\377\275~>\377\300\200@\377\301\202C\377\301\202B\377\264"
"x;\377\241k\065\377\065\"\020\262\004\003\001\000fC!\377cA\040\377\233g\063\377\215^."
"\377\214].\377\215^/\377\216^/\377\207Z-\377\206Y,\377\201V+\377\214].\377"
"\207Z-\377\204X,\377\210Z-\377\216_/\377\233g\063\377\223b\061\377\222a\060"
"\377\226d\062\377\214].\377\210[-\377\210Z-\377\215^/\377\224c\061\377\225"
"c\061\377\230e\062\377\224b\061\377\227e\062\377\225c\061\377\231f\062\377\227"
"d\062\377\230e\062\377\223b\061\377\224b\061\377\223b\061\377\232g\063\377\231"
"f\062\377\216_/\377\211[-\377\065\"\020\262\004\003\001\000V\071\035\177F-\026\377P\063"
"\031\377cA\037\377gC!\377eA\040\377cA\040\377eB\040\377cA\037\377b@\037\377c@\037"
"\377cA\037\377c@\037\377c@\037\377c@\037\377b@\037\377b@\037\377c@\037\377c@\037"
"\377_>\036\377a?\037\377a?\037\377c@\037\377b?\037\377a?\037\377`>\036\377^>\036"
"\377^>\036\377_>\036\377^>\036\377`>\036\377`>\036\377`>\036\377`>\036\377`>\036"
"\377a?\037\377`>\036\377c@\037\377Y:\034\377\065\"\020\324",
};
const char* Artwork::orngBtnUp = (const char*)tempOrngUp;
const char* Artwork::orngBtnDn = (const char*)tempOrngDn;

View File

@ -1,89 +0,0 @@
#include "peacock.hpp"
static const char tempLedOn[] = {
"\025\036(\000\025\035&\000\025\033#\000\025\025\"\000\242\000\000\001\203\000\000\002r\000\000\004g\000\000\006n"
"\000\000\010p\000\000\012\210\000\000\013\231\000\000\013\235\000\000\013\250\000\000\013\261\000\000\011\261"
"\000\000\007\304\000\000\005\357\000\000\003\377\000\000\001\025$\063\000\025%\065\000\025'\071\000\025)=\000\025"
"*@\000\025\035&\000\025\035&\000\025\036&\000\062\000\000\001\062\000\000\004E\000\000\006j\000\000\011{\000\000\013"
"\227\000\000\015\255\000\000\017\300\000\000\021\323\000\000\022\330\000\000\022\336\000\000\022\336\000"
"\000\020\325\000\000\016\323\000\000\013\306\000\000\010\313\000\000\005\327\000\000\002\344\000\000\001\025*"
"?\000\025';\000\025&\071\000\025\037&\000\025!&\000\066\000\000\001L\000\000\004p\000\000\007\203\000\000\012\244"
"\000\000\015\271\000\000\021\315!!\025\340\034\034\027\361\030\030\030\364\024\024\031\372\000"
"\000\031\374\000\000\030\374\000\000\030\374\000\000\025\372\000\000\021\370\000\000\016\366\000\000\011\353"
"\000\000\006\377\000\000\003\377\000\000\001\024\037\063\000\024\035/\000\025/,\000+\000\000\001<\000\000\004a\000\000"
"\007\231\000\000\012\261\000\000\017\317##\024\334\030\030\027\351\017\021\033\366\007\011\036\377"
"\004\005\040\377\002\004!\377\002\004!\377\002\002!\377\000\000\037\377\000\000\033\377\000\000\030\377\000"
"\000\024\377\000\000\017\377\000\000\012\377\000\000\006\377\000\000\003\377\000\000\001\014\015\026\000\064\000"
"\000\001\034\000\000\003\203\000\000\007\246\021\021\013\306::\017\321#%\024\342\022\024\031\363\005"
"\007\037\377\000\000#\377\000\000'\375\000\000*\377\000\000*\377\000\000*\377\000\000)\377\000\000&\377"
"\000\000#\377\000\000\037\377\000\000\032\377\000\000\025\377\000\000\017\377\000\000\012\377\000\000\005\377"
"\000\000\002\013\012\020\000I\000\000\002:\000\000\006\227\000\000\012\265\000\000\016\323%%\024\351\022\022"
"\032\376\004\004\040\377\000\000&\377\000\000,\370\001\000\063\340\002\002Q\346\002\002B\355\001\001>\374"
"\000\000\064\377\000\000/\377\000\000+\377\000\000&\377\000\000!\377\000\000\033\377\000\000\024\377\000\000"
"\016\377\000\000\010\377\000\000\004\377\000\000\001P\000\000\004w\000\000\010\267\002\002\015\332))\023\361"
"\024\026\031\377\004\005\040\377\000\000'\371\000\001\060\337\002\003G\316\003\003]\244\004\003\331\264"
"\004\003\307\313\003\003\256\330\003\004d\337\002\004L\366\001\002\070\377\000\000-\377\000\000(\377\000"
"\000!\377\000\000\032\377\000\000\022\377\000\000\014\377\000\000\006\377\000\000\002V\000\000\005\250\000\000\012"
"\327\000\000\017\361\036\036\026\377\011\013\035\377\000\000&\373\000\000/\320\003\004U\216\004\004"
"\346e\002\002\370M\001\001\376P\001\001\376S\001\001\375\\\001\002\373\230\003\004\356\327\003\023\204"
"\366\001\002\071\377\000\000-\377\000\000&\377\000\000\037\377\000\000\027\377\000\000\017\377\000\000\011"
"\377\000\000\003\201\000\000\006\310\013\013\013\357--\022\377\022\024\031\377\000\000\"\377\000\000"
"*\344\002\002B\225\004\005\315m\002\003\375\202\002\002\377\235\002\002\377\212\001\001\377\252\001"
"\002\377\223\001\001\377\215\001\001\377\304\003\005\357\321\003\006\\\372\000\001\064\377\000\000+"
"\377\000\000#\377\000\000\033\377\000\000\022\377\000\000\013\377\000\000\005\250\000\000\010\334\004\004\015"
"\372))\023\377\015\017\033\377\000\000%\373\000\000\060\322\003\004Vm\003\003\364\215\003\005\377"
"\323@F\377\325@F\377\270\001\001\377\272\001\001\377\323\001\002\377\326\001\003\377\247"
"\001\002\377\305\004\011\340\342\002\005H\377\000\000.\377\000\000&\377\000\000\035\377\000\000\024\377"
"\000\000\015\377\000\000\006\300\000\000\010\364\000\000\016\377##\024\377\013\013\035\377\000\000&\347"
"\002\002<\227\003\005\272l\002\003\373\272\015\017\377\372\356\360\377\377\376\376\377"
"\313\024\"\377\374\000\001\377\367\001\001\377\360\001\002\377\331\001\002\377\300\003\006\362"
"\337\002\004M\377\000\000/\377\000\000'\377\000\000\036\377\000\000\026\377\000\000\016\377\000\000\007\340"
"\000\000\011\377\000\000\016\377!!\025\377\011\013\035\377\000\000'\363\001\001\067\302\003\004\221"
"k\002\003\372\254\002\004\377\316\022\026\377\307\026,\377\347\003\010\377\377\000\013\377"
"\367\001\005\377\364\001\002\377\362\001\002\377\316\003\006\364\337\002\004M\377\000\000\060\377"
"\000\000(\377\000\000\037\377\000\000\026\377\000\000\016\377\000\000\010\357\000\000\010\377\000\000\016\377"
"!!\025\377\013\015\034\377\000\000&\370\001\001\063\331\002\004\201r\002\002\372\262\001\002\377\323"
"\000\001\377\373\000\017\377\377\000\022\377\374\000\034\377\373\000\030\377\363\001\011\377"
"\361\001\011\377\330\003\007\365\337\002\005M\377\000\000\060\377\000\000'\377\000\000\036\377\000\000"
"\026\377\000\000\016\377\000\000\010\347\000\000\007\377\000\000\015\377\000\000\024\377\015\015\034\377"
"\000\000%\375\000\000/\335\002\004L\301\003\006\352\307\002\003\376\353\000\001\377\374\000\022\377"
"\377\000\034\377\371\000\032\377\370\001\021\377\357\001\013\377\366\001\006\377\327\003\005"
"\366\336\002\004K\377\000\000/\377\000\000'\377\000\000\035\377\000\000\024\377\000\000\015\377\000\000"
"\007\355\000\000\006\377\000\000\014\377\000\000\023\377\021\022\032\377\002\002!\377\000\000*\372\000\001"
"\064\321\003\006^\316\003\010\352\306\000\001\377\330\000\000\377\376\000\034\377\370\001\026\377"
"\364\001\006\377\360\001\003\377\347\002\004\377\261\005\010\357\334\002\004I\377\000\000+\377\000"
"\000$\377\000\000\033\377\000\000\022\377\000\000\013\377\000\000\005\363\000\000\004\377\000\000\012\377\000"
"\000\020\377\000\000\026\377\011\011\035\377\000\000%\377\000\000?\373\000\000Y\324\003\010^\311\004"
"\015\346\342\002\005\371\317\000\000\377\351\000\003\377\346\002\003\377\314\003\006\377\244\005"
"\011\375\215\006\010\330\333\002\003B\377\000\000'\377\000\000\037\377\000\000\027\377\000\000\020\377"
"\000\000\011\377\000\000\004\363\000\000\003\377\000\000\007\377\000\000\015\377\000\000\023\377\022\022\032"
"\377\004\005\040\377\000\000'\377\000\000-\372\000\001\065\342\007\014L\321\031\035c\271\006\017\256"
"\252\005\013\346\231\006\011\353\216\006\011\352\216\006\011\331\307\004\005T\370\000\001+\377"
"\000\000\"\377\000\000\033\377\000\000\023\377\000\000\015\377\000\000\007\377\000\000\002\377\000\000\001\377"
"\000\000\004\377\000\000\011\377\000\000\017\377\000\000\024\377\000\000\033\377\002\002!\377\000\000&\377"
"\000\000+\377\000\000\060\373\007\010\065\353\002\006@\336\002\005I\334\002\004I\331\003\004F\331\011\012"
"B\371\002\002+\377\000\000\"\377\000\000\034\377\000\000\025\377\000\000\017\377\000\000\011\377\000\000"
"\005\377\000\000\001\025*&\000\377\000\000\002\377\000\000\006\377\000\000\012\377\000\000\020\377\000\000\026"
"\377\000\000\033\377\000\000\040\377\000\000%\377\000\000(\377\000\000+\377\000\000,\377\000\000,\377\000"
"\000+\377\000\000)\377\000\000%\377\000\000!\377\000\000\033\377\000\000\025\377\000\000\020\377\000\000\012"
"\377\000\000\006\377\000\000\002\013\033\032\000\025-)\000\377\000\000\001\377\000\000\003\377\000\000\006\377"
"\000\000\013\377\000\000\020\377\000\000\025\377\000\000\031\377\000\000\035\377\000\000\040\377\000\000\""
"\377\000\000#\377\000\000#\377\000\000#\377\000\000!\377\000\000\036\377\000\000\031\377\000\000\025\377"
"\000\000\020\377\000\000\013\377\000\000\007\377\000\000\003\377\000\000\001\013\034\033\000\025-)\000\025,(\000"
"\377\000\000\001\377\000\000\003\377\000\000\006\377\000\000\012\377\000\000\016\377\000\000\022\377\000\000\026"
"\377\000\000\031\377\000\000\032\377\000\000\033\377\000\000\033\377\000\000\032\377\000\000\030\377\000"
"\000\026\377\000\000\022\377\000\000\016\377\000\000\012\377\000\000\006\377\000\000\003\377\000\000\001\013\024"
"\033\000\013\024\032\000\025/+\000\025)%\000\025\065\062\000\377\000\000\001\377\000\000\002\377\000\000\005\377"
"\000\000\010\377\000\000\013\377\000\000\015\377\000\000\020\377\000\000\021\377\000\000\022\377\000\000\022"
"\377\000\000\022\377\000\000\020\377\000\000\016\377\000\000\013\377\000\000\011\377\000\000\005\377\000\000"
"\003\377\000\000\001\013\024!\000\013\015\031\000\013\014\027\000\304\301\273\000\304\301\273\000\025"
"-)\000\025$\040\000\025$\040\000\377\000\000\001\377\000\000\002\377\000\000\004\377\000\000\006\377\000\000\010"
"\377\000\000\012\377\000\000\013\377\000\000\012\377\000\000\012\377\000\000\011\377\000\000\007\377\000\000"
"\005\377\000\000\003\377\000\000\001\025\030D\000\025\027\063\000\025\030:\000\025\027\064\000\025\030\070\000"
"\025-)\000\025'#\000\307\304\276\000\312\307\301\000\025>/\000\025\065\026\000\025\071\027\000\377"
"\000\000\001\377\000\000\002\377\000\000\003\377\000\000\004\377\000\000\004\377\000\000\005\377\000\000\004\377\000"
"\000\003\377\000\000\002\377\000\000\001\025\032C\000\025\031>\000\025\027\063\000\025\026\061\000\025\030<\000"
"\025\031>\000\025\033I\000",
};
const char* Artwork::ledOnData = (const char*)tempLedOn;

View File

@ -1,499 +0,0 @@
/*
Chassis polysynth framework
Copyright 2024 Gordon JC Pearce <gordonjcp@gjcp.net>
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#include "chassis.hpp"
void Chassis::initParameter(uint32_t index, Parameter& parameter) {
parameter.ranges.min = 0.0f;
parameter.ranges.max = 127.0f;
parameter.hints = kParameterIsAutomatable;
parameter.ranges.def = 0.0f;
switch (index) {
case pLFORate:
parameter.name = "LFO Rate";
parameter.symbol = "ch_lforate";
parameter.midiCC = 3;
break;
case pLFODelay:
parameter.hints = kParameterIsAutomatable;
parameter.name = "LFO Delay";
parameter.symbol = "ch_lfodelay";
parameter.midiCC = 9;
break;
case pVCORange:
parameter.hints = kParameterIsAutomatable | kParameterIsInteger;
parameter.name = "Range";
parameter.symbol = "ch_vcorange";
parameter.ranges.max = 2.0f;
parameter.midiCC = 12;
parameter.enumValues.count = 3;
parameter.enumValues.restrictedMode = true;
{
ParameterEnumerationValue* const enumValues = new ParameterEnumerationValue[3];
enumValues[0].value = 0.0f;
enumValues[0].label = "16'";
enumValues[1].value = 1.0f;
enumValues[1].label = "8'";
enumValues[2].value = 2.0f;
enumValues[2].label = "4'";
parameter.enumValues.values = enumValues;
}
break;
case pLFODepth:
parameter.hints = kParameterIsAutomatable;
parameter.name = "LFO";
parameter.symbol = "ch_lfo";
parameter.midiCC = 13;
break;
case pPWMDepth:
parameter.hints = kParameterIsAutomatable;
parameter.name = "PWM";
parameter.symbol = "ch_pwm";
parameter.midiCC = 14;
break;
/*
case paramPWMMode:
parameter.hints = kParameterIsAutomatable | kParameterIsBoolean;
parameter.name = "PWM Mode";
parameter.symbol = "ch_pwmmode";
parameter.ranges.min = 0.0f;
parameter.ranges.max = 1.0f;
parameter.ranges.def = 1.0f;
parameter.midiCC = 15;
parameter.enumValues.count = 2;
parameter.enumValues.restrictedMode = true;
{
ParameterEnumerationValue* const enumValues = new ParameterEnumerationValue[2];
enumValues[0].value = 0.0f;
enumValues[0].label = "LFO";
enumValues[1].value = 1.0f;
enumValues[1].label = "MAN";
parameter.enumValues.values = enumValues;
}
break;
*/
case pSaw:
parameter.hints = kParameterIsAutomatable | kParameterIsBoolean;
parameter.name = "Saw";
parameter.symbol = "ch_saw";
parameter.ranges.max = 1.0f;
parameter.midiCC = 17;
break;
case pSqr:
parameter.hints = kParameterIsAutomatable | kParameterIsBoolean;
parameter.name = "Square";
parameter.symbol = "ch_sqr";
parameter.ranges.max = 1.0f;
parameter.midiCC = 16;
break;
case pSubLevel:
parameter.hints = kParameterIsAutomatable;
parameter.name = "Sub Osc";
parameter.symbol = "ch_sub";
parameter.midiCC = 18;
break;
case pNoiseLevel:
parameter.hints = kParameterIsAutomatable;
parameter.name = "Noise";
parameter.symbol = "ch_noise";
parameter.midiCC = 19;
break;
case pHPF:
parameter.hints = kParameterIsAutomatable | kParameterIsInteger;
parameter.name = "HPF";
parameter.symbol = "ch_hpf";
parameter.ranges.max = 4.0f;
parameter.midiCC = 20;
break;
case pCutoff:
parameter.hints = kParameterIsAutomatable;
parameter.name = "Freq";
parameter.symbol = "ch_freq";
parameter.midiCC = 74;
break;
case pRes:
parameter.hints = kParameterIsAutomatable;
parameter.name = "Res";
parameter.symbol = "ch_reso";
parameter.midiCC = 71;
break;
/*
case paramVCFMode:
parameter.hints = kParameterIsAutomatable | kParameterIsInteger;
parameter.name = "Polarity";
parameter.symbol = "ch_vcfmode";
parameter.ranges.min = 0.0f;
parameter.ranges.max = 1.0f;
parameter.ranges.def = 1.0f;
parameter.midiCC = 21;
parameter.enumValues.count = 2;
parameter.enumValues.restrictedMode = true;
{
ParameterEnumerationValue* const enumValues = new ParameterEnumerationValue[2];
enumValues[0].value = 0.0f;
enumValues[0].label = "POS";
enumValues[1].value = 1.0f;
enumValues[1].label = "INV";
parameter.enumValues.values = enumValues;
}
*/
break;
case pEnv:
parameter.hints = kParameterIsAutomatable;
parameter.name = "Env";
parameter.symbol = "ch_vcfenv";
parameter.midiCC = 22;
break;
case pLfo:
parameter.hints = kParameterIsAutomatable;
parameter.name = "LFO";
parameter.symbol = "ch_vcflfo";
parameter.midiCC = 23;
break;
case pKyb:
parameter.hints = kParameterIsAutomatable;
parameter.name = "Kybd";
parameter.symbol = "ch_vcfkey";
parameter.midiCC = 24;
break;
case pAtk:
parameter.hints = kParameterIsAutomatable;
parameter.name = "Attack";
parameter.symbol = "ch_attack";
parameter.midiCC = 73;
break;
case pDcy:
parameter.hints = kParameterIsAutomatable;
parameter.name = "Decay";
parameter.symbol = "ch_decay";
parameter.midiCC = 75;
break;
case pStn:
parameter.hints = kParameterIsAutomatable;
parameter.name = "Sustain";
parameter.symbol = "ch_sustain";
parameter.midiCC = 27;
break;
case pRls:
parameter.hints = kParameterIsAutomatable;
parameter.name = "Release";
parameter.symbol = "ch_release";
parameter.midiCC = 72;
break;
/*
case paramEnvGate:
parameter.hints = kParameterIsAutomatable | kParameterIsInteger; // | kParameterIsBoolean;
parameter.name = "Env-Gate";
parameter.symbol = "ch_envgate";
parameter.ranges.min = 0.0f;
parameter.ranges.max = 1.0f;
parameter.ranges.def = 1.0f;
parameter.midiCC = 25;
parameter.enumValues.count = 2;
parameter.enumValues.restrictedMode = true;
{
ParameterEnumerationValue* const enumValues = new ParameterEnumerationValue[2];
enumValues[0].value = 0.0f;
enumValues[0].label = "ENV";
enumValues[1].value = 1.0f;
enumValues[1].label = "GATE";
parameter.enumValues.values = enumValues;
}
break;
*/
case pVCALevel:
parameter.hints = kParameterIsAutomatable;
parameter.name = "VCA Level";
parameter.symbol = "ch_vcalevel";
parameter.midiCC = 26;
break;
case pChorus:
parameter.hints = kParameterIsAutomatable | kParameterIsInteger;
parameter.name = "Chorus Mode";
parameter.symbol = "ch_chorus";
parameter.ranges.max = 2.0f;
parameter.midiCC = 12;
parameter.enumValues.count = 3;
parameter.enumValues.restrictedMode = true;
{
ParameterEnumerationValue* const enumValues = new ParameterEnumerationValue[3];
enumValues[0].value = 0.0f;
enumValues[0].label = "Off";
enumValues[1].value = 1.0f;
enumValues[1].label = "Slow";
enumValues[2].value = 2.0f;
enumValues[2].label = "Fast";
parameter.enumValues.values = enumValues;
}
break;
/*
case paramModWheel:
parameter.hints = kParameterIsAutomatable | kParameterIsHidden;
parameter.name = "Mod wheel";
parameter.symbol = "ch_modwheel";
parameter.ranges.min = 0.0f;
parameter.ranges.max = 127.0f;
parameter.ranges.def = 0.0f;
parameter.midiCC = 1;
break;
*/
}
// chorus, porta, bend range, key mode still to do
}
void Chassis::setParameterValue(uint32_t index, float value) {
// should be trapped by host, but let's be safe
if (value < 0.0f) value = 0.0f;
if (value > 127.0f) value = 127.0f;
switch (index) {
case pLFORate:
patchRam.lfoRate = value;
break;
case pLFODelay:
patchRam.lfoDelay = value;
break;
case pLFODepth:
patchRam.vcoLfo = value;
break;
case pPWMDepth:
patchRam.pwmLfo = value / 1.27;
break;
case pSubLevel:
patchRam.sub = value;
break;
case pNoiseLevel:
patchRam.noise = value;
break;
case pCutoff:
patchRam.vcfFreq = value;
break;
case pRes:
patchRam.vcfReso = value;
break;
case pEnv:
patchRam.vcfEnv = value;
break;
case pLfo:
patchRam.vcfLfo = value;
break;
case pKyb:
patchRam.vcfKey = value;
break;
case pVCALevel:
patchRam.vca = value;
break;
case pAtk:
patchRam.env_a = value;
break;
case pDcy:
patchRam.env_d = value;
break;
case pStn:
patchRam.env_s = value;
break;
case pRls:
patchRam.env_r = value;
break;
// switch 1 params
case pVCORange: // bits 0-2 of switch 1
// doesn't look great in Carla because of odd behaviour with small integer knobs
patchRam.switch1 &= 0xf8;
patchRam.switch1 |= (1 << (int)(value - 1));
break;
case pSqr: // bit 3 of switch 1
patchRam.switch1 &= 0xf7;
patchRam.switch1 |= (value >= 0.5) << 3;
break;
case pSaw: // bit 4 of switch 1
patchRam.switch1 &= 0xef;
patchRam.switch1 |= (value >= 0.5) << 4;
break;
case pChorus:
patchRam.switch1 &= 0x9f;
// 60, 40, 00
switch ((int)value) {
case 0:
patchRam.switch1 |= 0x60;
break;
case 1:
patchRam.switch1 |= 0x40;
break;
case 2:
patchRam.switch1 |= 0x00;
break;
}
break;
/*
// switch 2 params
case paramPWMMode: // bit 0 of switch 2
patchRam.switch2 &= 0xfe;
patchRam.switch2 |= (value >= 0.5);
break;
case paramVCFMode: // bit 1 of switch 2
patchRam.switch2 &= 0xfd;
patchRam.switch2 |= (value >= 0.5) << 1;
break;
case paramEnvGate:
patchRam.switch2 &= 0xfb;
patchRam.switch2 |= (value >= 0.5) << 2;
break;
*/
case pHPF: // bits 3-4 of switch 2
// doesn't look great in Carla because of odd behaviour with small integer knobs
if (value > 3) value = 3;
patchRam.switch2 &= 0xe7;
patchRam.switch2 |= (3 - (int)value) << 3;
break;
/*
case paramModWheel:
s.ff64 = (int)value << 1;
break;
*/
}
}
float Chassis::getParameterValue(uint32_t index) const {
switch (index) {
case pLFORate:
return patchRam.lfoRate;
break;
case pLFODelay:
return patchRam.lfoDelay;
break;
case pVCORange:
// FIXME this needs to be better generally
switch (patchRam.switch1 & 0x07) {
case 1:
return 0;
break;
case 4:
return 2;
break;
default:
return 1;
}
break;
case pLFODepth:
return patchRam.vcoLfo;
break;
case pPWMDepth:
return patchRam.pwmLfo * 1.27f;
break;
/*
case paramPWMMode:
return (patchRam.switch2 & 0x01) != 0;
break;
*/
case pSaw:
return (patchRam.switch1 & 0x10) != 0;
break;
case pSqr:
return (patchRam.switch1 & 0x08) != 0;
case pSubLevel:
return patchRam.sub;
break;
case pNoiseLevel:
return patchRam.noise;
break;
case pHPF:
return 3 - ((patchRam.switch2 & 0x18) >> 3);
break;
case pCutoff:
return patchRam.vcfFreq;
break;
case pRes:
return patchRam.vcfReso;
break;
case pEnv:
return patchRam.vcfEnv;
break;
case pLfo:
return patchRam.vcfLfo;
break;
case pKyb:
return patchRam.vcfKey;
break;
/*
case paramVCFMode:
return (patchRam.switch2 & 0x02) != 0;
break;
*/
case pAtk:
return patchRam.env_a;
break;
case pDcy:
return patchRam.env_d;
break;
case pStn:
return patchRam.env_s;
break;
case pRls:
return patchRam.env_r;
break;
/*
case paramEnvGate:
return (patchRam.switch2 & 0x04) != 0;
*/
case pVCALevel:
return patchRam.vca;
break;
case pChorus:
// FIXME this needs to be better generally
switch (patchRam.switch1 & 0x60) {
case 0x40:
return 1;
case 0x00:
return 2;
default:
return 0;
}
break;
}
return 0;
}

File diff suppressed because it is too large Load Diff

View File

@ -2,29 +2,18 @@
namespace Artwork {
extern const char *orngBtnUp;
extern const char *orngBtnDn;
const unsigned int orngBtnSize = 41 * 30 * 4;
const unsigned int orngBtnWidth = 41;
const unsigned int orngBtnHeight = 30;
extern const char *ledOnData;
const unsigned int ledDataSize = 24 * 24 * 4;
const unsigned int ledWidth = 24;
const unsigned int ledHeight = 24;
extern const char *orangeData;
extern const char *greenData;
extern const char *blueData;
extern const char *whiteData;
const unsigned int sliderDataSize = 38 * 17 * 3;
const unsigned int sliderDataSize = 38*17*3;
const unsigned int sliderWidth = 41;
const unsigned int sliderHeight = 26;
extern const char *backgroundData;
const unsigned int backgroundDataSize = 700 * 400 * 3;
const unsigned int backgroundDataSize = 700*400*3;
const unsigned int backgroundWidth = 700;
const unsigned int backgroundHeight = 400;
} // namespace Artwork

View File

@ -7,17 +7,8 @@ START_NAMESPACE_DISTRHO
namespace Art = Artwork;
void prepSlider(ImageSlider* s, uint id, int x, int y) {
s->setId(id);
s->setStartPos(x, y);
s->setEndPos(x, y + 79); // 80px high
s->setInverted(true);
s->setRange(0, 127.0f);
}
DistrhoUIchassis::DistrhoUIchassis() : UI(Art::backgroundWidth, Art::backgroundHeight, true),
fImgBackground(Art::backgroundData, Art::backgroundWidth, Art::backgroundHeight, kImageFormatRGB),
fImgLedOn(Art::ledOnData, Art::ledWidth, Art::ledHeight, kImageFormatRGBA)
fImgBackground(Art::backgroundData, Art::backgroundWidth, Art::backgroundHeight, kImageFormatRGB)
{
Image orangeSlider(Art::orangeData, Art::sliderWidth, Art::sliderHeight, kImageFormatRGBA);
@ -26,119 +17,125 @@ DistrhoUIchassis::DistrhoUIchassis() : UI(Art::backgroundWidth, Art::backgroundH
Image whiteSlider(Art::whiteData, Art::sliderWidth, Art::sliderHeight, kImageFormatRGBA);
xSliderLFORate = new ImageSlider(this, orangeSlider);
prepSlider(xSliderLFORate, pLFORate, 46, 72);
xSliderLFORate->setId(Chassis::pLFORate);
xSliderLFORate->setStartPos(50, 72);
xSliderLFORate->setEndPos(50, 151);
xSliderLFORate->setRange(0, 127.0f);
xSliderLFORate->setCallback(this);
xSliderLFODelay = new ImageSlider(this, orangeSlider);
prepSlider(xSliderLFODelay, pLFODelay, 84, 72);
xSliderLFODelay->setId(Chassis::pLFODelay);
xSliderLFODelay->setStartPos(92, 72);
xSliderLFODelay->setEndPos(92, 151);
xSliderLFODelay->setRange(0, 127.0f);
xSliderLFODelay->setCallback(this);
xSliderLFODepth = new ImageSlider(this, greenSlider);
prepSlider(xSliderLFODepth, pLFODepth, 290, 72);
xSliderLFODepth->setId(Chassis::pLFODepth);
xSliderLFODepth->setStartPos(292, 72);
xSliderLFODepth->setEndPos(292, 151);
xSliderLFODepth->setRange(0, 127.0f);
xSliderLFODepth->setCallback(this);
xSliderPWMDepth = new ImageSlider(this, greenSlider);
prepSlider(xSliderPWMDepth, pPWMDepth, 329, 72);
xSliderPWMDepth->setId(Chassis::pPWMDepth);
xSliderPWMDepth->setStartPos(331, 72);
xSliderPWMDepth->setEndPos(331, 151);
xSliderPWMDepth->setRange(0, 127.0f);
xSliderPWMDepth->setCallback(this);
xSliderSubLevel = new ImageSlider(this, greenSlider);
prepSlider(xSliderSubLevel, pSubLevel, 510, 72);
xSliderSubLevel->setId(Chassis::pSubLevel);
xSliderSubLevel->setStartPos(518, 72);
xSliderSubLevel->setEndPos(518, 151);
xSliderSubLevel->setRange(0, 127.0f);
xSliderSubLevel->setCallback(this);
xSliderNoiseLevel = new ImageSlider(this, greenSlider);
prepSlider(xSliderNoiseLevel, pNoiseLevel, 551, 72);
xSliderNoiseLevel->setId(Chassis::pNoiseLevel);
xSliderNoiseLevel->setStartPos(560, 72);
xSliderNoiseLevel->setEndPos(560, 151);
xSliderNoiseLevel->setRange(0, 127.0f);
xSliderNoiseLevel->setCallback(this);
xSliderHPF = new ImageSlider(this, blueSlider);
prepSlider(xSliderHPF, pHPF, 618, 72);
xSliderHPF->setId(Chassis::pHPF);
xSliderHPF->setStartPos(619, 72);
xSliderHPF->setEndPos(619, 151);
xSliderHPF->setRange(0, 3.0f);
xSliderHPF->setStep(1);
xSliderHPF->setRange(0, 3);
xSliderHPF->setCallback(this);
xSliderCutoff = new ImageSlider(this, blueSlider);
prepSlider(xSliderCutoff, pCutoff, 26, 261);
xSliderCutoff->setId(Chassis::pCutoff);
xSliderCutoff->setStartPos(21, 261);
xSliderCutoff->setEndPos(21, 340);
xSliderCutoff->setRange(0, 127.0f);
xSliderCutoff->setCallback(this);
xSliderRes = new ImageSlider(this, blueSlider);
prepSlider(xSliderRes, pRes, 65, 261);
xSliderRes->setId(Chassis::pRes);
xSliderRes->setStartPos(60, 261);
xSliderRes->setEndPos(60, 340);
xSliderRes->setRange(0, 127.0f);
xSliderRes->setCallback(this);
xSliderEnv = new ImageSlider(this, blueSlider);
prepSlider(xSliderEnv, pEnv, 149, 261);
xSliderEnv->setId(Chassis::pEnv);
xSliderEnv->setStartPos(144, 261);
xSliderEnv->setEndPos(144, 340);
xSliderEnv->setRange(0, 127.0f);
xSliderEnv->setCallback(this);
xSliderLfo = new ImageSlider(this, blueSlider);
prepSlider(xSliderLfo, pLfo, 189, 261);
xSliderLfo->setId(Chassis::pLfo);
xSliderLfo->setStartPos(183, 261);
xSliderLfo->setEndPos(183, 340);
xSliderLfo->setRange(0, 127.0f);
xSliderLfo->setCallback(this);
xSliderKyb = new ImageSlider(this, blueSlider);
prepSlider(xSliderKyb, pKyb, 228, 261);
xSliderKyb->setId(Chassis::pKyb);
xSliderKyb->setStartPos(222, 261);
xSliderKyb->setEndPos(222, 340);
xSliderKyb->setRange(0, 127.0f);
xSliderKyb->setCallback(this);
xSliderVCALevel = new ImageSlider(this, whiteSlider);
prepSlider(xSliderVCALevel, pVCALevel, 319, 261);
xSliderVCALevel->setId(Chassis::pVCALevel);
xSliderVCALevel->setStartPos(314, 261);
xSliderVCALevel->setEndPos(314, 340);
xSliderVCALevel->setRange(0, 127.0f);
xSliderVCALevel->setCallback(this);
xSliderAtk = new ImageSlider(this, whiteSlider);
prepSlider(xSliderAtk, pVCALevel, 385, 261);
xSliderAtk->setId(Chassis::pAtk);
xSliderAtk->setStartPos(375, 261);
xSliderAtk->setEndPos(375, 340);
xSliderAtk->setRange(0, 127.0f);
xSliderAtk->setCallback(this);
xSliderDcy = new ImageSlider(this, whiteSlider);
prepSlider(xSliderDcy, pDcy, 425, 261);
xSliderDcy->setId(Chassis::pDcy);
xSliderDcy->setStartPos(414, 261);
xSliderDcy->setEndPos(414, 340);
xSliderDcy->setRange(0, 127.0f);
xSliderDcy->setCallback(this);
xSliderStn = new ImageSlider(this, whiteSlider);
prepSlider(xSliderStn, pStn, 465, 261);
xSliderStn->setId(Chassis::pStn);
xSliderStn->setStartPos(454, 261);
xSliderStn->setEndPos(454, 340);
xSliderStn->setRange(0, 127.0f);
xSliderStn->setCallback(this);
xSliderRls = new ImageSlider(this, whiteSlider);
prepSlider(xSliderRls, pRls, 505, 261);
xSliderRls->setId(Chassis::pRls);
xSliderRls->setStartPos(493, 261);
xSliderRls->setEndPos(493, 340);
xSliderRls->setRange(0, 127.0f);
xSliderRls->setCallback(this);
xBtn16ft = new ImageButton(this, Image(Art::orngBtnUp, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGBA),
Image(Art::orngBtnDn, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGBA));
xBtn16ft->setAbsolutePos(149, 104);
xBtn16ft->setId(btn16);
xBtn16ft->setCallback(this);
xBtn8ft = new ImageButton(this, Image(Art::orngBtnUp, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGBA),
Image(Art::orngBtnDn, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGBA));
xBtn8ft->setAbsolutePos(190, 104);
xBtn8ft->setId(btn8);
xBtn8ft->setCallback(this);
xBtn4ft = new ImageButton(this, Image(Art::orngBtnUp, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGBA),
Image(Art::orngBtnDn, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGBA));
xBtn4ft->setAbsolutePos(231, 104);
xBtn4ft->setId(btn4);
xBtn4ft->setCallback(this);
// waveform
xBtnPls = new ImageButton(this, Image(Art::orngBtnUp, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGBA),
Image(Art::orngBtnDn, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGBA));
xBtnPls->setAbsolutePos(414, 104);
xBtnPls->setId(btnPls);
xBtnPls->setCallback(this);
xBtnSaw = new ImageButton(this, Image(Art::orngBtnUp, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGBA),
Image(Art::orngBtnDn, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGBA));
xBtnSaw->setAbsolutePos(455, 104);
xBtnSaw->setId(btnSaw);
xBtnSaw->setCallback(this);
// Chorus
xBtnCh0 = new ImageButton(this, Image(Art::orngBtnUp, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGBA),
Image(Art::orngBtnDn, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGBA));
xBtnCh0->setAbsolutePos(562, 293);
xBtnCh0->setId(btnCh0);
xBtnCh0->setCallback(this);
xBtnCh1 = new ImageButton(this, Image(Art::orngBtnUp, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGBA),
Image(Art::orngBtnDn, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGBA));
xBtnCh1->setAbsolutePos(603, 293);
xBtnCh1->setId(btnCh1);
xBtnCh1->setCallback(this);
xBtnCh2 = new ImageButton(this, Image(Art::orngBtnUp, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGBA),
Image(Art::orngBtnDn, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGBA));
xBtnCh2->setAbsolutePos(644, 293);
xBtnCh2->setId(btnCh2);
xBtnCh2->setCallback(this);
programLoaded(0);
}
@ -147,95 +144,42 @@ DistrhoUIchassis::~DistrhoUIchassis() {
}
void DistrhoUIchassis::programLoaded(uint32_t index) {
printf("in programLoaded %d\n", index);
switch (index) {
case pLFORate:
case Chassis::pLFORate:
xSliderLFORate->setValue(0.5);
printf("set lforate\n");
break;
case pLFODelay:
case Chassis::pLFODelay:
xSliderLFODelay->setValue(0.5);
printf("set lfoDelay\n");
break;
}
}
void DistrhoUIchassis::parameterChanged(uint32_t index, float value) {
switch (index) {
case pLFORate:
xSliderLFORate->setValue(value);
break;
case pLFODelay:
xSliderLFODelay->setValue(value);
break;
case pLFODepth:
xSliderLFODepth->setValue(value);
break;
case pPWMDepth:
xSliderPWMDepth->setValue(value);
break;
case pSubLevel:
xSliderSubLevel->setValue(value);
break;
case pNoiseLevel:
xSliderNoiseLevel->setValue(value);
break;
case pHPF:
xSliderHPF->setValue(value);
break;
case pCutoff:
xSliderCutoff->setValue(value);
break;
case pRes:
xSliderRes->setValue(value);
break;
case pEnv:
xSliderEnv->setValue(value);
break;
case pLfo:
xSliderLfo->setValue(value);
break;
case pKyb:
xSliderKyb->setValue(value);
break;
case pAtk:
xSliderAtk->setValue(value);
break;
case pDcy:
xSliderDcy->setValue(value);
break;
case pStn:
xSliderStn->setValue(value);
break;
case pRls:
xSliderRls->setValue(value);
break;
// now the switches
case pVCORange:
sw1 &= 0xf8; // mask
if (value > 2) value = 2;
sw1 |= (1 << (int)value);
break;
case pSqr:
sw1 &= 0xf7;
sw1 |= ((value >= 0.5)) << 3;
break;
case pSaw:
sw1 &= 0xef;
sw1 |= (value > 0.5) << 4;
break;
printf("in parameterchanged %d %f\n", index, value);
switch(index) {
case Chassis::pLFORate: xSliderLFORate->setValue(value); break;
case Chassis::pLFODelay: xSliderLFODelay->setValue(value); break;
case Chassis::pLFODepth: xSliderLFODepth->setValue(value); break;
case Chassis::pPWMDepth: xSliderPWMDepth->setValue(value); break;
case Chassis::pSubLevel: xSliderSubLevel->setValue(value); break;
case Chassis::pNoiseLevel: xSliderNoiseLevel->setValue(value); break;
case Chassis::pHPF: xSliderHPF->setValue(value); break;
case Chassis::pCutoff: xSliderCutoff->setValue(value); break;
case Chassis::pRes: xSliderRes->setValue(value); break;
case Chassis::pEnv: xSliderEnv->setValue(value); break;
case Chassis::pLfo: xSliderLfo->setValue(value); break;
case Chassis::pKyb: xSliderKyb->setValue(value); break;
case Chassis::pAtk: xSliderAtk->setValue(value); break;
case Chassis::pDcy: xSliderDcy->setValue(value); break;
case Chassis::pStn: xSliderStn->setValue(value); break;
case Chassis::pRls: xSliderRls->setValue(value); break;
case pChorus:
sw1 &= 0x9f;
// 60, 40, 00
switch ((int)value) {
case 0:
sw1 |= 0x60;
break;
case 1:
sw1 |= 0x40;
break;
case 2:
sw1 |= 0x00;
break;
}
}
}
void DistrhoUIchassis::imageSliderDragStarted(ImageSlider* slider) {
@ -247,58 +191,13 @@ void DistrhoUIchassis::imageSliderDragFinished(ImageSlider* slider) {
}
void DistrhoUIchassis::imageSliderValueChanged(ImageSlider* slider, float value) {
printf("%f\n", value);
setParameterValue(slider->getId(), value);
}
void DistrhoUIchassis::imageButtonClicked(ImageButton* imgBtn, int) {
int id = imgBtn->getId();
// printf("imagebutton %d\n", id);
switch (id) {
case btn16:
sw1 &= 0xf8;
sw1 |= 0x01;
break;
case btn8:
sw1 &= 0xf8;
sw1 |= 0x02;
break;
case btn4:
sw1 &= 0xf8;
sw1 |= 0x04;
break;
case btnPls:
sw1 ^= 0x08;
break;
case btnSaw:
sw1 ^= 0x10;
break;
case btnCh0:
sw1 = (sw1 & 0x1f) | 0x20;
break;
case btnCh1:
sw1 = (sw1 & 0x1f) | 0x40;
break;
case btnCh2:
sw1 = (sw1 & 0x1f);
break;
default:
break;
}
}
void DistrhoUIchassis::onDisplay() {
const GraphicsContext& context(getGraphicsContext());
fImgBackground.draw(context);
// switch 1 LEDs
if (sw1 & 0x01) fImgLedOn.drawAt(context, 160, 77); // 16'
if (sw1 & 0x02) fImgLedOn.drawAt(context, 198, 77); // 8'
if (sw1 & 0x04) fImgLedOn.drawAt(context, 238, 77); // 4'
if (sw1 & 0x08) fImgLedOn.drawAt(context, 424, 77); // pulse
if (sw1 & 0x10) fImgLedOn.drawAt(context, 464, 77); // saw
if ((sw1 & 0x60) == 0x40) fImgLedOn.drawAt(context, 612, 267); // chorus 1
if ((sw1 & 0x60) == 0x00) fImgLedOn.drawAt(context, 652, 267); // chorus 2
};
UI* createUI() {

View File

@ -8,8 +8,7 @@
START_NAMESPACE_DISTRHO
class DistrhoUIchassis : public UI,
public ImageSlider::Callback,
public ImageButton::Callback {
public ImageSlider::Callback {
public:
DistrhoUIchassis();
~DistrhoUIchassis() override;
@ -23,19 +22,13 @@ class DistrhoUIchassis : public UI,
void imageSliderDragFinished(ImageSlider* slider) override;
void imageSliderValueChanged(ImageSlider* slider, float value) override;
void imageButtonClicked(ImageButton *imageButton, int button) override;
private:
Image fImgBackground;
Image fImgLedOn;
ScopedPointer<ImageSlider>
ScopedPointer<ImageSlider>
xSliderLFORate, xSliderLFODelay,
xSliderLFODepth, xSliderPWMDepth, xSliderSubLevel, xSliderNoiseLevel,
xSliderHPF, xSliderCutoff, xSliderRes, xSliderEnv, xSliderLfo, xSliderKyb,
xSliderVCALevel, xSliderAtk, xSliderDcy, xSliderStn, xSliderRls;
ScopedPointer<ImageButton> xBtn16ft, xBtn8ft, xBtn4ft, xBtnPls, xBtnSaw, xBtnCh0, xBtnCh1, xBtnCh2;
uint8_t sw1 = 0, sw2 = 0;
DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(DistrhoUIchassis)
// ImageAboutWindow fAboutWindow;
};