From 4b886212c4f00c48ff59561d40b95c41cce64bea Mon Sep 17 00:00:00 2001 From: asb2m10 Date: Wed, 22 Jan 2014 18:59:49 -0500 Subject: [PATCH] UI cleanup --- .../UserInterfaceState.xcuserstate | Bin 75363 -> 76608 bytes Source/DXLookNFeel.cpp | 209 +++++++++++------- Source/DXLookNFeel.h | 10 +- Source/GlobalEditor.cpp | 21 +- Source/GlobalEditor.h | 2 +- Source/OperatorEditor.cpp | 6 +- Source/OperatorEditor.h | 1 - Source/PluginParam.cpp | 15 +- Source/msfa/pitchenv.cc | 10 +- Source/msfa/pitchenv.h | 5 +- 10 files changed, 166 insertions(+), 113 deletions(-) diff --git a/Builds/MacOSX/Dexed.xcodeproj/project.xcworkspace/xcuserdata/asb2m10.xcuserdatad/UserInterfaceState.xcuserstate b/Builds/MacOSX/Dexed.xcodeproj/project.xcworkspace/xcuserdata/asb2m10.xcuserdatad/UserInterfaceState.xcuserstate index 7d7bf609b20ac1547b7e2aac51fde86086dd7363..b9259ca55ae2b7c3f84a988e96b9697f9a127ddd 100644 GIT binary patch literal 76608 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 CacuMe literal 75363 zcmdqK1z=Ri_BecJuI=t!-^HcDowxyQ*(4iCiIGhp!M2el1d?pXCOGY#x>9#T>+bIE z1xicZOWmm3|ID=&5(3V^WqL7V zn6b<_W;`>2naCtFDNHJp#$+*5m_wNWQ^`~@vzXaTHB-aPVdgUPnEA{CCdh=Ch0GEr z!gMg5%ra&W|` z{>BVO7-Js0a4$Rn55$9T5+09Ja2C$SIrvaqgiG*DT!9047Ouk!aWihgt#~P3i;u!b zV;LWZPsOL<)A2fdHohEh#8=~M@U{2`d=I`C--qwV596os)A%L)CVm%xj6cDj;m`3G z_-Fh(i&)I^tiZb2-t0hj5SzpfVJEPuYz~{tPGJva4`UB!XRu{#6+4Ta&CX*NvCV87 zyOeEbJ6XaW&z{Vl!k)^mW6xsGWiMbaV>hwavDdRVuy?R`vUjl$u@AG4u#d8Duy3+& zv2U~Qua#@J@a(e+Zw%58;RM!}yW>D1J0QhEL|R z_*{Mpe>k7V=kwF}>3k7?1YgQm@Bw}kF`Ca^H{CE8K{15!k{Ga?^ z0xL*@Rj>)Ygx*3Q;SgbrkSt^gxxy6Ta3N2~7p4itLb*^WR157wMCcGYg=NBWVTG_# zSS73$)(C5bQ-#xn(}i`y8N!*u`NGA*CBjw0)xtHxwZe76^}-Fpjl%81-NHS>Q^M22 zGs3gNbHek&3&J*GyRcJuU-&@yQ20prQus>vTKHc0Mfg?tP2@yg6hu)piDuCz4iX28 zhloky5OJtD%p{rYCYQ-;>SO9}8e~c`4Ks~2jWLZkC7aSrnWh}mWYb|LpQ*q!&2)sR z#8hqym}Z%3O!G`ZQ=KVfT4Y*cYBeo2b(of$R+-kCWYe*x6HF(YPBWchI@@%f=|a;b zrprwmOq)$tnXWb6V7l3Ko9Rx|J*N9j51Ae{Jz;v<^qlEM(<`R!rq@hwnBF$MXZq0e ziRm-bm!@w_-eCU=bH=7Mdo62nYqGTWv({QH7_vNnj6fG=Edd~bDKG0US?itUSmGme2n>c z^GW7Y&Fjo(na?#}V7}OVnR&f=lle;XHRkKhH<@oW-(kMne4qJ2^CRZR%}<%1HNRkf z*}ToX!@Se{mib-t2j-8>yUbshzczno-fjNb{G0ht3u9p|g2imHS{xR)rI)3zWq@U{ zWr$_CWt3&CWr8Kel5WYent}~Zn4~Mxyy2| z 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 - level[i] = s_level[i]->getValue(); - } - - env.init(rate, level, 99 << 5, 0); - env.keydown(true); - for (int i = 0; i < 72; i++) { - int32_t pos = env.getsample(); - for (int j = 0; j < 16; j++) { - env.getsample(); - } - g.setPixel(i, 32 - (sqrt(pos) / 512)); - } - env.keydown(false); - for (int i = 0; i < 24; i++) { - int32_t pos = env.getsample(); - for (int j = 0; j < 16; j++) { - env.getsample(); - } - g.setPixel(i + 72, 32 - (sqrt(pos) / 512)); - } -} - AlgoDisplay::AlgoDisplay() { - algo = NULL; + static char tmpAlgo = 0; + algo = &tmpAlgo; } /** @@ -105,10 +73,6 @@ AlgoDisplay::AlgoDisplay() { void AlgoDisplay::paint(Graphics &g) { int alg; - if ( algo == NULL ) { - return; - } - if ( *algo <= 31 ) { alg = *algo; } else { @@ -116,32 +80,31 @@ void AlgoDisplay::paint(Graphics &g) { } const char *arr = algoArr[alg]; - g.setColour (Colours::black.withAlpha(0.5f)); + g.setColour (Colours::black.withAlpha(0.1f)); g.fillRoundedRectangle (0.0f, 0.0f, (float) getWidth(), (float) getHeight(), 1.0f); for(int i=0;i<13;i++) { - char target = arr[i]; - bool feedback = target == arr[13]; + int target = arr[i]; if ( target == 0 ) continue; if ( i < 6 ) { - drawOp(g, i, 3, target, feedback); + drawOp(g, i, 3, target); continue; } if ( i < 10 ){ - drawOp(g, (i-6)+1, 2, target, feedback); + drawOp(g, (i-6)+1, 2, target); continue; } if ( i < 12 ) { - drawOp(g, (i-10)+2, 1, target, feedback); + drawOp(g, (i-10)+2, 1, target); continue; } // last one - drawOp(g, (i-12)+3, 0, target, feedback); + drawOp(g, (i-12)+3, 0, target); } String algoTxt; @@ -149,9 +112,9 @@ void AlgoDisplay::paint(Graphics &g) { g.drawText(algoTxt, 5, 1, 21, 14, Justification::left, true); } -void AlgoDisplay::drawOp(Graphics &g, int x, int y, int num, bool feedback) { +void AlgoDisplay::drawOp(Graphics &g, int x, int y, int num) { String txt; - txt << num; + txt << abs(num); int offx = 24; int offy = 17; @@ -160,13 +123,91 @@ void AlgoDisplay::drawOp(Graphics &g, int x, int y, int num, bool feedback) { g.fillRect(x*offx+4, y*offy+3, offx-2, offy-1); g.setColour(Colour(0xFFFFFFFF)); g.drawText(txt, x*offx+3, y*offy+2, offx+2, offy+2, Justification::centred, true); - if ( feedback ) { + if ( num < 0 ) { g.setColour(Colour(0xFFFFFFFF)); int x1 = (x*offx) + 24; g.drawLine(x1+1, y*offy+3, x1+1, y*offy+offy+2, 3); } } +void EnvDisplay::paint(Graphics &g) { + int rate[4]; + int level[4]; + + g.setColour(Colours::black.withAlpha(0.1f)); + g.fillRoundedRectangle (0.0f, 0.0f, (float) getWidth(), (float) getHeight(), 1.0f); + g.setColour(Colours::white); + + for (int i = 0; i < 4; i++) { + rate[i] = s_rate[i]->getValue(); + level[i] = s_level[i]->getValue(); + } + + env.init(rate, level, 99 << 5, 0); + env.keydown(true); + for (int i = 0; i < 72; i++) { + int32_t pos = env.getsample(); + for (int j = 0; j < 16; j++) { + env.getsample(); + } + g.setPixel(i, 32 - (sqrt(pos) / 512)); + } + env.keydown(false); + for (int i = 0; i < 24; i++) { + int32_t pos = env.getsample(); + for (int j = 0; j < 16; j++) { + env.getsample(); + } + g.setPixel(i + 72, 32 - (sqrt(pos) / 512)); + } +} + +PitchEnvDisplay::PitchEnvDisplay() { + static char tmpDisplay[8]; + memset(&tmpDisplay, 0x00, 8); + pvalues = (char *) &tmpDisplay; +} + +void PitchEnvDisplay::paint(Graphics &g) { + g.setColour(Colours::black.withAlpha(0.1f)); + g.fillRoundedRectangle (0.0f, 0.0f, (float) getWidth(), (float) getHeight(), 1.0f); + g.setColour(Colours::white); + + char *levels = pvalues; + char *rates = pvalues + 4; + + float dist[4]; + float total; + + int old = pitchenv_tab[levels[3]] + 128; + // find the scale + + for(int i=0;i<4;i++) { + int nw = pitchenv_tab[levels[i]] + 128; + dist[i] = abs(old - nw) / pitchenv_rate[rates[i]]; + total += dist[i]; + old = nw; + } + + + // TODO : this is WIP + int ratio = 96 / total; + + int oldx = 0; + int oldy = (pitchenv_tab[levels[3]] + 128) / 10; + + for(int i=0;i<4;i++) { + int newx = dist[i] * ratio + oldx; + int newy = (pitchenv_tab[levels[i]] + 128) / 10; + + g.drawLine(oldx, oldy, newx, newy, 2); + + oldx = newx; + oldy = newy; + } +} + + void VuMeter::paint(Graphics &g) { // taken from the drawLevelMeter ; diff --git a/Source/DXLookNFeel.h b/Source/DXLookNFeel.h index b453fad..2312014 100644 --- a/Source/DXLookNFeel.h +++ b/Source/DXLookNFeel.h @@ -23,6 +23,7 @@ #include "../JuceLibraryCode/JuceHeader.h" #include "msfa/env.h" +#include "msfa/pitchenv.h" class EnvDisplay : public Component { Env env; @@ -34,15 +35,20 @@ public: }; class PitchEnvDisplay : public Component { - Env env; + char rvalues[8]; + char render[96]; + + void renderDisplay(); public: + PitchEnvDisplay(); + char *pvalues; void paint(Graphics &g); }; class AlgoDisplay : public Component { - void drawOp(Graphics &g, int x, int y, int num, bool feedback); + void drawOp(Graphics &g, int x, int y, int num); public: AlgoDisplay(); diff --git a/Source/GlobalEditor.cpp b/Source/GlobalEditor.cpp index dbc5e69..df9b500 100644 --- a/Source/GlobalEditor.cpp +++ b/Source/GlobalEditor.cpp @@ -159,8 +159,8 @@ GlobalEditor::GlobalEditor () addAndMakeVisible (lfoSync = new ToggleButton ("lfoSync")); lfoSync->setButtonText (String::empty); - addAndMakeVisible (component = new Component()); - component->setName ("new component"); + addAndMakeVisible (pitchEnvDisplay = new PitchEnvDisplay()); + pitchEnvDisplay->setName ("pitchEnvDisplay"); //[UserPreSize] @@ -202,7 +202,7 @@ GlobalEditor::~GlobalEditor() oscSync = nullptr; pitchModSens = nullptr; lfoSync = nullptr; - component = nullptr; + pitchEnvDisplay = nullptr; //[Destructor]. You can add your own custom destruction code here.. @@ -254,7 +254,7 @@ void GlobalEditor::resized() oscSync->setBounds (600, 64, 24, 24); pitchModSens->setBounds (728, 64, 24, 24); lfoSync->setBounds (624, 64, 24, 24); - component->setBounds (752, 8, 96, 32); + pitchEnvDisplay->setBounds (752, 8, 96, 32); //[UserResized] Add your own custom resize handling here.. //[/UserResized] } @@ -302,41 +302,49 @@ void GlobalEditor::sliderValueChanged (Slider* sliderThatWasMoved) else if (sliderThatWasMoved == pitchRate2) { //[UserSliderCode_pitchRate2] -- add your slider handling code here.. + pitchEnvDisplay->repaint(); //[/UserSliderCode_pitchRate2] } else if (sliderThatWasMoved == pitchRate3) { //[UserSliderCode_pitchRate3] -- add your slider handling code here.. + pitchEnvDisplay->repaint(); //[/UserSliderCode_pitchRate3] } else if (sliderThatWasMoved == pitchRate4) { //[UserSliderCode_pitchRate4] -- add your slider handling code here.. + pitchEnvDisplay->repaint(); //[/UserSliderCode_pitchRate4] } else if (sliderThatWasMoved == pitchRate1) { //[UserSliderCode_pitchRate1] -- add your slider handling code here.. + pitchEnvDisplay->repaint(); //[/UserSliderCode_pitchRate1] } else if (sliderThatWasMoved == pitchLevel2) { //[UserSliderCode_pitchLevel2] -- add your slider handling code here.. + pitchEnvDisplay->repaint(); //[/UserSliderCode_pitchLevel2] } else if (sliderThatWasMoved == pitchLevel3) { //[UserSliderCode_pitchLevel3] -- add your slider handling code here.. + pitchEnvDisplay->repaint(); //[/UserSliderCode_pitchLevel3] } else if (sliderThatWasMoved == pitchLevel4) { //[UserSliderCode_pitchLevel4] -- add your slider handling code here.. + pitchEnvDisplay->repaint(); //[/UserSliderCode_pitchLevel4] } else if (sliderThatWasMoved == pitchLevel1) { //[UserSliderCode_pitchLevel1] -- add your slider handling code here.. + pitchEnvDisplay->repaint(); //[/UserSliderCode_pitchLevel1] } else if (sliderThatWasMoved == feedback) @@ -402,6 +410,7 @@ void GlobalEditor::bind(DexedAudioProcessor *parent) { parent->fxCutoff->bind(cutoff); parent->fxReso->bind(reso); algoDisplay->algo = &(parent->data[134]); + pitchEnvDisplay->pvalues = &(parent->data[126]); processor = parent; } @@ -517,8 +526,8 @@ BEGIN_JUCER_METADATA - diff --git a/Source/GlobalEditor.h b/Source/GlobalEditor.h index 003960f..139a4f5 100644 --- a/Source/GlobalEditor.h +++ b/Source/GlobalEditor.h @@ -90,7 +90,7 @@ private: ScopedPointer oscSync; ScopedPointer pitchModSens; ScopedPointer lfoSync; - ScopedPointer component; + ScopedPointer pitchEnvDisplay; //============================================================================== diff --git a/Source/OperatorEditor.cpp b/Source/OperatorEditor.cpp index f1a9919..7996748 100644 --- a/Source/OperatorEditor.cpp +++ b/Source/OperatorEditor.cpp @@ -445,6 +445,8 @@ void OperatorEditor::bind(DexedAudioProcessor *parent, int op) { parent->opCtrl[op].sclLeftDepth->bind(sclLeftLevel); parent->opCtrl[op].sclRightDepth->bind(sclRightLevel); parent->opCtrl[op].sclRate->bind(sclRateScaling); + parent->opCtrl[op].ampModSens->bind(ampModSens); + parent->opCtrl[op].velModSens->bind(keyVelSens); } @@ -477,13 +479,9 @@ void OperatorEditor::updateDisplay() { txtFreq << " " << det; } khzDisplay->setText(txtFreq, NotificationType::dontSendNotification); - envDisplay->repaint(); } -void OperatorEditor::updateEnv() { - //envDisplay->update(s_) -} //[/MiscUserCode] diff --git a/Source/OperatorEditor.h b/Source/OperatorEditor.h index 6f3cbe4..d5f0171 100644 --- a/Source/OperatorEditor.h +++ b/Source/OperatorEditor.h @@ -51,7 +51,6 @@ public: void bind(DexedAudioProcessor *processor, int num); void updateGain(float v); void updateDisplay(); - void updateEnv(); //[/UserMethods] void paint (Graphics& g); diff --git a/Source/PluginParam.cpp b/Source/PluginParam.cpp index 093cdfd..90419fa 100755 --- a/Source/PluginParam.cpp +++ b/Source/PluginParam.cpp @@ -297,7 +297,7 @@ void DexedAudioProcessor::initCtrl() { String opMode; opMode << opName << " MODE"; - opCtrl[opVal].opMode = new CtrlDX(opMode, 1, opTarget + 17); + opCtrl[opVal].opMode = new CtrlDX(opMode, 2, opTarget + 17); ctrl.add(opCtrl[opVal].opMode); String coarse; @@ -322,14 +322,12 @@ void DexedAudioProcessor::initCtrl() { String sclLeftDepth; sclLeftDepth << opName << " L SCALE DEPTH"; - opCtrl[opVal].sclLeftDepth = new CtrlDX(sclLeftDepth, 100, - opTarget + 9); + opCtrl[opVal].sclLeftDepth = new CtrlDX(sclLeftDepth, 100, opTarget + 9); ctrl.add(opCtrl[opVal].sclLeftDepth); String sclRightDepth; sclRightDepth << opName << " R SCALE DEPTH"; - opCtrl[opVal].sclRightDepth = new CtrlDX(sclRightDepth, 100, - opTarget + 10); + opCtrl[opVal].sclRightDepth = new CtrlDX(sclRightDepth, 100, opTarget + 10); ctrl.add(opCtrl[opVal].sclRightDepth); String sclLeftCurve; @@ -339,18 +337,17 @@ void DexedAudioProcessor::initCtrl() { String sclRightCurve; sclRightCurve << opName << " R KEY SCALE"; - opCtrl[opVal].sclRightCurve = new CtrlDX(sclRightCurve, 4, - opTarget + 12); + opCtrl[opVal].sclRightCurve = new CtrlDX(sclRightCurve, 4, opTarget + 12); ctrl.add(opCtrl[opVal].sclRightCurve); String sclRate; sclRate << opName << " RATE SCALING"; - opCtrl[opVal].sclRate = new CtrlDX(sclRate, 7, opTarget + 13); + opCtrl[opVal].sclRate = new CtrlDX(sclRate, 8, opTarget + 13); ctrl.add(opCtrl[opVal].sclRate); String ampModSens; ampModSens << opName << " A MOD SENS."; - opCtrl[opVal].ampModSens = new CtrlDX(ampModSens, 3, opTarget + 14); + opCtrl[opVal].ampModSens = new CtrlDX(ampModSens, 4, opTarget + 14); ctrl.add(opCtrl[opVal].ampModSens); String velModSens; diff --git a/Source/msfa/pitchenv.cc b/Source/msfa/pitchenv.cc index 707aefc..5d83528 100644 --- a/Source/msfa/pitchenv.cc +++ b/Source/msfa/pitchenv.cc @@ -23,7 +23,7 @@ void PitchEnv::init(double sample_rate) { unit_ = N * (1 << 24) / (21.3 * sample_rate) + 0.5; } -static uint8_t ratetab[] = { +const uint8_t pitchenv_rate[] = { 1, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 16, 16, 17, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 33, 34, 36, 37, 38, 39, 41, 42, 44, 46, 47, @@ -32,7 +32,7 @@ static uint8_t ratetab[] = { 153, 159, 165, 171, 178, 185, 193, 202, 211, 232, 243, 254, 255 }; -static int8_t pitchtab[] = { +const int8_t pitchenv_tab[] = { -128, -116, -104, -95, -85, -76, -68, -61, -56, -52, -49, -46, -43, -41, -39, -37, -35, -33, -32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12, -11, -10, @@ -47,7 +47,7 @@ void PitchEnv::set(const int r[4], const int l[4]) { rates_[i] = r[i]; levels_[i] = l[i]; } - level_ = pitchtab[l[3]] << 19; + level_ = pitchenv_tab[l[3]] << 19; down_ = true; advance(0); } @@ -82,10 +82,10 @@ void PitchEnv::advance(int newix) { ix_ = newix; if (ix_ < 4) { int newlevel = levels_[ix_]; - targetlevel_ = pitchtab[newlevel] << 19; + targetlevel_ = pitchenv_tab[newlevel] << 19; rising_ = (targetlevel_ > level_); - inc_ = ratetab[rates_[ix_]] * unit_; + inc_ = pitchenv_rate[rates_[ix_]] * unit_; } } diff --git a/Source/msfa/pitchenv.h b/Source/msfa/pitchenv.h index 28c5c2b..ff80d27 100755 --- a/Source/msfa/pitchenv.h +++ b/Source/msfa/pitchenv.h @@ -45,5 +45,8 @@ class PitchEnv { void advance(int newix); }; -#endif // __PITCHENV_H +extern const uint8_t pitchenv_rate[]; +extern const int8_t pitchenv_tab[]; + + #endif // __PITCHENV_H