/** * * Copyright (c) 2013 Pascal Gauthier. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be * useful, but WITHOUT ANY WARRANTY; without even the implied * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program; if not, write to the Free * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. */ #include "DXLookNFeel.h" #include "PluginProcessor.h" /** * Algorithm arrangements, based on the DX1 display. * Feedop 7 == custom draw */ const char algoArr[][14] = { // 1 2 3 4 5 6 7 8 9 A B C D F { 0, 0, 1, 3, 0, 0, 0, 2, 4, 0, 0, 5, 6, 6 }, // 1 { 0, 0, 1, 3, 0, 0, 0, 2, 4, 0, 0, 5, 6, 2 }, // 2 { 0, 0, 1, 4, 0, 0, 0, 2, 5, 0, 3, 6, 0, 6 }, // 3 { 0, 0, 1, 4, 0, 0, 0, 2, 5, 0, 3, 6, 0, 7 }, // 4 { 0, 1, 3, 5, 0, 0, 0, 2, 4, 6, 0, 0, 0, 6 }, // 5 { 0, 1, 3, 5, 0, 0, 0, 2, 4, 6, 0, 0, 0, 7 }, // 6 { 0, 1, 3, 0, 0, 0, 2, 4, 5, 0, 0, 6, 0, 2 }, // 7 { 0, 1, 3, 0, 0, 0, 2, 4, 5, 0, 0, 6, 0, 4 }, // 8 { 0, 1, 3, 0, 0, 0, 2, 4, 5, 0, 0, 0, 0, 2 }, // 9 { 0, 0, 0, 4, 1, 0, 5, 6, 2, 0, 0, 3, 0, 3 }, // 10 { 0, 0, 0, 4, 1, 0, 5, 6, 2, 0, 0, 3, 0, 6 }, // 11 { 0, 0, 3, 0, 1, 0, 4, 5, 6, 2, 0, 0, 0, 2 }, // 12 { 0, 0, 3, 0, 1, 0, 4, 5, 6, 2, 0, 0, 0, 6 }, // 13 // 1 2 3 4 5 6 7 8 9 A B C D F { 0, 0, 1, 3, 0, 0, 0, 2, 4, 0, 5, 6, 0, 6 }, // 14 { 0, 0, 1, 3, 0, 0, 0, 2, 4, 0, 5, 6, 0, 2 }, // 15 { 0, 0, 1, 0, 0, 0, 2, 3, 5, 0, 4, 6, 0, 6 }, // 16 { 0, 0, 1, 0, 0, 0, 2, 3, 5, 0, 4, 6, 0, 2 }, // 17 { 0, 0, 1, 0, 0, 0, 2, 3, 4, 0, 0, 5, 6, 3 }, // 18 { 0, 0, 1, 4, 5, 0, 0, 2, 6, 0, 3, 0, 0, 6 }, // 19 { 0, 1, 2, 0, 4, 0, 3, 0, 5, 6, 0, 0, 0, 3 }, // 20 { 0, 1, 2, 4, 5, 0, 3, 0, 6, 0, 0, 0, 0, 3 }, // 21 { 0, 1, 3, 4, 5, 0, 2, 0, 6, 0, 0, 0, 0, 6 }, // 22 { 0, 1, 2, 4, 5, 0, 0, 3, 6, 0, 0, 0, 0, 6 }, // 23 { 1, 2, 3, 4, 5, 0, 0, 0, 6, 0, 0, 0, 0, 6 }, // 24 { 1, 2, 3, 4, 5, 0, 0, 0, 6, 0, 0, 0, 0, 6 }, // 25 { 0, 1, 2, 0, 4, 0, 0, 3, 5, 6, 0, 0, 0, 6 }, // 26 // 1 2 3 4 5 6 7 8 9 A B C D F { 0, 1, 2, 0, 4, 0, 0, 3, 5, 6, 0, 0, 0, 3 }, // 27 { 0, 1, 3, 6, 0, 0, 2, 4, 0, 0, 5, 0, 0, 5 }, // 28 { 0, 1, 2, 3, 5, 0, 0, 0, 4, 6, 0, 0, 0, 6 }, // 29 { 0, 1, 2, 3, 6, 0, 0, 0, 4, 0, 0, 5, 0, 5 }, // 30 { 1, 2, 3, 4, 5, 0, 0, 0, 0, 6, 0, 0, 0, 6 }, // 31 { 1, 2, 3, 4, 5, 6, 0, 0, 0, 0, 0, 0, 0, 6 } // 32 }; void EnvDisplay::paint(Graphics &g) { int rate[4]; int level[4]; 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)); } } AlgoDisplay::AlgoDisplay() { algo = NULL; } /** * For now, this is hardcoded 126x56 (21x14 each) */ void AlgoDisplay::paint(Graphics &g) { int alg; if ( algo == NULL ) { return; } if ( *algo <= 31 ) { alg = *algo; } else { alg = 31; } const char *arr = algoArr[alg]; for(int i=0;i<13;i++) { char target = arr[i]; bool feedback = target == arr[13]; if ( target == 0 ) continue; if ( i < 6 ) { drawOp(g, i, 3, target, feedback); continue; } if ( i < 10 ){ drawOp(g, (i-6)+1, 2, target, feedback); continue; } if ( i < 12 ) { drawOp(g, (i-10)+2, 1, target, feedback); continue; } // last one drawOp(g, (i-12)+3, 0, target, feedback); } } void AlgoDisplay::drawOp(Graphics &g, int x, int y, int num, bool feedback) { String txt; txt << num; g.setColour(Colour(0xFF0FC00F)); g.fillRect(x*21+1, y*14+1, 19, 13); g.setColour(Colour(0xFFFFFFFF)); g.drawText(txt, x*21, y*14, 21, 14, Justification::centred, true); if ( feedback ) { g.setColour(Colour(0xFFFFFFFF)); int x1 = (x*21) + 19; g.drawLine(x1, y*14+1, x1, y*14+14, 3); } } DXLookNFeel::DXLookNFeel() { setColour(TextButton::buttonColourId,Colour(0xFF0FC00F)); setColour(Slider::rotarySliderOutlineColourId,Colour(0xFF0FC00F)); setColour(Slider::rotarySliderFillColourId,Colour(0xFFFFFFFF)); }